场景

tidb v3.0.7 —> tidb v4.0.4 之间集群同步
将 tidb v3.0.7 的数据同步到 tidb v4.0.4

架构示意
image.png

部署

第 1 步:部署 Pump

  1. 修改 tidb-ansible/inventory.ini 文件

a. 设置 enable_binlog = True ,打开集群 binlog

  1. ## binlog trigger
  2. enable_binlog = True

b. 为 pump_servers 主机组添加部署机器 IP

## Binlog Part
[pump_servers]
pump1 ansible_host=192.168.251.184 deploy_dir=/data1/pump
pump2 ansible_host=192.168.251.93 deploy_dir=/data2/pump
pump3 ansible_host=192.168.251.79 deploy_dir=/data3/pump

确保部署目录有足够空间存储 binlog.

  1. 在 tidb 集群上添加 Pump 组件
    1. 部署 pump_servers 和 node_exporters
      ansible-playbook deploy.yml --tags=pump -l ${pump1_ip},${pump2_ip},[${alias1_name},${alias2_name}]
      

      注意:逗号后不要加空格

b. 启动 pump_servers

ansible-playbook start.yml --tags=pump
  c. 更新并重启 tidb_servers
ansible-playbook rolling_update.yml --tags=tidb

d. 更新监控信息

ansible-playbook rolling_update_monitor.yml --tags=prometheus
  1. 检查 Pump 服务状态

使用 binlogctl 查看 Pump 服务状态,pd-urls 参数请替换为集群 PD 地址,结果 State 为 online 表示 Pump 启动成功。

cd /home/tidb/tidb-ansible &&
resources/bin/binlogctl -pd-urls=http://192.168.251.184:2379 -cmd pumps

image.png

第 2 步:部署 Drainer**

  1. 获取 initial_commit_ts 的值

Drainer 初次启动时需要获取 initial_commit_ts 这个时间戳信息。

为了保证数据的完整性,需要进行全量数据的备份与恢复。此时 initial_commit_ts 的值必须是全量备份的时间戳。

mydumper 备份可以在导出目录中找到 metadata 文件,其中的 pos 字段值即全量备份的时间戳。
image.png

  1. 修改 tidb-ansible/inventory.ini 文件

为 drainer_servers 主机组添加部署机器 IP , initial_commit_ts 设置为获取的 initial_commit_ts,仅用于 Drainer 第一次启动。

  1. 修改配置文件
    cd /home/tidb/tidb-ansible/conf &&
    cp drainer.toml drainer_mysql_drainer.toml &&
    vi drainer_mysql_drainer.toml
    
    ```shell [syncer]

    downstream storage, equal to —dest-db-type

    Valid values are “mysql”, “file”, “tidb”, “kafka”.

    db-type = “tidb”

the downstream MySQL protocol database

[syncer.to] host = “192.168.20.200” user = “root” password = “” port = 4000

部署 Drainer
```shell
ansible-playbook deploy_drainer.yml

启动 Drainer

ansible-playbook start_drainer.yml

验证同步

当前架构:
image.png
我们在 192.168.251.184 上创建测试数据
image.png
在192.168.20.200 上查看
image.png