一、背景

名称 数量
tikv 3
副本 3

1.故障:

因为某些原因,两台tikv不可连接,出现region不能访问的故障

2.几条理论:

2.1.多副本原则
存在一半以上的副本则集群访问不受影响(如n副本,存活(n+1)/ 2)
2.2.数据完整性
当副本数量等于tikv的数量的时候,每一个tikv都有全部的region,只不过不是每个region都是leader
2.3.集群不可访问
当副本存活数量小于(n+1)/ 2的时候,集群不可访问,只能使用unsafe recover来恢复

二、故障处理

1.查看不可连接的store

#  记录下 "state_name": "Disconnected"的store id(我的是1,7)
tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port store

2.关闭pd调度,避免恢复过程中产生异常

# 进入交互模式
tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
# 分别执行以下命令
config set region-schedule-limit 0
config set replica-schedule-limit 0
config set leader-schedule-limit 0
config set merge-schedule-limit 0
# 查看调度是否关闭
operator show

3.停止tikv进程(防止执行unsafe-recover remove-fail-stores出现文件锁而失败)

tiup cluster stop cluster_name -R tikv

4.进行unsafe-recover remove-fail-stores

4.1 将tikvctl挪移到所有状态正常kv机器中

scp /data/tidb/.tiup/components/ctl/v4.0.13/tikv-ctl tidb@192.168.1.1:/home/tidb
scp /data/tidb/.tiup/components/ctl/v4.0.13/tikv-ctl tidb@192.168.1.2:/home/tidb
scp /data/tidb/.tiup/components/ctl/v4.0.13/tikv-ctl tidb@192.168.1.3:/home/tidb

4.2 执行tikvctl命令

# 4.0.x 版本命令,-s是指store id,--all-regions是指所有region,-r 可以用来指定的region来代替--all-regions
# unsafe-recover remove-fail-stores(故障机器从指定 Region 的 peer 列表中移除) ./tikv-ctl --db /data/tikv/tikv-data28016/db unsafe-recover remove-fail-stores -s 1,7 --all-regions # 5.x 版本命令 ./tikv-ctl --data-dir /data/tikv/tikv-data28016 unsafe-recover remove-fail-stores -s 1,7 --all-regions

5.恢复pd调度

# 进入交互模式
tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
# 分别执行以下命令(值为关闭之前的值就可以)
config set region-schedule-limit 2048
config set replica-schedule-limit 64
config set leader-schedule-limit 4
config set merge-schedule-limit 8

6.启动tikv集群

tiup cluster start cluster_name -R tikv

三、一些不成功的尝试方法

1.主要原因

看日志的原因是连接到几个已经down 掉的kv

2.解决

2.1尝试 --force缩容依旧报错

tiup cluster scale-in cluster_name -N tikv_ip:tikv_port --force

2.2 尝试store delete

# 进入交换模式
tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
# 查看当前都有哪些store
store
# 删除对应id的store
store delete 1
# 没有删除掉,这是因为状态不是Tombstone的状态无法进行delete

2.3 查看宕机store上的region

# 进入交换模式
tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
# 查看region
region store 1
# 这里可以看到pd的记录里,还有好多region再这个宕机的store上,那么这样的话就回向对应的kv发布消息,但kv收不到,所以就会有region不可用的报错

综上: 只有把宕机store上的region清除掉,才能让集群正常启动,所以这里就用到了unsafe-recover方

感谢大佬的文章:
https://mp.weixin.qq.com/s/u5MBSIydf_ZQ1jxCJn4O2A
https://tidb.io/blog/9163546d

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树数据库组成66715 人正在系统学习中

[转帖]TiDB-unsafe recover(三台tikv宕机两台)的更多相关文章

  1. Aerospike系列:8:集群宕机演练

    1:初始的集群状态 2:关掉192.168.91.133:3000 3:再关掉192.168.91.135:3000 3:再关掉192.168.91.144:3000 5:恢复192.168.91.1 ...

  2. 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!

    某日中午,午睡正香的时候,接到系统的报警电话,提示生产某物理机异常宕机了,目前该物理机已恢复,需要重启上面部署的应用. 这时瞬间没有了睡意,登上堡垒机,快速重启了应用,系统恢复正常.本想着继续午睡,但 ...

  3. Tidb进行缩减扩容tikv节点

    这两天接到任务说是要进行测试缩减机器给集群带来的负面效果有哪些. 然后我就按照官方的教程将机器进行了缩减,主要是缩减tikv节点 我们先来看看官方的文章是怎么写的: 步骤都没有什么问题,就是进行到第二 ...

  4. go 语言的宕机恢复(recover)

    go 语言中的三种报错机制 第一种,也就是常说的 error 类型错误,不需要 recover 拯救,处理方式自己决定 第二种,panic 和 recover 是紧密集合的,有点类似 try catc ...

  5. [转帖]Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案

    Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案 https://www.cnblogs.com/xlecho/p/11834011.html echo编辑整理,欢迎转载,转 ...

  6. 双十一来了,别让你的mongodb宕机了

    好久没过来吹牛了,前段时间一直赶项目,没有时间来更新博客,项目也终于赶完了,接下来就要面临双十一这场惊心动魄的处女秀考验, 我们项目中会有一个wcf集群,而集群地址则放在mongodb中,所以mong ...

  7. mysql 异常宕机 ..InnoDB: Database page corruption on disk or a failed,,InnoDB: file read of page 8.

    mysql 测试环境异常宕机 系统:\nKylin 3.3 mysql版本:5.6.15--yum安装,麒麟提供的yum源数据库版本 error日志 181218 09:38:52 mysqld_sa ...

  8. HBase–RegionServer宕机恢复原理

    Region Server宕机总述 HBase一个很大的特色是扩展性极其友好,可以通过简单地加机器实现集群规模的线性扩展,而且机器的配置并不需要太好,通过大量廉价机器代替价格昂贵的高性能机器.但也正因 ...

  9. Oracle备库宕机启动解决方案

    简介 ORA-10458: standby database requires recovery ORA-01196: 文件 1 由于介质恢复会话失败而不一致 ORA-01110: 数据文件 1: ' ...

  10. 【大数据面试】【框架】kafka:组成、台数/参数配置、持久化、ISR队列、宕机、丢数据、重复数据、数据积压、优化各种配置(刷盘、存盘、副本、压缩)、zk、其他

    一.基本信息 1.组成 生产者 broker 消费者 zookeeper:brokerid.consumer信息(不包含生产者的信息) 2.需要安装多少台 2 * (生产者的峰值生产速率 * 副本 / ...

随机推荐

  1. 手动实现BERT

      本文重点介绍了如何从零训练一个BERT模型的过程,包括整体上BERT模型架构.数据集如何做预处理.MASK替换策略.训练模型和保存.加载模型和测试等. 一.BERT架构   BERT设计初衷是作为 ...

  2. 细说SQL与ETL之间的小秘密

    本文分享自华为云社区<GaussDB数据库SQL系列-SQL与ETL浅谈>,作者:Gauss松鼠会小助手2. 一.前言 在SQL语言中,ETL(抽取.转换和加载)是一种用于将数据从源系统抽 ...

  3. C语言编程需要掌握的核心要点有哪些? 编程大神为你总结了这20个

    摘要:C语言作为编程的入门语言,学习者如何快速掌握其核心知识点,面对茫茫书海,似乎有点迷茫.为了让各位快速地掌握C语言的知识内容,在这里对相关的知识点进行了归纳. 引言 笔者有十余年的C++开发经验, ...

  4. OBS鉴权实现的宝典秘籍,速拿!

    摘要:OBS提供了REST(Representational State Transfer)风格API,支持您通过HTTP/HTTPS请求调用.本文将带你了解OBS API鉴权实现的宝典秘籍. OBS ...

  5. 介绍3种ssh远程连接的方式

    摘要:SSH(安全外壳协议 Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,用于在网络中实现客户端和服务端的连接,典型的如我们在本地电脑通过 SSH连接远程服务器. ...

  6. 解读革命性容器集群CCE Turbo:计算、网络、调度全方位加速

    摘要:CCE Turbo是华为云推出的一款革命性容器集群. 5月31日,在华为云Techwave云基础设施技术专题日上,华为云容器批量计算首席架构师马达对CCE Turbo的技术内幕进行了深度解读,C ...

  7. Java中观察者模式与委托,还在傻傻分不清

    摘要:本文通过对比Java中观察者模式与委托,希望能够让开发者分清二者的区别和联系. 本文分享自华为云社区<Java中观察者模式与委托的对比>,作者: 小小张自由--张有博 . 代码背景 ...

  8. TML转义字符:xss攻击与HTML字符的转义和反转义

    xss与转义符 xss简单来说: XSS 攻击是页面被注入了恶意的代码 XSS 漏洞是 可以让攻击者注入恶意代码可执行的漏洞 具体参看之前写的: web开发前端安全问题总结--web前端安全问题汇总  ...

  9. Unable to create tempDir. java.io.tmpdir is set to /tmp

    磁盘挂载后,启动报错 Unable to create tempDir. java.io.tmpdir is set to /tmp [2022-03-30 17:12:06.596] WARN [m ...

  10. 围绕ChatGPT,做了点小事,赚了点小钱

    大家好,我是章北海mlpy 作为 ChatGPT 日活用户,分享一下经验和用它做的一些小事吧. 经验不敢当,只是觉得大家把ChatGPT当成了高大上的黑科技,其实它就是个工具,就像你买了个新手机一样, ...