TiDB 实例间数据同步之 TiCDC 实践
作者: huran_tidb 原文来源:https://tidb.net/blog/4e1bfc88
随着公司业务发展,业务数据与日俱增,数据库的存储容量以及可扩展性都面临挑战,TiDB 产品的引入可以帮助业务解决海量数据存储以及横向扩容的问题,但是由于公司业务具备一定的复杂性,核心的业务系统需要为下游提供相应的业务数据,这便会增加核心业务系统的数据库请求压力,为了解决这一问题,需要将核心业务的 TiDB 实例数据同步至另外一个 TiDB 业务实例以供下游进行访问和部分报表数据的输出。
TiCDC 是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,具有将数据还原到与上游任意 TSO 一致状态的能力,同时提供开放数据协议 (TiCDC Open Protocol),支持其他系统订阅数据变更。
TiCDC 的系统架构如下图所示:
TiCDC 可以支持将增量数据同步至下游的 TiDB 实例,但是需要先对要同步的数据进行初始化,针对需要初始化的数据量级采取不同的方式进行数据同步操作,具体实现如下:
轻量级数据同步
实现方式:dumpling+lightning+ticdc
方案优点: 不需要额外存储资源,操作方便
具体步骤如下:
如果 tikv_gc_life_time 值设置较小,先调整该值,此次操作将其调整为 8h
执行 dumpling 对源端 tidb 实例需要同步的表进行初始数据导出,具体命令如下:
./dumpling -u dbadmin -p’abcd1234’ -P 4000 -h 10.xx.xx.xxx –filetype sql -t 8 -o /data/backup/test_20210708 -r 200000 -F 256MiB -T test.test01,test.test02
执行 lightning 进行数据导入,配置文件和操作命令如下:
编辑配置文件 (遵照官方文档),vi tidb-lightning.toml
nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &
查看 dumpling 时对应的 ts 信息
创建 ticdc 的任务,指定导出数据时候的 ts
./cdc cli changefeed create –pd=http://10.xx.xx.xxx:2379 –sink-uri=“tidb://dbadmin:abcd1234\@10.xxx.xxx.xxx:4000/?max-txn-row=500” –changefeed-id=“simple-replication-task” –sort-engine=“unified” –start-ts=“426171672655036419” –config=changefeed_tidb.toml
查看任务状态是否正常,命令如下:
/data/cdc-8300/bin/cdc cli changefeed query -s –pd=http://10.xx.xx.xxx:2379 –changefeed-id=simple-replication-task
重量级数据同步
实现方式:br+ticdc
方案优点: 数据量大时初始数据较快,操作简单
具体步骤如下:
1) 如果 tikv_gc_life_time 值设置较小,先调整该值,此次操作将其调整为 8h
2) 先在源端创建测试表,并插入数据
3) 执行 br 公户对源端 tidb 实例对应的数据库进行备份 (需要备份至 NFS),具体命令如下:
br backup db –pd “10.xx.xx.xxx:2379” –db document –storage “local:///nas/br-test-backup” –ratelimit 120 –log-file backuptable.log
4) 以还原备份中表 test01 为例,在目标端 tidb 实例进行还原 (从 NFS 上还原)
bin/br restore table –db document –table test01 -s local:///nas/br-test-backup –pd 10.xx.xxx.xxx:2379 –log-file restore-nfs.log
5) 查看 br 时对应的 ts 信息,存在 br 的 backuptable.log 日志里
6) 创建 ticdc 的任务,指定导出数据时候的 ts
cdc cli changefeed create –pd=http://10.xx.xx.xxx:2379 –sink-uri=“tidb://dbadmin:abcd1234\@10.xx.xx.xx:4000/?worker-count=16&max-txn-row=5000” –start-ts=426420211581976577 –changefeed-id=“simple-replication-task” –sort-engine=“unified” –config changefeed.toml
7) 数据同步验证,在源端插入一条数据
8) 在目标的 tidb 实例中查询
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/1966701e4e24a44c79520dd33】。文章转载请联系作者。
评论