初体验之rawkv learner recover灾备切换
作者:陈厚强
原文来源: https://tidb.net/blog/ddc1ce25
准备环境
安装介质
1) tikv 5.0.4 release
https://download.pingcap.org/tidb-community-server-v5.0.4-linux-amd64.tar.gz
2) learner-recover.tar.gz
https://github.com/pingcap-inc/learner-recover/releases/download/latest/learner-recover.tar.gz
集群拓扑信息
IP | role | 虚拟 AZ | label |
---|---|---|---|
192.168.56.4 | pd+tikv | az1<主> | rock1-host4 |
192.168.56.6 | pd+tikv | az2<主> | rock2-host6 |
192.168.56.78 | pd+tikv | az3<主> | rock3-host78 |
192.168.56.66 | tiup+monitor | ||
192.168.56.80 | tikv(learner)+(pd灾备切换后) | az4<备> | rock4-host80 |
192.168.56.130 | tikv(learner)+tiup+(monitor 灾备切换后) | az4<备> | rock4-host130 |
192.168.56.136 | tikv(learner) | az4<备> | rock4-host136 |
检查切换条件
主集群至少需要有一次 pending-peer-region-count 归 0,否则灾备集群会有 region 空洞无法恢复。保证灾备集群有一次完整的数据同步。
确认灾备集群已经被主集群重建,以及灾备的端口配置
- 在灾备中控机上销毁旧的灾备集群
- 拷贝一份灾备中控机上边的 join.yaml ,scale-in 主集群中断连的 TiKV 节点,通过 join.yaml 扩容
- 规定灾备集群的端口从 20160 开始迭代,每次恢复 join.yaml 里边的端口 +1
灾备切换的配置文件均在灾备中控机上
配置文件准备
配置文件均在learner-recover/config目录下面
修改 old.yaml 文件
old.yaml内容为主机群配置信息(部署拓扑文件)。
cp mata.yaml old.yaml
修改 join.yaml 文件
此文件需要将灾备集群的 learner TiKV 节点的信息复制到这里,结构跟 tiup cluster scale 的拓扑一样,注意这里需要更改端口信息,否则会可能会引起主备集群的服务冲突,导致 TiKV panic。
端口修改避免冲突, join.yaml 里边的tikv端口信息需要每次测试前 +1 。但是数据目录复用,不能更改。
修改 new.yaml 文件
new.yaml文件中配置的是新集群的配置信息,其中不包含tikv部分。目录和端口要跟原主集群的不一致。
同步主集群密钥
如果是第一次测试或者主集群重新部署了,需要拷贝一份主集群的密钥到灾备恢复工具的配置目录。再次进行灾备切换时,此步骤可忽略
scp ~/.tiup/storage/cluster/clusters/<cluster-name>/ssh/id_rsa <local-path>
修改 recover.yaml文件,并把密钥加到里面
vi recover.yaml# 主集群的拓扑文件路径old-topology: config/old.yaml# learner 要迁入的新集群拓扑路径,文件内通常不包含 TiKV 节点,可以包含新的 PD, 监控等节点。new-topology: config/new.yaml# 灾备集群中的 TiKV 节点拓扑,里边应该包含灾备集群中的 learner 节点,需要更改端口,但是数据目录应该保持一致,重用数据的同时防止跟旧集群产生冲突。具体的配置可以看 configjoin-topology: config/join.yaml# fetcher.sh 拉取的恢复信息文件路径recover-info-file: config/recover-info.json# 灾备集群的 label 。用于标识哪些集群是灾备节点,需要执行恢复操作。zone-labels: zone: az4# 迁入集群的组建版本cluster-version: v5.0.4# 迁入集群的名字cluster-name: tidb-backup# tikv-ctl 在每台 learner 节点上的路径,绝对路径tikv-ctl:src: /data1/learner-recover/tikv-ctl # 本机上的 tikv-ctl 路径,绝对路径 or 相对路径dest: /home/tidb/tikv-ctl # 拷贝到远端 host 的 tikv-ctl 路径, 绝对路径# pd-recover 在本机上的路径,绝对路径 or 相对路径pd-recover-path: /data1/learner-recover/pd-recover# pd server 的配置,用于设置启动的 PD,例如可以加快补副本的速度pd-ctl-commands:- config set max-pending-peer-count 512- config set max-snapshot-count 128- config set replica-schedule-limit 1024- config set scheduler-max-waiting-operator 100- store limit all 800 add-peer- Store limit all 20000 remove-peerpatch: /data1/tidb-community-server-v5.0.4-linux-amd64/tikv-server.tar.gz # 需要 patch 的 tikv 二进制包#将下面信息添加到文件最后一行extra-ssh-opts: -i id_rsa
拷贝tikv-ctl和pd-recover到灾备中控机
tikv-ctl和pd-recover两个文件在tidb v5.0.4的介质包中:$ cp /data/tidb-community-server-v5.0.4-linux-amd64/tikv-ctl /data/learner-recover/$ cp /data/tidb-community-server-v5.0.4-linux-amd64/pd-recover /data/learner-recover/
修改rpo.yaml文件
# 可以用 rpo.sh 命令启动脚本,配置文件解析如下:topology: config/old.yaml # 主集群拓扑文件路径learner-labels: # 这里可以用 labels 去 match 出灾备集群的 host。zone: az4tikv-ctl: # 需要加上src和dest的路径:# tikv-ctl 在每台 learner 节点上的路径,绝对路径src: /data1/learner-recover/tikv-ctl # 本机上的 tikv-ctl 路径,绝对路径 or 相对路径dest: /root/tikv-ctl # 拷贝到远端 host 的 tikv-ctl 路径, 绝对路径last-for: 1m # 持续拉取多久的 RPO history-path: config/history.json # 存放历史的路径save: config/rpo.json # 存放 RPO 信息的路径
修改info.yaml文件
#可以用 fetcher.sh 命令启动脚本,配置文件解析如下:save: config/recover-info.json # 灾备信息存放路径,集群恢复所需topology: config/old.yaml # 主集群拓扑文件路径learner-labels:zone: az4interval: 1s # go Duration syntax, 多久执行一次拉取last-for: 1m # 持续多久timeout: 2s # 请求超时时间# hint:由于 crontab 的最小粒度为分钟级别,可以设置 last-for = 1m, 并且每分钟执行 fetcher.sh 实现更小粒度拉取
执行 fetcher.sh,该脚本已经放在crontab定时任务中
检查recover-info.json是否是最新的:
/data/learner-recover/learner-recover/config/recover-info.json
检查 config/recover-info.json 是否已经有数据,正常来说应该包含一下数据:
{"storeIDs":[5,6,4],"clusterID":"6994842895216004854","allocID":4294968296}
非灾备节点的 store id 以及集群的 cluster id、alloc id。
检查 config/rpo.json
{"lag":649801723,"safe-time":"2021-09-02T16:37:39.941238343+08:00"}
lag 代表主集群和灾备 learner 节点的同步延迟。由于本身计算和拉取信息有一定耗时,所以实际的 lag 时间要比这个更小。
执行灾备切换
执行recover**.sh**
耗时:2分钟左右
time sh recover.sh |& tee -a recover.log
脚本执行完成后,日志出现success,再去监控查看region health情况,待miss-peer-region-count降为0,则说明灾备切换补副本完成。
在备机上查看集群状态
灾备中控机上查看集群状态,均为Up,此时灾备切换完成。
总结和思考
Learner recover特性可以提供rawkv(没有tidb组件的集群)的容灾能力;
Learner recover特性可以实现同城应急和异地容灾;
learner副本如果能提供读操作的能力,则会分担主集群的读压力。
初体验之rawkv learner recover灾备切换相关推荐
- 详解数据中心灾备切换技术
<详解数据中心灾备切换技术> 目录 1.网络切换技术 (1)基于IP地址的切换 (2)基于DNS服务器的切换 (3)基于负载均衡设备的切换 2.应用切换技术 (1)主备集群 (Cluste ...
- 赣州银行增强科技创新,实现一键灾备切换
8月23日,周五,到了下班时间,赣州银行数据中心还是一片忙碌.今天晚上,他们将在这里开始一年一度的灾备切换演练,11个部室和8个分支行验证机构参与,演练范围包括核心业务系统.柜面系统.二代支付系统等2 ...
- 期货经纪公司的灾备切换流程
4 .经纪公司灾备建设流程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- postgresql灾备切换
演示pg_rewind的使用方法. 主库在10.0.3.101上,备库在10.0.3.102上. 这时主库出问题了,如机器宕机了(我们用强制关机来模拟),我 们现在激活备库,即在10.0.3.102上 ...
- NOS跨分区灾备设计与实现
本文来自网易云社区 作者:王健 摘要 NOS(网易对象存储)在实现多机房(杭州机房,北京机房等)部署后,允许一个用户在建桶时选择桶所属机房.在此基础上,我们实现了跨机房的数据复制,进一步实现了跨机房的 ...
- 科技云报道:华为云数据灾备,守护企业的生命线
科技云报道原创. 未来,所有企业都是在线型企业,小到街边随处可见的零售店铺,大到跨国经营的全球五百强,线上线下的产业融合模式,按下了数字经济发展的"快进键". 数字化时代的企业,既 ...
- 城市云灾备,为业务连续性保驾护航
摘要:华为云作为中国政务云基础设施领域领导者,基于华为公有云技术架构的政务云平台,具备领先的云灾备技术实力,支持IaaS.PaaS等云服务云原生灾备能力. 本文分享自华为云社区<城市云灾备,为业 ...
- 大话oraclerac集群、高可用性、备份与恢复_数腾Oracle RAC数据库灾备解决方案
"一个系统包含很多模块,数据库.前端.缓存.搜索.消息队列等,每个模块都需要做到高可用,才能保证整个系统的高可用." 数据库作为现代信息社会的基石,几乎所有的计算机应用软件都构建于 ...
- DT时代下 数据库灾备的探索与实践
170余场主题峰会和分论坛完美呈现,上千位分享嘉宾.数万名创新创业导师齐聚一堂,刚刚结束的2018杭州云栖大会让云栖小镇又一次成为探索数字世界的中心. 随着DT时代的到来,企业对数据的依赖程度与日俱增 ...
- 优维助力国内某省级商业银行同城异地灾备自动化建设
银监会在<商业银行数据中心监管指引>中明确要求"商业银行每年至少进行一次重要信息系统专项灾备切换演练,每三年至少一次重要信息系统全面灾备切换演练,以真实业务接管为目标,验证灾备系 ...
最新文章
- 1075 PAT Judge
- 链表栈-》与数组栈同接口-》更确切地说是单项链表的接口封装
- go kegg_差异基因的GO与KEGG注释
- 课程设计+计算机程序设计,高职计算机程序设计课翻转课堂初探
- java注解_Java注解教程及自定义注解
- python大学_大学为什么不先开python?
- 【Linux】 CentOS 7 安装 RabbitMQ
- X86 “将死“?RISC-V 正当立
- 考研c语言复试常问问题,2018考研复试常问的十个问题及回答指导
- 为什么“隐性知识”比“刻意练习”更重要?
- 伯努利方程(压力与流量的关系)
- python 饼图代码_Python中使用Matplotlib画出饼图的代码实例
- 【Tcl学习笔记】第2章 Tcl语言的语法
- 静态测试和动态测试相关知识点
- Flutter 底部导航栏实现方式
- 对于计算机网络 其安全措施都有哪些,网络安全问题防范措施有哪些
- win10怎么查看自己笔记本电脑电池的损耗情况
- [赛后总结]G2022 Regular Contest 02总结
- P9:最大池化的使用
- linux 磁盘整理命令,Ubuntu磁盘整理命令汇总
热门文章
- 一文带你了解java stream, 太强了
- 苹果6s照相快门声音设置_苹果手机内置录屏技巧,还能加入自己的声音,花3秒钟设置一下...
- Serverless实战——2分钟,教你用Serverless每天给女朋友自动发土味情话
- 关于vue组件引用外部Js数值和方法出现的问题
- Apple Configurator 2提取ipa文件
- 修改tomcat的默认端口号是在tomcat的哪个配置文件里面?
- HDU 5651 xiaoxin juju needs help 组合数
- HDU - 5651 xiaoxin juju needs help 逆元模板
- 用Python自动化办公操作PPT,掌握这些技巧没压力!
- 海洋cms模板免费下载