数据集成通过部署Agent,可以打通任意网络环境之间的数据传输同步。本文将为您介绍如何在仅一端数据源无法连通的情况下,进行数据同步。

背景信息

复杂网络环境主要包括以下两种情况:
  • 数据的来源端和目标端有一端为私网环境:
    • VPC环境(除RDS)<->公网环境
    • 金融云环境<->公网环境
    • 本地自建无公网环境<->公网环境
  • 数据的来源端和目标端均为私网环境:
    • VPC环境(除RDS)<->VPC环境(除RDS)
    • 金融云环境<->金融云环境
    • 本地自建无公网环境<->本地自建无公网环境
    • 本地自建无公网环境<->VPC环境(除RDS)
    • 本地自建无公网环境<->金融云环境

两端数据源均无法连通的情况请参见(两端不通)数据源网络不通的情况下的数据同步

实现逻辑

针对第一种复杂网络环境,您可以在私网环境的一端、相同网络环境下的机器上,部署数据集成Agent,通过Agent与外部公网连通。私网环境通常有以下两种情况:
  • 购买云服务ECS上搭建的数据库,没有分配公网IP或弹性公网IP。
  • 本地IDC机房无公网IP。

云服务ECS

下图为云服务ECS场景下的数据同步方式。数据同步方式
  • 由于ECS2服务器无法访问公网,所以需要准备1台和ECS2在同一网段,并且可以访问公网的机器ECS1部署Agent。
  • 将ECS1作为资源组,并且同步任务运行在该机器上。
说明 您需要给数据库赋权限,让ECS2服务器能访问到相应的数据库,才可以读取该数据库的数据至ECS1中。授权命令如下所示。
grant all privileges on *.* to 'demo_test'@'%' identified by '密码';  -- %号代表给所有IP授权。

ECS2上的自建数据源同步任务运行在自定资源组上,需要给自定资源组机器授权,添加ECS2机器内网或外网IP、端口至ECS1的安全组,详情请参见添加安全组

无公网IP本地IDC机房

下图为无公网IP本地IDC机房场景下的数据同步方式。数据同步方式
  • 由于机器1无法访问公网,所以需要准备1台和机器1在同一网段,并且可以访问公网的机器2部署Agent。
  • 将机器2作为自定义资源组,并且同步任务运行在该机器上。

新增数据源

  1. 以开发者身份登录DataWorks控制台,单击相应工作空间后的进入数据集成
  2. 单击左侧导航栏中的数据源,即可跳转至工作空间管理 > 数据源管理页面。
  3. 单击数据源管理页面右上角的新增数据源
  4. 本文需要新增连接串模式类型的MySQL数据源作为来源端数据源,新增MaxCompute数据源作为目标端数据源。
    • 来源端数据源连接串模式
      参数 描述
      数据源类型 当前选择的数据源类型为MySQL > 连接串模式
      数据源名称 数据源名称必须以字母、数字、下划线组合,且不能以数字和下划线开头。
      数据源描述 对数据源进行简单描述,不得超过80个字符。
      适用环境 您可以选择开发生产环境。
      说明 仅标准模式工作空间会显示该配置。
      JDBC URL JDBC连接信息,格式为jdbc:mysql://ServerIP:Port/Database
      用户名 数据库对应的用户名。
      密码 数据库对应的密码。
    • 目标端数据源目标数据源
      参数 描述
      数据源名称 数据源名称必须以字母、数字、下划线组合,且不能以数字和下划线开头。
      数据源描述 对数据源进行简单描述,不得超过80个字符。
      适用环境 您可以选择开发生产环境。
      说明 仅标准模式工作空间会显示此配置。
      ODPS Endpoint 默认只读,从系统配置中自动读取。
      Tunnel Endpoint MaxCompute Tunnel服务的连接地址,详情请参见配置Endpoint
      ODPS项目名称 MaxCompute(ODPS)项目的名称。
      AccessKey ID 访问密钥中的AccessKeyID,您可以进入控制台的用户信息管理页面进行复制。
      AccessKey Secret 访问密钥中的AccessKey Secret,相当于登录密码。
  5. 源端数据源配置完成后,直接单击完成
    目标数据源配置完成后,单击测试连通性。连通成功后,单击完成

新建离线同步节点

  1. 数据源页面,单击左上角的图标,选择全部产品 > DataStudio(数据开发)
  2. 数据开发页面,鼠标悬停至新建图标,单击业务流程
  3. 新建业务流程对话框中,输入业务流程名称描述,单击新建
  4. 展开业务流程,右键单击数据集成,选择新建 > 离线同步
  5. 新建节点对话框中,输入节点名称,并选择目标文件夹
  6. 单击提交

导入模板

  1. 成功创建离线同步节点后,单击工具栏中的转换脚本
    转换脚本
  2. 单击提示对话框中的确认,即可进入脚本模式进行开发。
    说明 脚本模式支持更多功能,例如在网络不可达的情况下,编辑同步任务。
  3. 单击工具栏中的导入模板
    导入模板
  4. 导入模板对话框中,选择从来源端的MySQL数据源同步至目标端的ODPS数据源的导入模板,单击确认
    导入模板
    参数 描述
    来源类型 选择MySQL
    数据源 选择新建的来源端的数据源。
    目标类型 选择ODPS
    数据源 选择新建的目标端的数据源。
  5. 导入模板后,根据自身需求编辑代码。
    {
    "type": "job",
    "configuration": {
     "setting": {
       "speed": {
         "concurrent": "1",//作业并发数。
         "mbps": "1"//作业速率上限。
       },
       "errorLimit": {
         "record": "0"//错误记录数。
       }
     },
     "reader": {
       "parameter": {
         "splitPk": "id",//切分键。
         "column": [//目标端的列名。
           "name",
           "tag",
           "age",
           "balance",
           "gender",
           "birthday"
         ],
         "table": "source",//源端的表名。
         "where": "ds = '20171218'",//过滤条件。
         "datasource": "private_source"//数据源名称,需要和添加的数据源名保持一致。
       },
       "plugin": "mysql"
     },
     "writer": {
       "parameter": {
         "partition": "ds='${bdp.system.bizdate}'",//分区信息。
         "truncate": true,
         "column": [//目标端的列。
           "name",
           "tag",
           "age",
           "balance",
           "gender",
           "birthday"
         ],
         "table": "random_generated_data",//目标端的表名。
         "datasource": "odps_mrtest2222"//数据源名称,需要和添加的数据源名保持一致。
       },
       "plugin": "odps"
     }
    },
    "version": "1.0"
    }

运行同步任务

您可以通过以下两种方式运行任务:
  • 在离线同步节点的编辑页面,直接单击运行
  • 调度运行,提交调度的步骤请参见调度配置