Region is unavailable的排查总结

作者: h5n1 原文来源: https://tidb.net/blog/07c99ed0

1 region访问基本流程

 tidb在访问key数据时需要获取key所在region的分布信息,在tidb 侧有一个region cache存储region信息,包含region key范围、leader+peer信息、store\_id等,每次访问key时先从region cache内查找是否有相应region信息如果没有则从pd读取并放到region cache内。

由于pd或tikv不会主动将最新的region信息告知给tidb,当region发生变化时,比如leader切换、region分裂或合并,或者tikv节点无法访问等,tidb侧的region cache信息可能会过期,此时根据region cache信息访问tikv时由于region的变化tikv会返回一些错误信息,比如not leader、RegionNotFound 、EpochNotMatch 等。tidb会进行backoff,根据tikv返回的错误信息里的内容或从pd更新region信息,尝试使用新的信息访问region。

2 region is unavailable常见原因

region is unavailable 就是tidb 在backoff时由于各种问题导致超过了阈值时间(20秒)而返回的错误。常见的原因有:

1、最大副本数的半数以上tikv或tiflash不可用或同时发生重启,导致raftgroup多副本失败。需要注意的tidb集群允许问题tikv的数量是以副本数的多数可用为准,与运行tikv的主机数量没关系。

2、在backoff时间内没有leader可访问:

(1) Tikv很忙Region 在backoff时间内没有选举出leader;

(2) region已经有问题无法选出leader;

(3) Region split时间过长。

3、 Region split/merge在Follower apply慢的情况下,发生Leader切换后未能在backoff时间内同步到split/merge操作。

4、其他情况:比如版本升级过程不完全、bug等。

3 排查总结

1、确认问题是偶尔出现还是每次必现。

2、检查是否有多个tikv 或tiflash异常的情况。

 tiup cluster display  xxx 或查询Information\_schema.tikv\_store\_status

3、检查tikv/tiflash的版本是否一致,状态是否与tiup一致。

 查询Information\_schema.tikv\_store\_status 或 pd-ctl store

4、检查副本数设置max-replicas是否>=3。

 pd-ctl config show

5、检查查询的表或使用的索引region是否正常。

 show table xxx regions .

 pd-ctl region region\_id

 正常情况region中peer数应该>=max-replica数量,且其中一个为leader

6、直接查找不正常的region。

(1) 没有leader的region

 pd-ctl region --jq='.regions\[]|select(has("leader")|not)|{id: .id,peer\_stores: \[.peers\[].store\_id]}'

(2) region数小于一定数量的region

 pd-ctl region --jq='.regions\[] | {id: .id, peer\_stores: \[.peers\[].store\_id] | select(length==1) } '

(3) 检查bad region

 ./tikv-ctl --data-dir /data1/tidb-data/tikv-20160 bad-regions

 5.x版本:./tikv-ctl --db /data1/tidb-data/tikv-20160/db bad-regions

7、检查tikv是否出现重启。

 监控: TiKV detail -> cluster -> uptime或看memory趋势

8、检查follower apply是否延迟。

 监控:TiKV detail -> raft Io -> appply log duration 是否过大

 TiKV detail -> raft propose -> appply wait duration 是否过大

9、检查tikv是否出现server busy 或其他错误

 监控:TiKV detail -> Erros

  [Server busy 排查](https://docs.pingcap.com/zh/tidb/stable/tidb-troubleshooting-map#43-%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8A%A5-server-is-busy-%E9%94%99%E8%AF%AF)

10、检查问题region的tikv/pd日志,确认是否有异常信息。

4 一些建议

1、在同一主机部署同一集群的多个tikv实例时一定要将所有tikv设置相同的label,否则会导致同一主机有某些region的多个副本存在,宕机后会出现多副本失败。

2、升级、缩容操作要处理完整。缩容处理流程可参考:

TiKV缩容下线异常处理的三板斧:<https://tidb.net/blog/ddef26a5>

----------------------------------------------------------------------------------------------------------------------

参考文档: Region is unavailable

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值