TiCDC 双向复制

    本文档以在两个 TiDB 集群之间进行双向复制为例,介绍双向复制的使用方法。

    TiCDC 复制功能只会将指定时间点之后的增量变更复制到下游集群。开始双向复制之前,需要采取以下步骤:

    1. (可选)根据实际需要,使用数据导出工具 和导入工具 TiDB Lightning 将两个集群的数据导入到对方集群。

      1. 确认上下游集群的时间点。如果进行双集群容灾,那么建议确保两个集群在某个对应的时刻的数据是一致的,例如 TiDB A 在 时刻与 TiDB B 在 ts=2 的时刻数据是一致的。

      2. 在创建同步任务时,分别把对应集群的同步任务的 --start-ts 参数指定为对应的 ,即上游为 TiDB A 的同步任务需设置参数 --start-ts=1,上游为 TiDB B 的同步任务需设置参数 --start-ts=2

    2. 在创建同步任务的 参数所指定的配置文件中,添加如下配置:

    3. (可选)如果需要追踪数据写入源,可以使用 TiDB 系统变量 为集群设置不同的数据源 ID。

    这样,以上搭建好的集群即可对数据进行双向复制。

    如果需要执行 DDL,采取以下步骤:

    1. 等待所有集群中对应表的所有写入已经同步到其他集群后,手动在每一个 TiDB 集群上单独执行所有的 DDL。
    2. 等待 DDL 完成之后,重新恢复写入。

    注意,添加非唯一索引 DDL 不会引起双向复制链路中断,因此不用停止对应表的写入。

    在业务数据停止写入之后,你可以在两个集群中都插入一行特殊的值,通过检查这两行特殊的值来确保数据达到了一致的状态。

    检查完毕之后,停止同步任务即可停止双向复制。

    • DDL 的限制见。

    • TiCDC 双向复制功能支持超过 2 个集群的双向同步,但是不支持多个集群级联模式的同步,即 TiDB A -> TiDB B -> TiDB C -> TiDB A 的环形复制方式。在这种部署方式下,如果其中一个链路出现问题则会影响整个数据同步链路。因此,如果需要部署多个集群之间的双向复制,每个集群都需要与其他集群两两相连,即 TiDB A <-> TiDB BTiDB B <-> TiDB C,。