开发者社区 问答 正文

如何通过跨阿里云账号RDS实例间数据实时同步作业的配置流程

数据传输支持不同阿里云账号下的两个RDS实例之间的实时同步。本小节介绍跨阿里云账号RDS实例间数据实时同步作业的配置流程。

支持场景

  1. 支持不同阿里云账号下的两个RDS MySQL实例间的实时同步。
  2. 支持公共云与金融云账号下的RDS实例间的数据实时同步。


同步限制



数据源

  1. 目前实时同步只能支持RDS MySQL实例,暂不支持其他数据源类型。
  2. 目标实例不支持访问模式为标准模式且只有外网连接地址的RDS实例。
  3. 不支持香港可用区A的RDS实例的实时同步。


同步架构


目前数据传输服务提供的实时同步功能支持的同步架构有限,其仅能支持如下两种架构:

  1. A->B 即两个实例之间的单向同步。且要求B中同步的对象必须为只读,否则可能导致同步链路异常。

  2. A->B/C/D 即1对多的分发式同步架构,这个架构对目标RDS实例个数没有限制,但是要求目标实例中的同步对象必须为只读,否则可能导致同步链路异常。

  3. B/C/D->A 即多对1的数据汇总架构。对于这种多对1的同步架构,为了保证同步数据一致性,要求每条同步链路同步的对象不相同。

对于下面几种同步架构,暂时不支持:

  1. A->B->C 即级联架构

  2. A->B->A 即实例A和实例B之间的双向同步架构

如果用户配置同步链路过程中,配置了这些不支持的同步架构,那么预检查中的[backcolor=transparent]复杂拓扑检查项会检查失败。

功能限制

  • 不兼容触发器

如果同步对象为整个库且这个库中包含了会更新同步表内容的触发器,那么可能导致同步数据不一致。
例如同步库为A,这个库中存在了两个表a, b。a上有一个触发器,触发器内容为在insert一条数据到a之后,在b中插入一条数据。这种情况下,在同步过程中,如果源实例有a上的insert操作,就会导致b表在源实例跟目标实例数据不一致。
为了解决这个问题,只能将目标实例中的对应触发器删除掉。b表的数据由源实例同步过去。具体解决方案详见最佳实践中的,触发器存在情况下如何配置同步链路。
  • rename table 限制

rename table操作可能导致同步数据不一致。例如同步对象只包含表A,不包含表B,如果同步过程中源实例执行了rename A to B的操作,那么改名后的B表的操作不会被同步到目标库。为了解决这个问题,可以选择同步表A、B对应的整个数据库。

准备事项


在配置同步作业前,要确保同步作业的源及目标RDS实例都已经存在。如果不存在,那么请先 购买RDS实例

配置步骤


下面我们详细介绍下创建同步作业的具体步骤。
[backcolor=transparent]1. 购买同步链路
使用目标实例对应的阿里云账号登录 数据传输服务控制台,进入数据同步页面。
点击控制台右上角“创建同步作业” 开始作业配置。
在链路配置之前需要购买一个同步链路。同步链路目前支持包年包月及按量付费两种付费模式,可以根据需要选择不同的付费模式。
在购买页面需要配置的参数包括:

  • 源实例源实例为同步作业的源实例类型,目前只支持RDS For MySQL.

  • 源地域

源地域为同步链路源实例所在地域。

  • 目标实例目标实例为同步作业的目标实例类型,目前支持RDS For MySQL, MaxCompute, DataHub。如果进行RDS实例间的同步,那么选择RDS For MySQL即可。

  • 目标地域

目标地域为同步链路目标实例所在地域。
  • 实例规格

实例规格影响了链路的同步性能,实例规格跟性能之间的对应关系详见 数据同步规格说明

  • 网络类型对于RDS实例间的数据同步,目前只支持通过私网同步。

  • 数量

数量为一次性购买的同步链路的数量,如果购买的是按量付费实例,一次最多购买99条链路。

当购买完同步实例,返回数据传输控制台,点击新购链路右侧的“配置同步作业” 开始链路配置。
2.[backcolor=transparent]同步实例连接信息
在这一步主要配置:
  • 同步作业名称

同步作业名称没有唯一性要求,主要为了更方便识别具体的作业,建议选择一个有业务意义的作业名称,方便后续的链路查找及管理。
  • 同步链路的RDS实例ID

由于源实例不属于登录的阿里云账号,所以源实例配置时,点击界面右侧 的 [backcolor=transparent]其他阿里云账号下的RDS实例,然后配置:

  • RDS实例所属阿里云账号 为源RDS实例所属阿里云账号的账号ID,在登录后,到账号管理的安全设置界面获取。

  • 角色名称为了提升安全性,配置跨账号RDS同步任务的用户,需要得到源RDS实例所属云账号的授权后,才能配置源RDS实例。这里面配置的 角色名称,即为RAM跨账号授权的角色名称。跨账号授权的流程如下:(1) 进入RAM控制台的角色管理界面,点击页面右上角的[backcolor=transparent] 新建角色,开始创建跨账号授权角色。(2) 第一步的角色类型,选择用户角色(3) 第二步的受信云账号,选择 [backcolor=transparent]其他云账号,同时,[backcolor=transparent]受信云账号ID 配置最终配置DTS同步作业的阿里云账号的账号ID (4) 第四步,配置角色名称,这个名称就是DTS同步作业配置过程中,需要填写的角色名称。角色创建完成后,需要修改角色授权策略,授权 受信云账号 只能在DTS 控制台访问自己的云资源。具体修改步骤如下:(1) 在角色管理界面,点击 刚创建角色 后面的 [backcolor=transparent]管理 按钮,进入角色管理界面。(2) 在角色管理界面,点击右上角的 编辑基本信息,进入角色编辑框,在编辑框中,修改Principal,添加service定义:"Service": [
  •         "受信阿里云账号ID@dts.aliyuncs.com"
  •       ]


  • 受信云账号的账号ID,即最后配置DTS同步作业的阿里云账号ID。dts.aliyuncs.com 为DTS服务代号。假设配置DTS同步作业的阿里云账号ID为:121852226014398,那么service定义为:
  • "Service": [
  •         "121852226014398@dts.aliyuncs.com"
  •       ]


  • 所以,完整的角色定义如下:
  • {
  • "Statement": [
  •   {
  •     "Action": "sts:AssumeRole",
  •     "Effect": "Allow",
  •     "Principal": {
  •       "RAM": [
  •         "acs:ram::1218522260143989:root"
  •       ],
  •       "Service": [
  •         "1218522260143989@dts.aliyuncs.com"
  •       ]
  •     }
  •   }
  • ],
  • "Version": "1"
  • }


当配置完角色受信身份后,需要将配置DTS任务需要的相关权限授权给角色后,DTS才能扮演这个角色完成任务配置及运行。进入RAM角色管理界面,点击刚才刚创建的角色后面的 [backcolor=transparent]授权 按钮,进行DTS系统策略授权。进入角色授权界面后,进入 精确授权 界面,在搜索框中搜索 AliyunDTSRolePolicy ,将这个系统策略授权给角色。

当配置完成后,DTS控制台中填写的角色名称,即为刚才创建的跨账号角色名称。
  • RDS实例ID

当配置完阿里云账号和角色名称后,即可以选择要同步的源RDS实例ID。
目标RDS实例选择要同步的RDS实例ID即可。

当这些内容配置完成后,可以点击“授权白名单并进入下一步”。
[backcolor=transparent]3.授权RDS实例白名单
这个步骤,主要是将数据传输服务器IP添加到同步RDS实例的白名单中。避免因为RDS设置了白名单,数据传输服务器连接不上RDS导致同步作业创建失败。
为了保证同步作业的稳定性,在同步过程中,请勿将这些服务器IP从RDS实例的白名单中删除。
当白名单授权后,点击下一步,进入同步账号创建。
[backcolor=transparent]4.创建目标库上的同步账号
这个步骤主要是在目标RDS实例上创建一个同步账号,账号名字为:dtssyncwriter,在同步过程中,不能删除这个账号,否则会导致同步链路中断。
[backcolor=transparent]5.选择同步对象
当创建完目标RDS实例的同步账号后,即进入同步对象的选择步骤。实时同步的同步对象的选择粒度可以支持到表级别,即用户可以选择同步某些库或是同步某几张表。
如果选择的同步对象为整个库,那么这个库中所有对象的结构变更操作(例如create table,drop view 等),都会同步到目标库。
如果选择的某张表,那么只有这个表的drop/alter/truncate/rename table,create/drop index 的操作会同步到目标库。

当配置完同步对象后,进入同步初始化配置。
[backcolor=transparent]6.同步初始化配置
同步初始化配置,初始化是同步链路启动的第一步,它会将源实例中已经存在同步对象的结构及数据在目标实例中初始化,作为后续增量同步数据的基线数据。
同步初始化类型细分为:结构初始化,全量数据初始化。默认情况下,需要选择结构初始化及全量初始化。

[backcolor=transparent]7.预检查
当上面所有选项配置完成后,即进入启动之前的预检查。
当同步作业配置完成后,数据传输服务会进行限制预检查,当预检查通过后,可以点击 [backcolor=transparent]启动 按钮,启动同步作业。
当同步作业启动之后,即进入同步作业列表。此时刚启动的作业处于[backcolor=transparent]同步初始化状态。初始化的时间长度依赖于源实例中同步对象的数据量大小。当初始化完成后同步链路即进入[backcolor=transparent]同步中的状态,此时源跟目标实例的同步链路才真正建立完成。

展开
收起
云栖大讲堂 2017-10-31 11:51:51 3711 分享 版权
1 条回答
写回答
取消 提交回答