【SOP 系列 45】TiCDC 跨 Region 数据复制 @TiDB Cloud

作者:王歌 苏丹

技术架构图

基本能力与限制

  • 由于跨 Region 进行数据实时同步,整体同步时延与真实的网络性能有直接关系

  • 数据增量复制建议 上下游集群的延迟在 500ms 以下,网络吞吐大于 1Gbps

  • 为了保证数据一致请在 开启数据同步侧写入数据,否则可能导致数据同步失败

方案实施

准备工作

确认集群写流量写流量吞吐

  • 通过 TiDB 监控 确认 具体写入的 QPS 主要包括 (Insert、Update、Delete)

  • 由于存在 数据批量修改情况,还需要关注 Transcation 面板

确定全量数据同步所需资源

  • EC2 机器,用于 dumpling 导出

    • 建议机器配置 8c,16g

    • 将该机器的网络和 tidb cloud 打通(保证可以访问tidb url即可)

    • 部署 dumpling v7.1.1 版本 使用 Dumpling 导出数据

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
tiup install dumpling:v7.1.1
  • S3 位于新加坡

确定 数据同步所需资源

  • TiCDC 流量评估

    • 4RCU
td {white-space:nowrap;border:1px solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
Specification Maximum replication performance
2 RCUs 5,000 rows/s
4 RCUs 10,000 rows/s
8 RCUs 20,000 rows/s
16 RCUs 40,000 rows/s
24 RCUs 60,000 rows/s
32 RCUs 80,000 rows/s
40 RCUs 100,000 rows/s

编写增量数据复制规则

  • 数据增量同步,可直接使用 Cloud TiCDC 默认配置进行数据同步

调整 GC Lift time 到 48H

# 设置 gc 时间
set global tidb_gc_life_time = 2880m0s;

# 查看 gc 时间
show variables like 'tidb_gc_life_time';

将当前账号和权限记录

建议手动将JP的用户迁移到SG

## 拼接出需要获取的权限
SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS query FROM mysql.user;

## 查看当前user
select Host,User,authentication_string from mysql.user;

查看当前 sql binding

SHOW [GLOBAL|SESSION] BINDINGS

SHOW GLOBAL BINDINGS;

在 SG 集群创建 binding:CREATE [GLOBAL|SESSION] BINDING

示例:

CREATE SESSION BINDING FOR
    SELECT * FROM t1 WHERE b = 123
   USING
    SELECT * FROM t1 IGNORE INDEX (b) WHERE b = 123;

JP 和 SG 网络打通(pingcap操作)

  1. Vpc peering

  2. 开放白名单

全量数据迁移

全量数据备份

参考使用 Dumpling 导出数据

  • 为保证数据备份对在线业务最小影响,需要对数据进行分批导出

  • 每 Dumpling 建议设置 16 线程进行数据导出

  • 预计 90min 可以导出 1.5T 数据

  • 参与复制的表都存在主键或唯一索引

  • -T 指定需要同步的表db.table, 如有多个,用","分隔

tiup dumpling -u root -p xxx -h {tidb-url} -P 4000 -t 16 -r 200000 -F 256MiB -T db.table --filetype csv -o "s3://${Bucket}/${Folder}"

备份成功日志输出

 [INFO] [collector.go:239] ["backup success summary"] [total-ranges=] [ranges-succeed=] [ranges-failed=0] [total-take=s] [total-kv-size=TB] [average-speed=MB/s] [total-rows=]

全量数据拷贝

将数据直接备份到 SG 的 S3 上,可省去这一步骤

将 S3 的数据从JP移动到 SG,可使用 aws s3 cp/sync s3://bucket/source s3://bucket/dest

参考文档:

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/cp.html

https://repost.aws/zh-Hans/knowledge-center/move-objects-s3-bucket

全量数据还原

参考:https://docs.pingcap.com/tidbcloud/import-csv-files,AWS S3 导入 TiDB Cloud 集群操作手册

在 tidb cloud console 将操作,将文件导入 SG 集群

增量数据迁移(示例仅供参考)

  1. 创建CDC

  2. 创建 CDC

  1. 选择 MySQL,并填入上面保存的新集群连接信息

  1. 填入全量迁移 dumpling 的 TSO:441852152250368000

  1. 选择 CDC 的 RCUs,建议先选择 4RCUS 就可以。(后续可以修改)

  1. 确认信息后提交

等待 CDC 创建成功

  1. 确认 CDC 同步状态

检查 Checkpoint TS 在推进,并且为当前时间

SG集群配置确认

恢复 GC Lift time

默认为 10min,建议设置为 30min,或根据实际情况进行调整

# 设置 gc 时间
set global tidb_gc_life_time = 30m0s;

# 查看 gc 时间
show variables like 'tidb_gc_life_time';

确认 sql binding情况

SHOW GLOBAL BINDINGS;

cdc on cloud 案例 , 牛 :+1:

乍看题目,我理解成了 tikv 的 region