写点什么

Region is unavailable 的排查总结

  • 2023-03-10
    北京
  • 本文字数:1618 字

    阅读完需:约 5 分钟

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


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。
复制代码

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 等。

排查总结

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 日志,确认是否有异常信息。

一些建议

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


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


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


-———————————————————————————————————————


参考文档: Region is unavailable


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
Region is unavailable的排查总结_管理与运维_TiDB 社区干货传送门_InfoQ写作社区