0
0
0
0
博客/.../

TiCDC双向复制实操

 春风十里不如你  发表于  2026-05-26
原创高可用

一、需求

为保障TiDB集群的高可用,需要搭建双向复制,两个集群都可写入数据。应用侧来控制,避免两个集群写入数据的冲突。

二、部署

1、两集群同时扩容ticdc: scale-out-primary-cdc.toml cdc_servers:

- host: 10.211.55.30 ssh_port: 22 port: 8300 deploy_dir: "/tidb-deploy/cdc-8300" data_dir: "/tidb-data/cdc-8300" log_dir: "/tidb-deploy/cdc-8300/log"

scale-out-second-cdc.toml cdc_servers:

- host: 10.211.55.30 ssh_port: 22 port: 8300 deploy_dir: "/tidb-deploy/cdc-8300" data_dir: "/tidb-data/cdc-8300" log_dir: "/tidb-deploy/cdc-8300/log"

tiup cluster scale-out test ./scale-out-cdc.toml

tiup cluster scale-out test1 ./scale-out-cdc.toml

2、两集群准备changefeed配置文件

配置一:只同步dml changefeed_tidb_test.toml bdr-mode = true [filter] rules = ['.', '!test.'] [[filter.event-filters]] matcher = [".*"] ignore-event = ["all ddl"] # 过滤掉ddl 事件

配置二:同步部分DDL(v7.0.6开始支持同步DDL,详情见TiCDC 双向复制 | TiDB 文档中心

changefeed_tidb_test.toml bdr-mode = true [filter] rules = ['.', '!test.']

同步DDL时,需要设置BDR role,PRIMARY和SECONDARY。

(1)该方式只能PRIMARY集群执行DDL,SECONDARY无法执行DDL,只能同步DDL。

集群一:

mysql> ADMIN SET BDR ROLE PRIMARY;

集群二:

mysql> ADMIN SET BDR ROLE SECONDARY;

(2)该方式两个集群都可以执行DDL,但是要确保DDL不出现冲突。

集群一:

mysql> ADMIN SET BDR ROLE PRIMARY;

集群二:

mysql> ADMIN SET BDR ROLE PRIMARY;

3、两集群同时创建changefeed,创建前保证数据一致或者通过 --start-ts 指定 tso: tiup cdc cli changefeed create --server=http://10.211.55.30:8300 --sink-uri="tidb://root:@10.211.55.31:4000/" --changefeed-id="simple-primary-task" --config ./changefeed_tidb_test.toml

tiup cdc cli changefeed create --server=http://10.211.55.31:8300 --sink-uri="tidb://root:@10.211.55.30:4000/" --changefeed-id="simple-second-task" --config ./changefeed_tidb_test.toml

4、检查两集群同步状态 tiup cdc cli changefeed --server=http://10.211.55.30:8300 list tiup cdc cli changefeed query -s --server=http://10.211.55.30:8300 --changefeed-id simple-primary-task

tiup cdc cli changefeed --server=http://10.211.55.31:8300 list tiup cdc cli changefeed query -s --server=http://10.211.55.31:8300 --changefeed-id simple-second-task

三、总结

双向复制场景目前应用并不广泛,DDL 只有 PRIMARY 的角色才能执行,若想双向同步DDL需要都设置为 PRIMARY,但是同步的DDL有限(DROP无法同步),需结合自身场景进行方案选择。

另外,该场景下还有较多限制,需要应用测保证写入不冲突。

参考文档:TiCDC 双向复制 | TiDB 文档中心

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论