数据库|TiDB灾备切换实践-部署

news2024/12/23 4:25:43

刘昊 | 数据库工程师

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

具体实施过程如下:

一、灾备集群部署

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

二、主集群扩容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/log
data_dir: /app/tidb/tidb-data/pump-8250

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

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

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

三、开启主集群Binlog功能

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

[tidb@tidb-test1 ~]$ tiup cluster edit-config tidb-test

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

binlog.enable: true
binlog.ignore-error: true

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

[tidb@tidb-test1 ~]$ tiup cluster reload tidb-test -R tidb

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

四、主集群调整GC时间

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

set  global tidb_gc_life_time = '360m';

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

五、使用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"]字样,如下图所示:

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

第一步,使用lightning工具将数据全量导入

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

[lightning]
level = "info"
file = "tidb-lightning.log"
index-concurrency = 2 
table-concurrency = 6
io-concurrency =20

[tikv-importer]
backend = "local"
sorted-kv-dir = "/home/tidb/sorted"

[mydumper]
data-source-dir = "$/dumpdir"
no-schema = false
filter = ['*.*']

[tidb]
host = "10.3.31.101"
port = 4000
user = "root"
password = ""
status-port = 10080
pd-addr = "10.3.31.101:2379"

[checkpoint]
enable = true
schema = "lightning-task-sql-checkpoint"
driver = "file"

[post-restore]
checksum = true
analyze = false

第二步,开始导入

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

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

七、灾备集群扩容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/log
data_dir: /app/tidb/tidb-data/pump-8250

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

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

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

八、灾备集群开启Binlog功能

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

[tidb@tidb-test1 ~]$ tiup cluster edit-config tidb-test

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

binlog.enable: true
binlog.ignore-error: true

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

[tidb@tidb-test1 ~]$ tiup cluster reload tidb-test -R tidb

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

九、生产集群与灾备集群新建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权限。

十、灾备集群扩容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

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

十一、主集群扩容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

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

十二、检验同步链路是否搭建成功

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

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

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

十三、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 失败,需及时进行处理。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud Eureka注册服务提供者(七)

这里我们在原来的服务提供者项目 microservice-student-provider-1001 上面直接修改&#xff1a; 首先pom.xml修改&#xff0c;加上eureka客户端依赖&#xff1a; <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>…

【MySQL高级篇笔记-数据库备份与恢复(下) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、物理备份与逻辑备份 二、mysqldump实现逻辑备份 1、 备份一个数据库 2、备份全部数据库 3、备份部分数据库 4、备份部分表 5、备份单表的部分数据 6、排除某些表的备份 7、只备份结构或只备份数据 8、备份中包含存储过…

2023开放原子全球开源峰会展区“云游图鉴”,带你畅游开源世界!

2023 开放原子 全球开源峰会 畅游回顾 2023 开放原子全球开源峰会&#xff0c;6 月 11 日-13 日在北京圆满举行&#xff01; 一大批开源人从四面八方奔来&#xff0c;共赴这场盛会&#xff0c;在开源技术新世界里畅快云游&#xff01; 科技骨干企业、开源高端项目&#xff0…

前端眼里的Docker概念、工作流和实践-前端开发者也需要掌握Docker:加速你的开发流程

如果现在有个厨王争霸赛&#xff0c;比赛的菜式是做一道&#x1f414;相关的菜式&#xff0c;选手们需要做不同的鸡&#xff0c;有需要公鸡和母鸡的&#xff0c;有需要鸡仔的&#xff0c;为了让选手们完美的进行比赛&#xff0c;主办方为每个选手准备了独立厨房&#xff0c;厨房…

代码随想录算法训练营第五十七天|647. 回文子串|516.最长回文子序列

LeetCode647. 回文子串 动态规划五部曲&#xff1a; 1&#xff0c;确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;本题如果我们定义&#xff0c;dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话&#xff0c;会发现很难找到递归关系。dp[i] 和 dp[i-…

【备战秋招】每日一题:4月29日美团春招:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

好用的Windows数据恢复软件--傲梅恢复之星

​数据恢复软件有什么用&#xff1f; 现在&#xff0c;人们拥有大量的文件需要保留和保护&#xff0c;包括照片、视频、文档、游戏等等。了解数据安全的用户会利用云存储服务和外部设备来存储和备份重要的数据。 但更多的用户并不重视数据备份。这样做是相当危险的&#xf…

网络安全进阶学习第一课——认证崩溃之弱口令与暴力破解

文章目录 一、什么是弱口令&#xff1f;二、暴力破解1、暴力破解攻击产生原因2、暴力破解分类3、具体案例 一、什么是弱口令&#xff1f; 弱口令没有严格和准确的定义&#xff0c;通常认为它是容易被别人猜测到或被工具破解的口令均为弱口令。 在允许社会工程学攻击的情况下&…

一文搞懂 AB Testing 的分层分流

一、定义 在网络分析中&#xff0c;A / B测试&#xff08;桶测试或分流测试&#xff09;是一个随机实验&#xff0c;通常有两个辩题&#xff0c;A和B。利用控制变量法保持有单一变量的前提下&#xff0c;将A、B数据进行对比&#xff0c;得出实验结论。 二、简述 通常网站会利…

CentOS7配置教程(十三)安装Python3

由于 yum install python3 默认安装的 Python 版本较低&#xff0c;&#xff08;也可能自带了python3的版本过低&#xff09;现如今有更高版本的 Python 需求&#xff0c;就想用编译安装的方法安装一个较高版本的 Python&#xff0c;顺道记录一下安装过程。 注意&#xff1a;不…

通过ETLCloud自动化数据处理:用友U8数据一键同步

用友U8 用友U8是一款成熟的企业管理软件&#xff0c;是一套适用于企业全面管理的ERP&#xff08;Enterprise Resource Planning&#xff09;软件。主要用于管理企业的财务、人力资源、供应链、生产制造等业务。它具有模块化设计和高度可定制化的特点&#xff0c;可以根据企业的…

X Toolkit影像工具

最近发现一款3d影像工具&#xff0c;在网页版的表现很流畅&#xff0c;没有使用独显的情况下也非常的流畅。 X Toolkit 是一个开源工具包和框架&#xff0c;用于构建在浏览器中运行的医学和科学 3D 可视化&#xff0c;它使用 WebGL 的强大功能&#xff0c;只需几行代码即可提供…

探讨开源法律共识|2023开放原子全球开源峰会开源法律与合规分论坛成功举办

6 月 11 日&#xff0c;以“开源知识产权的深度现实与广阔未来”为主题的 2023 开放原子全球开源峰会“开源法律与合规分论坛”在北京经济开发区国家信创园顺利召开。全球开源领域法律与合规专家共同从理论和实践维度&#xff0c;就开放创新模式下知识产权纠纷的最新案例、开源…

ZooKeeper【客户端的API操作、写数据流程】

前置工作 创建Maven工程 导入依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><dependency><groupId>org.apache.loggi…

Flink TableAPI Aggregation And DataType

序言 这里整理下聚合的优化选项 以及 数据类型 Stream Aggregation SQL 是数据分析中使用最广泛的语言。Flink Table API 和 SQL 使用户能够以更少的时间和精力定义高效的流分析应用程序。此外&#xff0c;Flink Table API 和 SQL 是高效优化过的&#xff0c;它集成了许多查询…

springcloud-Nacos-注册表结构

// Map(nameSpace:: Group,Service) Map<String,Map<String,Service>> service new ConcurrentHashMap<>(); //Service 中有个属性 clusterMap // Map(服务名称,集群) Map<groupNameserviceName,Cluster> clusterMap new HashMap<>(); //而Clus…

局部聚集系数

最近在打一个图数据库算法的比赛&#xff0c;分到了计算局部聚集系数这道题&#xff0c;要求速度快&#xff0c;空间复杂度可以不首要考虑。这对我是一个全新的知识&#xff0c;用此博客记录我的学习历程。 搜了一圈视频教程&#xff0c;b站没有这块的知识&#xff0c;只有yout…

系统码的编译码与汉明码

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 系统码的编译码线性…

Android使用WebView与Native交互的三种方式 ( 附源码 )

先附上assets目录中html的源代码文件内容&#xff0c;下面的demo都是使用这几个文件&#xff1a; javascript.html: <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>Carson</title><script>function callAn…

深入理解多层感知机(MLP):原理与代码解析

文章目录 1. MLP的原理1.1 结构1.2 激活函数1.3 前向传播1.4 反向传播算法 2.MLP分类任务应用3.参考文献&#xff1a; 多层感知机&#xff08;MLP&#xff09;是一种经典的神经网络模型&#xff0c;由多个神经元层组成。它的结构和功能使其成为深度学习中的重要组成部分。MLP在…