写点什么

阿里云 DTS 数据同步实施

作者:乌龟哥哥
  • 2023-04-25
    上海
  • 本文字数:4136 字

    阅读完需:约 14 分钟

阿里云 DTS 数据同步实施

背景说明

基于线下 IDC 机房传统数据库需要和云上数据实现数据一致性需求,并实现数据库之间的实时增量同步功能,特此借助于阿里云的 DTS 数据同步服务来保证线下线上数据间的实时同步,并确保业务数据的一致性和完整性。

DTS 数据同步原理


实时同步功能能够实现两个数据源之间的增量数据实时同步。DTS 将陆续支持 OLTP->OLAP 的数据实时同步


同步链路的创建过程如下:


  • 同步初始化

  • 将源实例的历史存量数据在目标实例初始化一份

  • 增量数据实时同步

  • 当初始化完成后进入两边增量数据实时同步阶段,该阶段 DTS 将实现源实例和目标实例的数据动态同步。


增量数据实时同步过程,DTS 的底层实现模块主要包括:


  • 日志读取模块

  • 日志读取模块从源实例读取原始数据,经过解析、过滤及标准格式化,最终将数据在本地持久化。日志读取模块通过数据库协议连接并读取源实例的增量日志。如果源数据库为 RDS MySQL,那么数据抓取模块通过 Binlog dump 协议连接源库。

  • 日志回放模块

  • 日志回放模块从日志读取模块中请求增量数据,并根据用户配置的同步对象进行数据过滤,然后在保证事务时序性及事务一致性的前提下,将日志记录同步到目标实例


DTS 具备日志读取模块、日志回放模块的高可用,DTS 容灾系统一旦检测到链路异常,就会在健康服务节点上断点重启链路,从而有效保证同步链路的高可用。

数据同步前准备工作

数据库权限账号配置

  • 为自建MySQL创建账号并设置binlog

  • 当数据迁移/同步/订阅的源库为自建 MySQL 时,为满足预检查阶段对源库的要求,保障任务的顺利执行,在正式配置之前,您需要在自建 MySQL 数据库上创建账号并设置 binlog。

  • 执行该操作需要重启 MySQL 服务,为避免影响您的业务使用,请在业务低峰期操作。

  • 元数据库实例创建同步账号


  CREATE USER 'username'@'10.0.0.0/24' IDENTIFIED BY 'password';  # 说明  username:待创建的账号。  host:允许该账号登录的主机,如果允许该账号从任意主机登录数据库,可以使用百分号(%)。  password:账号的密码。
复制代码


  • 对账号进行授权操作

  • 本次原实例需要赋予的权限为:Replication slave、Replication client 及所有同步对象的 Select 权限,如果还有视图需要同步也需要 show view 的权限


  GRANT privileges ON databasename.tablename TO 'username'@'10.0.0.0/24' WITH GRANT OPTION;  # 说明  privileges:授予该账号的操作权限,如SELECT、INSERT、UPDATE等,如果要授予该账号所有权限,则使用ALL。  databasename:数据库名。如果要授予该账号具备所有数据库的操作权限,则使用星号(*)。  tablename:表名。如果要授予该账号具备所有表的操作权限,则使用星号(*)。  username:待授权的账号。  host:允许该账号登录的主机,如果允许该账号从任意主机登录,则使用百分号(%)。  WITH GRANT OPTION:授予该账号使用GRANT命令的权限,该参数为可选。
复制代码


  • 修改 binglong 参数


  # 修改binlog参数(/etc/my.cnf)  log_bin=mysql_bin  binlog_format=row  server_id=2 //设置大于1的整数  binlog_row_image=full //当自建MySQL的版本大于5.6时,则必须设置该项。  # 针对mysql中的全局权限  由于Replication slave、Replication client在mysql中属于全局权限,并且binlog不是针对库的,所有的库都混写在一个binlog日志中,无法针对库赋予权限,所以授权方式为:  GRANT REPLICATION SLAVE REPLICATION CLIENT *.* TO username@host IDENTIFIED BY password;  # 此方式只适合自建库,阿里云不支持  如果只让拉取指定库的日志可以做如下配置:  在/etc/my.cnf中添加如下配置:  Binlog_Do_DB:设定哪些数据库(Schema)需要记录Binlog;  Binlog_Ignore_DB:设定哪些数据库(Schema)不要记录Binlog;
复制代码

连接其他云服务商

示例图如下:


允许 DTS 访问专线、VPN 网关或智能网关所属网络

在配置数据迁移、数据同步或数据订阅时,如果源或目标库为通过专线、VPN 网关或智能网关接入的自建数据库,需要放通 DTS 对该网络的访问。

迁移/同步/订阅本地数据库时需添加的 IP 白名单

当迁移/同步/订阅的源或目标数据库为有公网 IP 的自建数据库或通过专线/VPN 网关/智能网关接入的自建数据库时,且您的自建数据库具备白名单等安全设置,您需要将 DTS 服务器的 IP 地址段加入到自建数据库对应的安全设置中

数据迁移/订阅

  • 当数据迁移的源或目标数据库为有公网 IP 的自建数据库或通过专线/VPN 网关/智能网关接入的自建数据库时,通过下表定位到目标数据库所在区域,获取对应的 IP 地址段并将其加入到源和目标数据库的安全设置中。

  • 例如:源数据库地区为深圳,目标数据库地区为杭州,您只需要将杭州地区的 IP 地址段加入到源和目标数据库的安全设置中。

  • 当数据订阅的源数据库为有公网 IP 的自建数据库或通过专线/VPN 网关/智能网关接入的自建数据库时,通过下表定位到源数据库所在区域,获取对应的 IP 地址段并将其加入到源数据库的安全设置中。


ip 地址段如下:


数据同步

当数据同步的源数据库为通过专线/VPN 网关/智能网关接入的自建数据库时,您需要根据业务情况进行配置:


  • 例如:源数据库地区为深圳,目标数据库地区为杭州,您需要将深圳和杭州地区的 IP 地址段,都加入到源数据库的安全设置中。

  • 例如:源数据库地区为深圳,目标数据库地区为杭州,您只需将杭州地区的 IP 地址段,加入到目标数据库的安全设置中


操作步骤

  • IDC 数据中心侧需要实现的功能如下:

  • 需要配置同步账号并附加的权限为:Replication slave、Replication client 及所有同步对象的 Select 权限,如果还有视图需要同步也需要 show view 的权限。

  • 修改 binlog 参数(/etc/my.cnf)


    # 配置my.cnf    log_bin=mysql_bin    binlog_format=row    server_id=2 //设置大于1的整数    binlog_row_image=full //当自建MySQL的版本大于5.6时,则必须设置该项
复制代码


  • 提供同步实例的账号、密码、主机 IP 地址,如果不是 3306 端口还需提供 mysql 监听的端口号,需要同步的库名和表名。

  • 源数据库实例允许 100.104.183.0/24,100.104.164.0/24 网段的访问 iP 通过

  • 源数据库所在的网络放行 100.104.183.0/24,100.104.160.0/24 的网络,并且将上述网段的路由下一跳地址指向专线互联地址

  • 测试和 DTS 网络的可达性


    # 执行如下命令,测试网络通路    traceroute  100.104.183.1
复制代码


  • 线上阿里云侧需要实现的功能如下:

  • 1、首先需要将边界路由器 VBR 和云数据库实例所在的 VPC 加入到云企业网中,并将 DTS 所在的网络加入到云企业网中

  • 2、目标数据库所在实例允许 100.104.183.0/24,100.104.164.0/24 网段的访问 iP 通过

  • 3、目标数据库所在网络放行 100.104.183.0/24,100.104.160.0/24 的网络,并在云企业网中配置对应的网段路由,下一跳指向 VPC 所在的网络

  • 云企业网添加 DTS 操作步骤:

  • 背景信息

  • 云服务指使用阿里云云服务地址段 100.64.0.0/10 提供服务的云产品,例如对象存储(OSS)、日志服务(SLS)、数据传输服务(DTS)等。在 VPC、VBR 或 CCN 加载到同一个云企业网实例后,您的本地网络可以通过云企业网访问部署在 VPC 中的云服务


  • 操作步骤

  • 登录云企业网管理控制台

  • 单击目标云企业网实例 ID

  • 单击云服务,然后单击设置云服务


  • 在设置云服务页面,配置以下信息

  • 内网 IP:输入属于 100.64.0.0/10 子网段的云服务 IP 地址或地址段。例如:100.118.28.52/32。

  • 本次配置地址为: 100.64.0.0/11 和 100.96.0.0/11

  • 服务所在地:选择云服务所在的地域

  • 服务 VPC:选择已加载到云企业网中的 VPC 网络实例, 配置完成后,VBR、CCN 将以该 VPC 的身份访问云服务

  • 访问所在地:选择需要访问该云服务的 VBR 或 CCN 所在的地域

  • 描述:(可选)输入云服务描述信息,描述信息可以为空;或填写 2~256 个中英文字符,不能以http://https://开头。


数据同步具体实现

结构初始化涉及的数据类型映射关系

由于不同的数据库支持的数据类型不一样,数据类型无法一一对应。所以 DTS 在进行数据同步的结构初始化时,会根据目标库支持的数据类型进行类型映射。本文为您列出数据类型的映射关系,便于您查阅和评估数据同步对业务的影响。


从自建 MySQL、RDS MySQL 或 PolarDB MySQL 同步至 AnalyticDB for MySQL


Mysql 间数据同步

数据传输服务 DTS(Data Transmission Service)支持将通过专线、VPN 网关或智能网关接入的自建 MySQL 同步至 RDS MySQL,实现增量数据的实时同步。

前提条件

  • 数据同步的目标 RDS 实例已存在,如不存在请创建RDS实例

  • 自建 MySQL 数据库版本为 5.1、5.5、5.6、5.7 或 8.0 版本。

  • 已经将自建 MySQL 数据库通过专线、VPN 网关或智能网关接入至阿里云专有网络,详情请参见连接本地IDC

注意事项

  • DTS 在执行全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢 SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据同步前评估源库和目标库的性能,同时建议您在业务低峰期执行数据同步(例如源库和目标库的 CPU 负载在 30%以下)。

  • 如果同步对象为单个或多个表(非整库),那么在数据同步时,请勿对源库的同步对象使用 gh-ost 或 pt-online-schema-change 等类似工具执行在线 DDL 变更,否则会导致同步失败。

  • RDS MySQL 实例必须具备内网地址

  • 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据

  • 全量初始化过程中,并发 insert 导致目标实例的表碎片,全量初始化完成后,目标实例的表空间比源实例的表空间大

数据同步前准备工作

在正式配置数据同步作业之前,需要为自建MySQL创建账号并设置binlog

操作步骤

  • 购买数据同步作业

  • 登录数据传输控制台

  • 在左侧导航栏,单击数据同步

  • 在同步作业列表页面顶部,选择同步的目标实例所属地域


  • 定位至已购买的数据同步实例,单击该实例的配置同步链路


  • 配置同步通道的源实例及目标实例信息



  • 单击页面右下角的授权白名单并进入下一步

  • 配置同步策略及对象信息


  • 上述配置完成后,单击页面右下角的下一步

  • 配置同步初始化的高级配置信息


  • 此步骤会将源实例中已经存在同步对象的结构及数据在目标实例中初始化,作为后续增量同步数据的基线数据。

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

  • 上述配置完成后,单击页面右下角的预检查并启动

  • 在预检查对话框中显示预检查通过后,关闭预检查对话框,同步作业将正式开始

  • 等待该同步作业的链路初始化完成,直至状态处于同步中


发布于: 2023-04-25阅读数: 5
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021-03-16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
阿里云DTS数据同步实施_三周年连更_乌龟哥哥_InfoQ写作社区