TiDB集群多副本故障修复实践

TIKV宕机处理,重要的事,要说三遍
###集群停止写入,可能就没那么多的问题
###集群停止写入,可能就没那么多的问题
###集群停止写入,可能就没那么多的问题

因此可以不关闭整个集群
集群在异常宕机2个节点或3个节点,修复文档(TIKV两、三节点异常下线处理流程),在UNSAFE修复玩抽,集群仍然出现部分的region出现 Region is unavailable/TiKV server is busy主要导致的因素:
    1、集群在UNSAFE开始可能未及时关闭调度可能引起原因之一
    2、集群在执行UNSAFE后未执行完成开启调度可能引起原因之一
    3、集群在UNSAFE阶段关闭调度且存在持续写入也可能原因之一
在集群一定的规模下需要批量的对检查TIKV日志.批量处理检查异常region过程流程:
1、处理异常的peer信息,生成到一个文件
grep "\"remove missing peer" tikv.log | awk -F "peer_id=" '{print $NF}' | awk -F '[]=]' '{print "/home/tidb/pd-ctl -u http://pdhost:2379 -d region "$3" |grep -C2 "$1"|grep -w store_id | awk '\''{print $2}'\'' | xargs /home/tidb/pd-ctl -u http://pdhost:2379 -d operator add remove-peer "$3""}' > zremove-peer.sh
2、执行生成的zremove-peer.sh
       输出正常日志PD UAGE.....大概信息,表示正常
3、异常的REGION 还可能包含其他需通过命令进行过滤(第2天解决的问题)
      1、从日志过滤出异常region信息:        
            ps -ef | grep tikv | grep -v "grep" | awk '{print $NF}' | xargs grep "\[ERROR\] \[apply.rs:961\]" | grep -v " remove missing peer" | less
     2、执行删除region cache
           curl -X DELETE http://pdhost:2379/pd/api/v1/admin/cache/region/regionID
     3、操作2前记录版本信息,确定REGION是最新的
4、经过前面修复,服务还报错Region is unavailable,通过TIDB监控面板:
 
找到对应的TIDB-SERVER的日志 ,进行日志过滤 grep "regionMiss" tidb.log  找到对应的REGION,问题期间KV Backoff OPS持续存在值
  

    1、登陆pd-ctl 查看region情况,发现region 没有leader
           可通过命令直接查看异常信息: region --jq '.regions[]|select(has("leader")|not)|{id: .id, peer_stores: [.peers[].store_id]}'
            
    2、进行修复,注意region版本号:      
         存在的问题:
              1、存在的无法下线的节点,非LEADER节点
             2、为LEADER无法下线,够成的3副本的情况
             统一操作流程:
                  1、记录好当前region的版本信息
                         "conf_ver": 105898,
                         "version": 141601
                2、清除REGION缓存信息
                       curl -X DELETE http://pdhost:2379/pd/api/v1/admin/cache/region/140881258
               3、观察重新选举出来的REGION的LEADER情况
              4、若选出的LEADER的版本比操作前的小,进行REMOVE-PEER操作
                    operator add remove-peer   regionID 当前选出的storeID号
             5、观察region情况,此时监控会有现实副本缺失的值
                    curl -X DELETE http://pdhost:2379/pd/api/v1/admin/cache/region/regionID
5、经过以上修复流程,可能存在部分region无法被迁移成功,被下的tikv一直处理offline状态,可通过命令具体定位哪些region无法迁移:
     1、通过命令,找到对应的region:
               region store storeID
     2、修复region,一定要主意region的版本号: 
          curl -X DELETE http://pdhost:2379/pd/api/v1/admin/cache/region/regionID号
以上总结:
   1、集群进行unsafe操作
   2、找出通过unsafe修复后的下线节点还存在region的peer信息 ,如下线的store 为30 31
        region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(any(.==(30,31)))}"
  3、找出没有leader的raft-group信息
        region --jq '.regions[]|select(has("leader")|not)|{id: .id, peer_stores: [.peers[].store_id]}'
  4、通过CURL进行修复,修复前记录region的版本号:地址为pd集群的任意一个.
        curl -X DELETE http://pdhost:2379/pd/api/v1/admin/cache/region/regionID号
 预防措施
1、磁盘巡检
2、统一用intel的ssd硬盘,通过smartctl命令支持查看寿命指标参考
3、调研基于k8s部署tidb,实现在TIKV层分离方案
TIDB集群使用遇到其他问题:
1、ntpd超了5分钟
2、大SQL问题
3、执行计划不准问题,增加定时任务 
4、低版本TIKV单线程工作引发写入慢,节点HANG了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值