全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
数据传输服务DTS

跨阿里云账号的 RDS 实时同步

更新时间:2017-11-28 15:20:01

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

支持场景

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

同步限制

数据源

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

同步架构

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

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

    一对一单向同步

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

    一对多单向同步

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

    多对一单向同步

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

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

    级联架构

  2. A->B->A 即实例 A 和实例 B 之间的双向同步架构(当前仅支持相同账号下的 RDS for MySQL 之间的双向同步架构,不支持跨账号的 RDS for MySQL 之间的双向同步架构)

    双向同步架构

如果用户配置同步链路过程中,配置了上述不支持的同步架构,那么预检查中的复杂拓扑检查项会检查失败。

功能限制

  • 不兼容触发器

如果同步对象为整个库且这个库中包含了会更新同步表内容的触发器,那么可能导致同步数据不一致。

例如同步的数据库为 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 实例

配置步骤

下面我们详细介绍下创建同步作业的具体步骤。

1. 购买同步链路

使用目标实例对应的阿里云账号登录 数据传输 DTS 控制台,进入数据同步页面。

点击控制台右上角“创建同步作业” 开始作业配置。

在链路配置之前需要购买一个同步链路。同步链路目前支持 包年包月按量付费 两种付费模式,可以根据需要选择不同的付费模式。

在购买页面需要配置的参数包括:

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

  • 源地域

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

  • 目标实例
    目标实例为同步作业的目标实例类型,目前支持 RDS for MySQL, MaxCompute, DataHub 和 分析型数据库 Analytic DB。如果进行 RDS 实例间的同步,那么选择 RDS for MySQL 即可。

  • 目标地域

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

  • 实例规格

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

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

  • 数量

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

购买实例

当购买完同步实例,返回数据传输控制台,点击新购链路右侧的“配置同步作业” 开始链路配置。

2.同步实例连接信息

在这一步主要配置:

  • 同步作业名称

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

  • 同步链路的 RDS 实例 ID

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

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

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

    1. "Service": [
    2. "受信阿里云账号ID@dts.aliyuncs.com"
    3. ]

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

    1. "Service": [
    2. "121852226014398@dts.aliyuncs.com"
    3. ]

    所以,完整的角色定义如下:

    1. {
    2. "Statement": [
    3. {
    4. "Action": "sts:AssumeRole",
    5. "Effect": "Allow",
    6. "Principal": {
    7. "RAM": [
    8. "acs:ram::1218522260143989:root"
    9. ],
    10. "Service": [
    11. "1218522260143989@dts.aliyuncs.com"
    12. ]
    13. }
    14. }
    15. ],
    16. "Version": "1"
    17. }

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

精确搜索

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

  • RDS 实例 ID

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

目标 RDS 实例选择要同步的目标 RDS 实例的实例 ID 即可。

实例信息配置

当这些内容配置完成后,可以点击“授权白名单并进入下一步”。

3.授权 RDS 实例白名单

这个步骤,主要是将数据传输服务器IP添加到同步 RDS 实例的白名单中。避免因为 RDS 设置了白名单,数据传输服务器连接不上 RDS 实例导致同步作业创建失败。

为了保证同步作业的稳定性,在同步过程中,请勿将白名单中的服务器 IP 从 RDS 实例的白名单中删除。

当白名单授权后,点击下一步,进入同步账号创建。

4.创建目标库上的同步账号

这个步骤主要是在目标 RDS 实例上创建一个同步账号,账号名字为:dtssyncwriter,在同步过程中,请勿删除这个账号,否则会导致同步链路中断。

5.选择同步对象

当创建完目标 RDS 实例的同步账号后,即进入同步对象的选择步骤。实时同步的同步对象的选择粒度可以支持到表级别,即用户可以选择同步某些库或是同步某几张表。

如果选择的同步对象为整个库,那么这个库中所有对象的结构变更操作(例如 create table,drop view 等),都会同步到目标库。

如果选择的某张表,那么只有这个表的 drop/alter/truncate/rename table,create/drop index 的操作会同步到目标库。

同步对象选择

当配置完同步对象后,进入同步初始化配置。

6.同步初始化配置

同步初始化配置,初始化是同步链路启动的第一步,它会将源实例中已经存在同步对象的结构及数据在目标实例中初始化,作为后续增量同步数据的基线数据。

同步初始化类型细分为:结构初始化,全量数据初始化。默认情况下,需要选择结构初始化及全量初始化。

同步初始化配置

7.预检查

当上面所有选项配置完成后,即进入启动之前的预检查。

当同步作业配置完成后,数据传输服务会进行限制预检查,当预检查通过后,可以点击 启动 按钮,启动同步作业。

当同步作业启动之后,即进入同步作业列表。此时刚启动的作业处于同步初始化状态。初始化的时间长度依赖于源实例中同步对象的数据量大小。当初始化完成后同步链路即进入同步中的状态,此时源跟目标实例的同步链路才真正建立完成。

本文导读目录