【TiDB 4.0 PCTA 学习笔记】-3.5 How to use TiCDC (增量同步工具 TiCDC)@2班+邱育珍

课程名称:3.5 How to use TiCDC (增量同步工具 TiCDC)

学习时长:30min

课程收获:

使用 TiCDC 将写入到 TiDB 中的数据实时同步其他数据系统,包括部署 TiCDC、创建同步任务以及 TiCDC 基础的运维。实时同步 TiDB 数据到 MySQL 或 Kafka。

课程内容:

1.TiCDC简介

  • TiCDC
    TiCDC 是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,具有将数据还原到与上游任意 TSO 一致状态的能力,同时提供开放数据协议 (TiCDC Open Protocol),支持其他系统订阅数据变更。
  • TiCDC架构
    TiCDC 运行时是一种无状态节点,通过 PD 内部的 etcd 实现高可用。TiCDC 集群支持创建多个同步任务,向多个不同的下游进行数据同步。
    TiCDC 的系统架构如下图所示:

  • TiCDC支持的特性
    image

2.部署TiCDC

3.创建TiCDC同步任务

使用以下命令来创建同步任务:
cdc cli changefeed create --pd=http://10.0.10.25:2379 --sink-uri=“mysql://root:123456@127.0.0.1:3306/” --changefeed-id=“simple-replication-task”


URI 中可配置的的参数如下:

参数 解析
root 下游数据库的用户名
123456 下游数据库密码
127.0.0.1 下游数据库的 IP
3306 下游数据的连接端口
worker-count 向下游执行 SQL 的并发度(可选,默认值为 16
max-txn-row 向下游执行 SQL 的 batch 大小(可选,默认值为 256
ssl-ca 连接下游 MySQL 实例所需的 CA 证书文件路径(可选)
ssl-cert 连接下游 MySQL 实例所需的证书文件路径(可选)
ssl-key 连接下游 MySQL 实例所需的证书密钥文件路径(可选)
time-zone 连接下游 MySQL 实例时使用的时区名称,从 v4.0.8 开始生效。(可选。如果不指定该参数,使用 TiCDC 服务进程的时区;如果指定该参数但使用空值,则表示连接 MySQL 时不指定时区,使用下游默认时区)

4.环形同步

环形同步功能支持在多个独立的 TiDB 集群间同步数据。比如有三个 TiDB 集群 A、B 和 C,它们都有一个数据表 test.user_data ,并且各自对它有数据写入。环形同步功能可以将 A、B 和 C 对 test.user_data 的写入同步其它集群上,使三个集群上的 test.user_data 达到最终一致。



环形同步任务创建步骤如下:
1). 在 TiDB 集群 A,B 和 C 上启动 TiCDC 组件。Copied!

# 在 TiDB 集群 A 上启动 TiCDC 组件。
cdc server \
    --pd="http://${PD_A_HOST}:${PD_A_PORT}" \
    --log-file=ticdc_1.log \
    --addr=0.0.0.0:8301 \
    --advertise-addr=127.0.0.1:8301

# 在 TiDB 集群 B 上启动 TiCDC 组件。
cdc server \
    --pd="http://${PD_B_HOST}:${PD_B_PORT}" \
    --log-file=ticdc_2.log \
    --addr=0.0.0.0:8301 \
    --advertise-addr=127.0.0.1:8301

# 在 TiDB 集群 C 上启动 TiCDC 组件。
cdc server \
    --pd="http://${PD_C_HOST}:${PD_C_PORT}" \
    --log-file=ticdc_3.log \
    --addr=0.0.0.0:8301 \
    --advertise-addr=127.0.0.1:8301

2). 在 TiDB 集群 A,B 和 C 上创建环形同步需要使用的标记数据表 ( mark table )。

# 在 TiDB 集群 A 上创建标记数据表。
cdc cli changefeed cyclic create-marktables \
    --cyclic-upstream-dsn="root@tcp(${TIDB_A_HOST}:${TIDB_A_PORT})/" \
    --pd="http://${PD_A_HOST}:${PD_A_PORT}"

# 在 TiDB 集群 B 上创建标记数据表。
cdc cli changefeed cyclic create-marktables \
    --cyclic-upstream-dsn="root@tcp(${TIDB_B_HOST}:${TIDB_B_PORT})/" \
    --pd="http://${PD_B_HOST}:${PD_B_PORT}"

# 在 TiDB 集群 C 上创建标记数据表。
cdc cli changefeed cyclic create-marktables \
    --cyclic-upstream-dsn="root@tcp(${TIDB_C_HOST}:${TIDB_C_PORT})/" \
    --pd="http://${PD_C_HOST}:${PD_C_PORT}"

3). 在 TiDB 集群 A,B 和 C 上创建环形同步任务。

# 在 TiDB 集群 A 上创建环形同步任务。
cdc cli changefeed create \
    --sink-uri="mysql://root@${TiDB_B_HOST}/" \
    --pd="http://${PD_A_HOST}:${PD_A_PORT}" \
    --cyclic-replica-id 1 \
    --cyclic-filter-replica-ids 2 \
    --cyclic-sync-ddl true

# 在 TiDB 集群 B 上创建环形同步任务。
cdc cli changefeed create \
    --sink-uri="mysql://root@${TiDB_C_HOST}/" \
    --pd="http://${PD_B_HOST}:${PD_B_PORT}" \
    --cyclic-replica-id 2 \
    --cyclic-filter-replica-ids 3 \
    --cyclic-sync-ddl true

# 在 TiDB 集群 C 上创建环形同步任务。
cdc cli changefeed create \
    --sink-uri="mysql://root@${TiDB_A_HOST}/" \
    --pd="http://${PD_C_HOST}:${PD_C_PORT}" \
    --cyclic-replica-id 3 \
    --cyclic-filter-replica-ids 1 \
    --cyclic-sync-ddl false



学习过程中遇到的问题或延伸思考:

  • 问题 1:
  • 问题 2:
  • 延伸思考 1:
  • 延伸思考 2:

学习过程中参考的其他资料