写点什么

基于 TiDB Binlog 架构的主备集群部署及数据同步操作手册

  • 2023-03-31
    北京
  • 本文字数:3641 字

    阅读完需:约 12 分钟

作者: Liuhaoao 原文来源:https://tidb.net/blog/38b6163c


最近手头有个系统,有需要搭建灾备库的需求(rto 要求 4 小时内,根据实际情况计算)。考虑到生产系统是 5 版本,TiCDC 存在一些兼容性问题,且 TiDB Binlog 已经有实践案例及经验可供参考,故选择使用 TiDB Binlog 来实现主集群 –> 灾备集群的增量数据同步。数据全量初始化采用 Dumpling + TiDB Lightning 工具。具体实施过程如下:

1. 灾备集群部署

灾备集群搭建方案,采用与主集群 1:1 的方式进行部署,直接用现生产环境集群拓扑文件进行部署,部署完成后建用户并赋权,具体过程不再赘述。

2. 主集群扩容 pump

编辑生产集群扩容 pump 所需拓扑文件,内容如下


pump_servers:  - host: 10.3.31.1    ssh_port: 22    port: 8250    deploy_dir: /app/tidb/tidb-deploy/pump-8250    og_dir: /app/tidb/tidb-deploy/pump-8250/log    data_dir: /app/tidb/tidb-data/pump-8250  - host: 10.3.31.2    ssh_port: 22    port: 8250    deploy_dir: /app/tidb/tidb-deploy/pump-8250    log_dir: /app/tidb/tidb-deploy/pump-8250/log    data_dir: /app/tidb/tidb-data/pump-8250          - host: 10.3.31.3    ssh_port: 22    port: 8250    deploy_dir: /app/tidb/tidb-deploy/pump-8250    log_dir: /app/tidb/tidb-deploy/pump-8250/logdata_dir: /app/tidb/tidb-data/pump-8250
复制代码


编辑完成后,执行扩容命令


[tidb@tidb-test1 ~]$ tiup cluster scale-out tidb-test ./scale-out-pump.yaml -u tidb -p
复制代码


扩容完成后,最终会输出如下内容


3. 开启主集群 binlog 功能

执行 edit-config 命令,修改集群配置:


[tidb@tidb-test1 ~]$ tiup cluster edit-config tidb-test
复制代码


在 server_configs 下 tidb 部分,添加如下配置


binlog.enable: truebinlog.ignore-error: true
复制代码



编辑完成后,reload tidb 节点使配置生效


[tidb@tidb-test1 ~]$ tiup cluster reload tidb-test -R tidb
复制代码


reload 完成后,会输出如下内容


4. 主集群调整 GC 时间

登录数据库,执行如下 sql:


set  global tidb_gc_life_time = '360m';
复制代码


sql 返回执行成功后,再次执行select @@tidb_gc_life_time;,查询结果输出为 6h 或 360m,即为调整成功。

5. 使用 dumpling 工具并将生产数据全量导出

[tidb@tidb-test1 ~]$ sudo mkdir $/dumpdir  ($/dumpdir为导出数据存放目录,需确保空间充足)[tidb@tidb-test1 ~]$ sudo  chmod 777 $/dumpdir -R[tidb@tidb-test1 ~]$ ./dumpling  -u root -P 4000 -h 10.3.31.1 --filetype sql -t 8 -o $/dumpdir -r 200000              -F256MiB
复制代码


导出完成后,日志最终会输出[“dump data successfully, dumpling will exit now”]字样,如下图所示:


6. 将导出数据目录上传至灾备服务器,进行全量导入

6.1 使用 lightning 工具将数据全量导入

以下为运行 lightning 所需配置文件,因导入数据量大,建议开启断点


[lightning]level = "info"file = "tidb-lightning.log"index-concurrency = 2 table-concurrency = 6io-concurrency =20
[tikv-importer]backend = "local"sorted-kv-dir = "/home/tidb/sorted"
[mydumper]data-source-dir = "$/dumpdir"no-schema = falsefilter = ['*.*']
[tidb]host = "10.3.31.101"port = 4000user = "root"password = ""status-port = 10080pd-addr = "10.3.31.101:2379"
[checkpoint]enable = trueschema = "lightning-task-sql-checkpoint"driver = "file"
[post-restore]checksum = trueanalyze = false
复制代码

6.2 开始导入

[tidb@tidb-test1 ~]$ nohup ./tidb-lightning --config lightning-full.toml &
复制代码


导入完成后,日志会输出[“tidb lightning exit”],如图:


7. 灾备集群扩容 pump

编辑扩容 pump 所需配置文件


pump_servers:  - host: 10.3.31.101    ssh_port: 22    port: 8250    deploy_dir: /app/tidb/tidb-deploy/pump-8250    og_dir: /app/tidb/tidb-deploy/pump-8250/log    data_dir: /app/tidb/tidb-data/pump-8250  - host: 10.3.31.102    ssh_port: 22    port: 8250    deploy_dir: /app/tidb/tidb-deploy/pump-8250    log_dir: /app/tidb/tidb-deploy/pump-8250/log    data_dir: /app/tidb/tidb-data/pump-8250          - host: 10.3.31.103    ssh_port: 22    port: 8250    deploy_dir: /app/tidb/tidb-deploy/pump-8250    log_dir: /app/tidb/tidb-deploy/pump-8250/logdata_dir: /app/tidb/tidb-data/pump-8250
复制代码


上传完成后,执行如下命令扩容


[tidb@tidb-test1 ~]$ tiup cluster scale-out tidb-test ./scale-out-pump.yaml -u tidb
复制代码


扩容完成后,最终会输出如下内容


8. 灾备集群开启 binlog 功能

执行 edit-config 命令,修改集群配置文件


[tidb@tidb-test1 ~]$ tiup cluster edit-config tidb-test
复制代码


在 server_config 下 tidb 部分,添加如下配置


binlog.enable: truebinlog.ignore-error: true
复制代码



修改完成后,reload tidb 节点使配置生效


[tidb@tidb-test1 ~]$ tiup cluster reload tidb-test -R tidb
复制代码


reload 完成后,会输出如下内容


9. 生产集群与灾备集群新建 drainer 用户并授权

分别登录生产和灾备数据库,执行如下 sql,创建 drainer 用户并授权


create user 'drainer'@'%' IDENTIFIED by 'Passwd@123';grant select on . to 'drainer'@'%' with grant OPTION;grant insert on . to 'drainer'@'%' with grant OPTION;grant update on . to 'drainer'@'%' with grant OPTION;grant delete on . to 'drainer'@'%' with grant OPTION;grant create on . to 'drainer'@'%' with grant OPTION;grant drop on . to 'drainer'@'%' with grant OPTION;grant alter on . to 'drainer'@'%' with grant OPTION;grant execute on . to 'drainer'@'%' with grant OPTION;grant index on . to 'drainer'@'%' with grant OPTION;grant create view on . to 'drainer'@'%' with grant OPTION;Flush privileges;
复制代码


以上 sql 均返回成功后,执行show grants for 'drainer'@'%';确认 drainer 用户权限包含 Insert、Update、Delete、Create、Drop、Alter、Execute、Index、Select、Create View 权限。

10. 灾备集群扩容 drainer(本地记录 binlog,实现增量备份)

编辑扩容 binlog 所需配置文件


drainer_servers:  - host: 10.3.31.104    port: 18249    deploy_dir: /tidb-deploy/drainer-18249    data_dir: /tidb-data/drainer-18249    config:      syncer.db-type: "file"      syncer.to.host: "10.3.31.104"      syncer.to.dir: &binlog_dir(需手动创建,新建目录需将属主与属组改为tidb用)
复制代码


编辑完成后,执行如下命令扩容


[tidb@tidb-test1 ~]$ tiup cluster scale-out tidb-test  ./scale-out-drainer.yaml --user tidb -p 
复制代码


扩容完成后,最终会输出如下内容


11. 主集群扩容 drainer

编辑扩容 drainer 所需配置文件


drainer_servers:  - host: 10.3.31.104    port: 8249    deploy_dir: /tidb-deploy/drainer-8249    data_dir: /tidb-data/drainer-8249    config:      initial-commit-ts: (dumpling导出metadata中的Pso)      syncer.db-type: "tidb"      syncer.to.host: "10.3.31.101"      syncer.to.user: "drainer"      syncer.to.password: "XXX"(密码为第9步新建的drainer用户密码)      syncer.to.port: 24000
复制代码


dumpling 导出 metadata 中 Pso 查看方式:


导出数据目录中 $/dumpdir ,会有一个 metadata 的文件,执行 cat 命令即可查看该文件中 Pso,如图所示:



编辑完成后,执行如下命令扩容


[tidb@tidb-test1 ~]$ tiup cluster scale-out tidb-test  ./scale-out-drainer.yaml --user tidb -p
复制代码


扩容完成后,最终会输出如下内容:


12. 检验同步链路是否搭建成功

分别访问集群监控(10.3.31.1:3000、10.3.31.101:3000),查询 grafana 监控面板中 tidb-test-binlog–>drainer 界面,如图:



checkpoint 正常推进,代表 drainer 同步链路正常工作。


在生产库新建 test 表或在原有 test 表中插入数据,在灾备库进行查询,如生产库执行的 DDL 或 DML 在灾备库能够查询到,证明生产库增量数据可通过同步链路同步至灾备库,生产 –> 灾备数据同步链路搭建成功。

13.GC 时间调整回原配置

登录数据库,执行如下 sql:


set  global tidb_gc_life_time = '10m';
复制代码


sql 返回执行成功后,再次执行select @@tidb_gc_life_time;,查询结果输出为 1h 或 10m,即为调整成功。


至此 TiDB Binlog 搭建的集群数据同步链路搭建完成,数据同步成功。、


部署过程中,需要注意的是 drainer 的 initial-commit-ts 参数,只能在部署的时候配置,无法在已有 drainer 节点上进行配置。后续运维过程中,需额外关注 Skip Binlog Count 监控指标,防止出现 TiDB 写入 Binlog 失败的情况,如出现 TiDB 写入 Binlog 失败,需及时进行处理。


给位路过大佬如果有相关方案及操作步骤改进建议,欢迎讨论


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
基于TiDB Binlog架构的主备集群部署及数据同步操作手册_管理与运维_TiDB 社区干货传送门_InfoQ写作社区