TiCDC 双向复制
本文档以在两个 TiDB 集群之间进行双向复制为例,介绍双向复制的使用方法。
TiCDC 复制功能只会将指定时间点之后的增量变更复制到下游集群。开始双向复制之前,需要采取以下步骤:
(可选)根据实际需要,使用数据导出工具 和导入工具 TiDB Lightning 将两个集群的数据导入到对方集群。
-
确认上下游集群的时间点。如果进行双集群容灾,那么建议确保两个集群在某个对应的时刻的数据是一致的,例如 TiDB A 在 时刻与 TiDB B 在
ts=2
的时刻数据是一致的。在创建同步任务时,分别把对应集群的同步任务的
--start-ts
参数指定为对应的 ,即上游为 TiDB A 的同步任务需设置参数--start-ts=1
,上游为 TiDB B 的同步任务需设置参数--start-ts=2
。
在创建同步任务的 参数所指定的配置文件中,添加如下配置:
(可选)如果需要追踪数据写入源,可以使用 TiDB 系统变量 为集群设置不同的数据源 ID。
这样,以上搭建好的集群即可对数据进行双向复制。
如果需要执行 DDL,采取以下步骤:
- 等待所有集群中对应表的所有写入已经同步到其他集群后,手动在每一个 TiDB 集群上单独执行所有的 DDL。
- 等待 DDL 完成之后,重新恢复写入。
注意,添加非唯一索引 DDL 不会引起双向复制链路中断,因此不用停止对应表的写入。
在业务数据停止写入之后,你可以在两个集群中都插入一行特殊的值,通过检查这两行特殊的值来确保数据达到了一致的状态。
检查完毕之后,停止同步任务即可停止双向复制。
DDL 的限制见。
TiCDC 双向复制功能支持超过 2 个集群的双向同步,但是不支持多个集群级联模式的同步,即 TiDB A -> TiDB B -> TiDB C -> TiDB A 的环形复制方式。在这种部署方式下,如果其中一个链路出现问题则会影响整个数据同步链路。因此,如果需要部署多个集群之间的双向复制,每个集群都需要与其他集群两两相连,即
TiDB A <-> TiDB B
,TiDB B <-> TiDB C
,。