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

news/2024/11/26 4:35:58/

作者: 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":""}

image.png

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

image.png

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

[tidb@localhost ~]$ tiup cluster stop tidb-1 -R drainerMySQL [(none)]> select * from tidb_binlog.checkpoint;

image.png

image.png

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

image.png

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:

image.png

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

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

总结与思考:

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

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

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

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


http://www.ppmy.cn/news/974785.html

相关文章

ES6 Day04

1.Generator 是ES6提供的一种异步编程解决方案,语法不同于普通函数;简单的把Generator 理解为一个状态机,封装了多个内部状态。执行Generator 函数会返回一个迭代器对象,可以通过调用迭代器next依次遍历Generator函数内部的每一个…

项目名称:驱动开发(控LED灯,控制蜂鸣器)

一,简述 (1)Linux系统组成 ()app: [0-3G] ---------------------------------系统调用(软中断)--------------------- kernel: 【3-4G】…

C++ GDAL找出多时相遥感影像缺失的日期并自动生成新的全零图像作为替补

本文介绍基于C 语言的GDAL库,基于一个存储大量遥感影像的文件夹,依据每一景遥感影像的文件名中表示日期的那个字段,找出这些遥感影像中缺失的成像日期,并新生成多个像元值全部为0的栅格文件,作为这些缺失日期当日的遥感…

59. 螺旋矩阵 II

题目链接:力扣 解题思路:类似于54. 螺旋矩阵 找规律,模拟矩阵的访问,每访问一个位置,就对该位置进行赋值, 观察螺旋顺序:行(向右)--> 列(向下)-->行(向左)-->列(向上)-->行(向右…

12.面板问题

面板问题 html部分 <h1>Lorem ipsum dolor sit, amet consectetur adipisicing.</h1><div class"container"><div class"faq"><div class"title-box"><h3 class"title">Lorem, ipsum dolor.<…

linux:secureCRT通过pem证书远程访问服务器

参考&#xff1a; secureCRT通过pem证书远程访问服务器_Fengshana的博客-CSDN博客 总结&#xff1a; 配置公钥即可

“深入解析Spring Boot:从入门到精通“

标题&#xff1a;深入解析Spring Boot&#xff1a;从入门到精通 摘要&#xff1a;本文将全面介绍Spring Boot框架的基本概念、核心特性、使用方法以及提供示例代码&#xff0c;帮助读者从入门到精通Spring Boot开发。 引言 Spring Boot是一个用于快速构建基于Spring框架的应用…

Android:Service服务简单应用

public class MyService extends Service { public MyService() { System.out.println("MyServiceMyService()"); } Override public void onCreate() { super.onCreate(); System.out.println("MyService创建onCreate()&quo…