1
1
0
1
专栏/.../

体验TiDB v6.0.0 之TiCDC

 边城元元  发表于  2022-05-05

体验TiDB v6.0.0 之TiCDC

一、背景

TiDBv6.0.0发布具有特殊的意义,顺便体验一把TiCDC。

接上篇从Mysql3306 通过DM迁移数据到TiDB集群中test_dm_all数据库(全量+增量数据同步),本次体验是从TiDB集群的test_dm_all数据库通过TiCDC 同步到Mysql主从集群。

二、基本知识

TiCDC 是一款 TiDB 增量数据同步工具,通过拉取上游 TiKV 的数据变更日志,TiCDC 可以将数据解析为有序的行级变更数据输出到下游。

2.1 TiCDC 适用场景:

  • 数据库灾备:TiCDC 可以用于同构数据库之间的灾备场景,能够在灾难发生时保证主备集群数据的最终一致性,目前该场景仅支持 TiDB 作为主备集群。
  • 数据集成:TiCDC 提供 TiCDC Canal-JSON Protocol,支持其他系统订阅数据变更,能够为监控、缓存、全文索引、数据分析、异构数据库的主从复制等场景提供数据源。

2.2 组件

  • TiKV CDC 组件:只输出 key-value (KV) change log。

    • 内部逻辑拼装 KV change log。
    • 提供输出 KV change log 的接口,发送数据包括实时 change log 和增量扫的 change log。
  • TiCDC 集群 多个 capture 组成一个 TiCDC 集群,负责 KV change log 的同步。

    • 每个 capture 负责拉取一部分 KV change log。
    • 对拉取的一个或多个 KV change log 进行排序。
    • 向下游还原事务或按照 TiCDC Open Protocol 进行输出。

TiCDC architecture

三、环境准备

image.png

本示例演示TiDB-(TiCDC)->Mysql集群

3.1 TiDB中的 test_dm_all数据

image.png

3.2 Mysql 3307(主库),Mysql 3308(从库)

1、win下 配置好主库(mysql3307) my3307.ini 2、复制mysql3307目录 为mysql3308 3、修改mysql3308的my3308.ini

3.2.1 Mysql配置文件

my3307.ini

#binlog
log-bin=mysql-bin
binlog-format=ROW
server_id=2
​
binlog_ignore_db=mysql
binlog_do_db=test_dm_all
​

mysql3308.ini

server_id=3
read_only=1
replicate-do-db=test_dm_all

四、TiCDC实验

4.1 扩容TiCDC节点

4.1.1 编写 scale-out.yaml 文件

cdc_servers:
  - host: 10.0.2.15
    port: 8300
    gc-ttl: 86400
    #data_dir: /data/deploy/install/data/cdc-8300
​

4.1.2 执行扩容命令

​
# 此处使用local_install.sh没有安装
# 采用的方式是下载使用tiup  
# curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
# 在线安装 ticdc
tiup cluster scale-out cluster111 scale-out.yaml
​
​
#离线安装 参考 这种方式通过tiup cluster display 看不到cdc集群的信息
cp /usr/local0/webserver/tidb/tidb-community-server-v6.0.0-linux-amd64/cdc /root/.tiup/bin/
​
cdc server --pd=http://10.0.2.15:2379 --log-file=/tidb-data111/ticdc_8301.log --addr=0.0.0.0:8301 --advertise-addr=127.0.0.1:8301 --data-dir=/tidb-data111/cdc-8301 &
cdc server --pd=http://10.0.2.15:2379 --log-file=/tidb-data111/ticdc_8302.log --addr=10.0.2.15:8302 --advertise-addr=10.0.2.15:8302 --data-dir=/tidb-data111/cdc-8302 &

image.png

4.1.3 验证TiCDC集群

  cdc cli capture list --pd=http://10.0.2.15:2379 
  # 因为有8301,8302 两个节点使用的是cdc server方式启动的。

image.png

4.2 添加任务

4.2.1 启动mysql3307,mysq3308

mysql3307 执行下面的sql:

show master status;

mysql3308执行下面sql:

show slave status;
stop slave;
CHANGE MASTER TO master_host = '127.0.0.1',
     master_user = 'root',
     master_password = '23456',
     master_log_file = 'mysql-bin.000001',
     master_port=3307,
     master_log_pos = 154;
start slave;

mysql3307到msql3308的主从同步测试正常。

4.2.2 创建TiCDC任务

cdc cli changefeed create --pd=http://10.0.2.15:2379 --sink-uri="mysql://root:mysql123456@192.168.43.191:3307/?" --changefeed-id="replication-task-1" --sort-engine="unified"
​
# Error: [CDC:ErrMySQLConnectionError]fail to open MySQL connection: Error 1298: Unknown or incorrect time zone: 'UTC'
# 这是因为下游 MySQL 没有加载时区,可以通过 mysql_tzinfo_to_sql 命令加载时区,加载后就可以正常创建任务或同步任务。

image.png

# 查看任务
 cdc cli changefeed list --pd=http://10.0.2.15:2379 
 cdc cli changefeed query --pd=http://10.0.2.15:2379 --changefeed-id=replication-task-1

4.2.3 验证TiDB数据变更是否同步到下游

image.png

image.png

image.png

4.2.4 追加已经数据表

image.png

图上的1、是在ticdc任务开始后,新插入了数据到m_user表中,之后再mysql3307中追加m_user表结构,自动从任务开始后补数据;

图上的2和3,表示原始上游有数据,任务开始后没有做数据变更,在mysql3307中追加m_user_new也不会补数据。

4.2.5 使用总结

1、下游要建立对等的数据结构

2、TICDC任务开启后 上游的表在下游不存在,则不同步

3、如果下游追加了表结构则从任务开始时补数据

4、任务开启后的写操作会同步到下游

5、如果下游存在多写入点,会出现数据不一致的情况

五、Clinic 诊断 TiCDC

clinic 没有单独的类似collectdm的组件,

tiup diag collect cluster111
tiup diag pacakge  /usr/local0/webserver/tidb/tidb-community-server-v6.0.0-linux-amd64/diag-fSC9vxdLWMk
tiup diag upload  /usr/local0/webserver/tidb/tidb-community-server-v6.0.0-linux-amd64/diag-fSC9vxdLWMk.diag

image.png

注意:使用cdc server方式启动的节点的信息收集不到。

六、总结

本篇文章简单示例了TiDB通过TiCDC同步数据到下游。TiCDC的强大之处TiCDC 开放数据协议,根据TiCDC 开放数据协议可以同步到下游多种数据媒介。

TiCDC集群会象DM一样也会有对应的WebUI可视化界面,很期待TiCDC的WebUI。

谢谢PingCap,感谢TiDB社区!

1
1
0
1

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论