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

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

场景说明

复杂网络环境主要包含以下两种情况:

  • 数据的来源端和目标端有一端为私网环境。
    • VPC环境(除RDS)<->公网环境
    • 金融云环境<->公网环境
    • 本地自建无公网环境<->公网环境
  • 数据的来源端和目标端均为私网环境。
    • VPC环境(除RDS)<->VPC环境(除RDS)
    • 金融云环境<->金融云环境
    • 本地自建无公网环境<->本地自建无公网环境
    • 本地自建无公网环境<->VPC环境(除RDS)
    • 本地自建无公网环境<->金融云环境

实现逻辑

针对第一种复杂网络环境,可以在私网环境的一端相同网络环境下的机器上部署数据集成Agent,通过Agent与外部公网连通。私网环境通常有以下两种情况:

  • 购买云服务ECS上搭建的数据库,没有分配公网IP或弹性公网IP。
  • 本地IDC机房无公网IP。

云服务ECS

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

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

无公网IP本地IDC机房

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

配置数据源

  1. 以开发者身份登录DataWorks控制台,单击相应工作空间后的进入数据集成
  2. 选择同步资源管理 > 数据源,单击新增数据源
    新增数据源
  3. 此处需要新增连接串模式(数据集成网络不可直接连通)类型的MySQL数据源作为来源端数据源,新增MaxCompute数据源作为目标端数据源。
    • 来源端数据源
      源端数据源
      配置 说明
      数据源类型 当前选择的数据源类型为MySQL > 连接串模式(数据集成网络不可直接连通)
      数据源名称 数据源名称必须以字母、数字、下划线组合,且不能以数字和下划线开头。
      数据源描述 对数据源进行简单描述,不得超过80个字符。
      适用环境 可以选择开发生产环境。
      说明 仅标准模式工作空间会显示此配置。
      资源组 选择部署Agent的机器,通过Agent与外部公网连通,特殊网络环境的数据源可以将同步任务运行在资源组上。详情请参见新增任务资源
      JDBC URL JDBC连接信息,格式为jdbc:mysql://ServerIP:Port/Database
      用户名/密码 数据库对应的用户名和密码。
    • 目标端数据源
      目标数据源
      配置 说明
      数据源名称 数据源名称必须以字母、数字、下划线组合,且不能以数字和下划线开头。
      数据源描述 对数据源进行简单描述,不得超过80个字符。
      适用环境 可以选择开发生产环境。
      说明 仅标准模式工作空间会显示此配置。
      ODPS Endpoint 默认只读,从系统配置中自动读取。
      Tunnel Endpoint MaxCompute Tunnel服务的连接地址,详情请参见配置Endpoint
      ODPS项目名称 MaxCompute(ODPS)项目的名称。
      AccessID/AceessKey 访问密钥(AccessKeyID和AccessKeySecret),相当于登录密码。
  4. 源端数据源配置完成后,直接单击完成

    目标数据源配置完成后,单击测试连通性。连通成功后,单击完成

新建数据同步节点

  1. 单击左上角的DataWorks图标,选择全部产品 > DataStudio(数据开发)
  2. 进入DataStudio(数据开发)页面,选择新建 > 业务流程

  3. 新建业务流程对话框中,填写业务流程名称描述,单击新建
  4. 展开业务流程,右键单击数据集成,选择新建数据集成节点 > 数据同步,输入节点名称

  5. 单击提交

导入模板

  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"
    }

运行同步任务

您可以通过以下两种方式运行任务:

  • 在数据同步节点的编辑页面,直接单击运行
  • 调度运行,提交调度的步骤请参见调度配置