数据库|基于TiDB Binlog架构的主备集群切换操作手册

2024-03-07 16:12

本文主要是介绍数据库|基于TiDB Binlog架构的主备集群切换操作手册,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、具体操作过程

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

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

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

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

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

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

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

//注意事项

二、总结与思考


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

环境准备:需要分别部署一主一备两套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 = 4
export-fix-sql = true
check-struct-only = false######################### Datasource config #########################
[data-sources]
[data-sources.tidb1]host = "10.3.65.141"port = 4000user = "root"password = ""[data-sources.tidb2]host = "10.3.65.142"port = 4000user = "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 drainerMySQL [(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.yamldrainer_servers:- host: 10.3.65.142port: 28249deploy_dir: /tidb-deploy/drainer-28249data_dir: /tidb-data/drainer-28249config: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)业务切换至灾备库后,增量数据可以在主库恢复后,正常同步至主库,不会有数据丢失。

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

作者:刘昊| 数据库开发工程师

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

公众号搜索神州数码云基地,后台回复数据库,加入数据库技术交流群。

这篇关于数据库|基于TiDB Binlog架构的主备集群切换操作手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/784082

相关文章

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的