暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

TiDB实例间数据同步之TiCDC

原创 小气鬼 2022-07-18
2369

TiCDC是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,具有将数据还原到与上游任意 TSO 一致状态的能力,同时提供开放数据协议 (TiCDC Open Protocol),支持其他系统订阅数据变更。

TiCDC 的系统架构如下图所示:

TiCDC可以支持将增量数据同步至下游的TiDB实例,但是需要先对要同步的数据进行初始化,针对需要初始化的数据量级采取不同的方式进行数据同步操作;具体实现如下:

备份工具的特点:

1、dumpling:可以把存储在TiDB或者mySQL数据导出为SQL格式,用于逻辑全量备份;导出后数据可以恢复到TiDB数据库,适用于

2、br:通过对大数据量的 TiDB 集群进行数据备份和恢复,实现数据迁移;适用大量新数据需要迅速导入到tidb中,每小时400GB~500GB

一、轻量级数据同步

实现方式:dumpling+lightning+ticdc

优点: 不需要额外存储资源,操作方便

1、如果tikv_gc_life_time值设置较小,先调整该值,此次操作将其调整为8h

set global tidb_gc_life_time=8h

2、执行dumpling对源端tidb实例需要同步的表进行初始数据导出,具体命令如下:

./dumpling -udumpling -p’xxx’ -h10.xx.xx.xx -P4000 --filetype sql --threads 16 -s 1000000 --tidb-mem-quota-query 10485760 -o /data/opdir/ > /data/opdir/dumpling.log 2>&1

3、执行lightning进行数据导入,配置文件和操作命令如下:

nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &

编辑配置文件(遵照官方文档),vi tidb-lightning.toml

[lightning]

# 日志

level = “info”

file = “tidb-lightning.log”

index-concurrency = 2

table-concurrency = 6

io-concurrency = 5

[tikv-importer]

# 选择使用的 local 后端

backend = “local”

# 设置排序的键值对的临时存放地址,目标路径需要是一个空目录

sorted-kv-dir = “/data/tidb-transfer/sorted-kv-dir”

addr = “xxxx:port”

[checkpoint]

# 是否启用断点续传。

# 导入数据时,TiDB Lightning 会记录当前表导入的进度。

# 所以即使 TiDB Lightning 或其他组件异常退出,在重启时也可以避免重复再导入已完成的数据。

enable = true

# 存储断点的数据库名称。

schema = “tidb_lightning_checkpoint”

driver = “file”

dsn = “/tmp/tidb_lightning_checkpoint.pb”

# 存储断点的方式。

# - file:存放在本地文件系统。

# - mysql:存放在兼容 MySQL 的数据库服务器。

[mydumper]

# 源数据目录。

data-source-dir = “/data/tidb-transfer/my_datasource”

# 配置通配符���则,默认规则会过滤 mysql、sys、INFORMATION_SCHEMA、PERFORMANCE_SCHEMA、METRICS_SCHEMA、INSPECTION_SCHEMA 系统数据库下的所有表

# 若不配置该项,导入系统表时会出现“找不到 schema”的异常

filter = [’*.*’, ‘!mysql.*’, ‘!sys.*’, ‘!INFORMATION_SCHEMA.*’, ‘!PERFORMANCE_SCHEMA.*’, ‘!METRICS_SCHEMA.*’, ‘!INSPECTION_SCHEMA.*’,’!test.*’]

batch-import-ratio = 0.75

no-schema = false

character-set = “auto”

data-character-set = “binary”

data-invalid-char-replace = “\uFFFD”

strict-format = false

[tidb]

# 目标集群的信息

host = “10.xx.xx.xx”

port = 4000

user = “lightning”

password = “xxxxxx”

# 表架构信息在从 TiDB 的“状态端口”获取。

status-port = 10080

# 集群 pd 的地址

pd-addr = “10.xxxx.xxx.xx:2379”

log-level = “error”

build-stats-concurrency = 20

distsql-scan-concurrency = 100

index-serial-scan-concurrency = 20

checksum-table-concurrency = 16

sql-mode = “ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION”

max-allowed-packet = 67_108_864

4、查看dumpling时对应的ts信息

5、创建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=“477517256” --config=changefeed_tidb.toml

6、查看任务状态是否正常,命令如下

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

set global tidb_gc_life_time=8h

2、执行br对源端tidb实例对应的数据库进行备份

br backup full --pd “10.xx.xx.xxx:2379” --storage “local:///tidb/br-data” --ratelimit 120 --log-file backuptable.log

3、还原备份数据,在目标端实例进行还原

./br restore full -s local:///data/br_data/ --pd 10.xx.xx.xx:2379 --ratelimit 40 --log-file restore-nfs0715nc.log

以上数据可以备份至NFS或者本地,如果需要恢复到另外一个tidb集群非NFS盘,需将全量数据拷贝至所有tikv节点。

4、查看br时对应的ts信息,存在br的backuptable.log日志里

[2022/06/27 17:36:30.704 +08:00] [INFO] [collector.go:68] [“Full backup success summary”] [total-ranges=78783] [ranges-succeed=78783] [ranges-failed=0] [backup-checksum=24m46.588281238s] [backup-fast-checksum=1.174067513s] [backup-total-ranges=14167] [total-take=3h23m39.613602886s] [total-kv=30047407854] [total-kv-size=3.373TB] [average-speed=276.1MB/s] [backup-data-size(after-compressed)=763GB][Size=763001558291] [BackupTS=434191825915346959]

5、 创建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=434191825915346959 --changefeed-id=“simple-replication-task” --sort-engine=“unified”

6、数据同步验证,在源端插入一条数据

三、数据恢复实践

1、本次使用场景:建立tidb集群异地机房容灾,选取ticdc作为id1的tidb集群和id2的tidb集群之间数据同步;数据量1T以上,选择br。

2、恢复的时候,报错 could not read local://…:download sst failed

在恢复的时候,每个节点都必须能够访问到所有的备份文件 (SST files)。默认情况下,假如使用 local storage,备份文件会分散在各个节点中,此时是无法直接恢复的,必须将每个 TiKV 节点的备份文件拷贝到其它所有 TiKV 节点才能恢复。

3、因为机器性能问题,导致tikv连接拒绝

恢复区间加上限速参数–ratelimit,防止因为机器硬件影响恢复任务

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论