TiDB-unsafe recover(三台tikv宕机两台)

一、背景

名称数量
tikv3
副本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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值