分享知识,分享快乐

0%

TIDB搭建双集群主从复制

TIDB搭建双集群主从复制

官网参考文档

https://docs.pingcap.com/zh/tidb/v6.5/replicate-between-primary-and-secondary-clusters#搭建双集群主从复制

TiCDC 安装部署与集群运维

https://docs.pingcap.com/zh/tidb/v6.5/deploy-ticdc

  1. 备份数据。

    在上游集群中执行 BACKUP 语句备份数据:

    1
    MySQL [(none)]> BACKUP DATABASE * TO '`s3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://${HOST_IP}:6060&force-path-style=true`' RATE_LIMIT = 120 MB/SECOND;
    1
    2
    3
    4
    5
    6
    +----------------------+----------+--------------------+---------------------+---------------------+
    | Destination | Size | BackupTS | Queue Time | Execution Time |
    +----------------------+----------+--------------------+---------------------+---------------------+
    | local:///tmp/backup/ | 10315858 | 431434047157698561 | 2022-02-25 19:57:59 | 2022-02-25 19:57:59 |
    +----------------------+----------+--------------------+---------------------+---------------------+
    1 row in set (2.11 sec)

    备份语句提交成功后,TiDB 会返回关于备份数据的元信息,这里需要重点关注 BackupTS,它意味着该时间点之前数据会被备份,后边的教程中,将使用 BackupTS 作为数据校验截止时间TiCDC 增量扫描的开始时间

  2. 恢复数据。

    在下游集群中执行 RESTORE 语句恢复数据:

    1
    mysql> RESTORE DATABASE * FROM '`s3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://${HOST_IP}:6060&force-path-style=true`';
    1
    2
    3
    4
    5
    6
    +----------------------+----------+--------------------+---------------------+---------------------+
    | Destination | Size | BackupTS | Queue Time | Execution Time |
    +----------------------+----------+--------------------+---------------------+---------------------+
    | local:///tmp/backup/ | 10315858 | 431434141450371074 | 2022-02-25 20:03:59 | 2022-02-25 20:03:59 |
    +----------------------+----------+--------------------+---------------------+---------------------+
    1 row in set (41.85 sec)
  3. 创建一个 TiCDC 同步任务,实时同步主集群数据到从集群

1
tiup cdc cli changefeed create --server=http://172.20.192.108:8300 --sink-uri="mysql://root:Admi*@172.20.192.101:4000" --changefeed-id="upstream-to-downstream" --start-ts="445309452101091541"

以上命令中:

  • --server:TiCDC 集群任意一节点的地址
  • --sink-uri:同步任务下游的地址
  • --start-ts:TiCDC 同步的起点,需要设置为实际的备份时间点(也就是第 2 步:迁移全量数据提到的 BackupTS)

使用 TiCDC 命令行工具来查看集群状态

tiup ctl:v6.5.0 cdc capture list --server=http://172.20.192.107:8300

查询同步任务列表 (管理 Changefeed)

使用以下命令来查询同步任务列表:

1
2
3
4
5
6
7
8
9
10
11
12
curl -X GET http://172.20.192.107:8300/api/v1/changefeeds
[
{
"upstream_id": 7247017946125403024,
"namespace": "default",
"id": "upstream-to-downstream",
"state": "normal",
"checkpoint_tso": 448645177183305734,
"checkpoint_time": "2024-03-26 17:32:10.637",
"error": null
}
]
  • checkpoint 即为 TiCDC 已经将该时间点前的数据同步到了下游。
  • state 为该同步任务的状态:
    • normal:正常同步
    • stopped:停止同步(手动暂停)
    • error:停止同步(出错)
    • removed:已删除任务(只在指定 --all 选项时才会显示该状态的任务。未指定时,可通过 query 查询该状态的任务)
    • finished:任务已经同步到指定 target-ts,处于已完成状态(只在指定 --all 选项时才会显示该状态的任务。未指定时,可通过 query 查询该状态的任务)。

暂停同步任务等参考官网

https://docs.pingcap.com/zh/tidb/stable/ticdc-open-api-v2

暂停

1
curl -X POST http://172.20.192.107:8300/api/v2/changefeeds/upstream-to-downstream/pause

恢复

1
curl -X POST http://172.20.192.107:8300/api/v2/changefeeds/upstream-to-downstream/resume -d '{}'

删除

1
curl -X DELETE http://172.20.192.107:8300/api/v2/changefeeds/prod-to-k8s
1
tiup cdc cli changefeed create --server=http://172.20.192.108:8300 --sink-uri="mysql://root:Ad*@172.20.192.233:32570" --changefeed-id="prod-to-k8s" --start-ts="449753049437044846"  --disable-gc-check