一、背景

名称 数量
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. BUUCTF Reverse 新年快乐

    下载文件先查壳,可以看到有UPX壳 用upx脱壳 拖到ida pro32,shift+F12查看字符串,看到关键字flag,双击进去 双击然后f5查看伪代码 main函数伪代码 关键函数: strnc ...

  2. Go 语言为什么不支持并发读写 map?

    大家好,我是 frank ,「 Golang 语言开发栈」公众号作者. 01 介绍 在 Go 语言项目开发中,我们经常会使用哈希表 map,它的时间复杂度是 O(1),Go 语言中的 map 使用开放 ...

  3. VsCode如何配置C语言环境?

    以前学校上C语言课程都是使用VC++6.0上课,这个学期为了复习一遍C语言,而且自己经常使用VSCode开发前端项目,所以为了方便.这里把需要的环境和插件配置在这里介绍一下. Windows环境下安装 ...

  4. C++产生N以内的随机整数

    C++产生N(这里N=100)以内的随机整数的例子: #include <iostream> #include <ctime> using namespace std; int ...

  5. 一文读懂GaussDB(openGauss) 的六大关键技术特性

    摘要:更为深入地介绍了GaussDB(openGauss)的关键特性.成功案例. GaussDB(openGauss)是深度融合华为在数据库领域多年的经验,结合企业级场景需求,推出的新一代企业级分布式 ...

  6. GaussDB(DWS)云原生数仓技术解析

    摘要:本文主要介绍GaussDB(DWS)云原生数仓架构.产品能力,帮助开发者快速了解GaussDB(DWS)云原生数仓相关信息与能力. 本文分享自华为云社区<直播回顾 | GaussDB(DW ...

  7. “互联网+”大赛之智慧校园 赛题攻略:你的智慧校园,WeLink帮你来建

    摘要:本赛题的核心就是借助华为云WeLink的中台服务能力/开发工具等,结合学校的具体的高价值场景,开发出WeLink小程序,方便师生的学习与生活. 本文分享自华为云社区<"互联网+& ...

  8. 【“互联网+”大赛华为云赛道】GaussDB命题攻略:支持三种开发语言,轻松完成数据库缓冲池

    摘要:七届中国国际"互联网+"大学生创新创业大赛火热报名中,为了帮助参赛者更好了解赛题设计思路和命题方向,华为云产业命题赛道举行了线上直播解读,华为云数据库资深架构师苏斌在直播间详 ...

  9. 解读clickhouse存算分离在华为云实践

    摘要:本文是我们对clickhouse做了最简单的支持obs的适配改造. 本文分享自华为云社区<clickhouse存算分离在华为云实践>,作者: he lifu. clickhouse是 ...

  10. Windows系统快速安装Superset 0.37

    Windows系统安装Superset 0.37 Superset 是一款由 Airbnb 开源的"现代化的企业级 BI(商业智能) Web 应用程序",其通过创建和分享 dash ...