写点什么

# ** 基于 TiDB Binlog 架构的主备集群切换操作手册 **

  • 2023-07-21
    北京
  • 本文字数:1950 字

    阅读完需:约 6 分钟

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


操作背景:最近手头有个系统,刚做完灾备建设及数据同步(文章链接在这 ),需要进行灾备切换演练,验证灾备库建设是否符合预期。需要做相关测试并准备操作手册,供日后切换演练及主备切换使用。


环境准备:需要分别部署一主一备两套 tidb 集群,并搭建 TiDB Binlog 用于主备集群间数据同步,可以参考前一篇文章:基于 TiDB Binlog 架构的主备集群部署及数据同步操作手册 ****


环境准备完成后,就可以开始主备切换操作了。

具体操作过程

1、停业务,待 drainer 追平主、备库数据

停止业务程序,确认业务不再有数据库写入操作。之后查询 Drainer status 接口,如果返回  ”Synced”: true 表示主从同步完成。


curl 'http://10.3.65.141:8249/status'{"PumpPos":{"10.3.65.141:8250":440717746593595393},"Synced":true,"LastTS":440717747379765249,"TsMap":""}
复制代码


2、使用 sync-diff-inspector 校验主从库数据是否一致

编辑配置文件:


[tidb@localhost tidb-community-toolkit-v6.5.1-linux-arm64]$ vim sync.toml######################### Global config #########################check-thread-count = 4export-fix-sql = truecheck-struct-only = false

######################### Datasource config #########################[data-sources][data-sources.tidb1] host = "10.3.65.141" port = 4000 user = "root" password = ""
[data-sources.tidb2] host = "10.3.65.142" port = 4000 user = "root" password = ""
######################### Task config #########################[task] output-dir = "./output" source-instances = ["tidb1"] target-instance = "tidb2" target-check-tables = ["test.t1","test.t2","test.t3"]
复制代码


运行 sync-diff,校验上下游数据是否一致:


[tidb@localhost tidb-community-toolkit-v6.5.1-linux-arm64]$ ./sync_diff_inspector --config=sync.toml
复制代码


3、关停主库到灾备库 drainer 同步链路后记录当前 drainer 同步 TSO

[tidb@localhost ~]$ tiup cluster stop tidb-1 -R drainer

MySQL [(none)]> select * from tidb_binlog.checkpoint;
复制代码



4、使用 dumpling/BR 对灾备库进行数据全量备份(备份期间可继续进行下一步操作)

./dumpling   -u root   -P 4000   -h 127.0.0.1 \--filetype sql \-t 8 \-o $dumpdir \ ./br backup full \    --pd "127.0.0.1:2379" \    --storage "local://$/brbackup" \    --ratelimit 128 \--log-file backupfull.log
复制代码

5、启动应用并将访问入口切换为灾备集群负载均衡设备

将业务连接的负载均衡后端地址设置为灾备集群 TiDB 地址

6、搭建灾备库 –> 主库的数据同步链路

6.1 编辑搭建从灾备机房到主机房的复制链路所需拓扑文件

[tidb@cips1 ~]$ vim scale-out-drainer_bak.yaml drainer_servers:  - host: 10.3.65.142    port: 28249    deploy_dir: /tidb-deploy/drainer-28249    data_dir: /tidb-data/drainer-28249    config:      initial-commit-ts: 440739573139243009(查询上游checkpoint表tso)      syncer.db-type: "tidb"      syncer.to.host: "10.3.65.141"      syncer.to.user: "drainer"      syncer.to.password: "XXX"      syncer.to.port: 4000

复制代码

6.2 扩容灾备库到主库的 drainer 同步链路

[tidb@cips1 ~]$ tiup cluster scale-out cips ./scale-out-drainer_bak.yaml --user tidb -p
复制代码


7、切换完成,进行简单验证

登录灾备库 grafana 页面,查看 QPS、connection count 等指标,是否符合预期,相关日志是否正常输出。

注意事项

整个切换过程并不是特别复杂,但需要注意以下几点:


1、查看 drainer 同步 TSO 时,不只是通过 tidb_binlog.checkpoint 表查看,还可以查看 drainer 日志中 write save point 对应的 TS:[“write save point”] [ts=440739573139243009]或登录数据库,执行show master status;,查看 Position 列对应的 TSO:



2、将灾备库数据全量备份,并不是必做选项,只是考虑到如果主库已经故障,业务切换到灾备库的情况下,将数据全量备份以防出现灾备库也故障等极端情况。实际操作过程中,可根据实际情况决定是否需要全量备份。


3、搭建灾备 –> 主的 drainer 同步链路时,需注意 initial-commit-ts 参数只可在新建的时候指定,如果该参数设置有误或需要调整,只能重新部署。

总结与思考:

灾备切换需要注意的有两点:


1) 确保切换前主备数据一致,业务切换到灾备库后,可正常运行。


2) 业务切换至灾备库后,增量数据可以在主库恢复后,正常同步至主库,不会有数据丢失。


后续业务回切至主库的操作步骤,与业务切换至备库操作过程一致,按步骤依次进行操作即可。


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

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

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

评论

发布
暂无评论
# **基于TiDB Binlog架构的主备集群切换操作手册**_实践案例_TiDB 社区干货传送门_InfoQ写作社区