[转帖]Region is unavailable的排查总结

region,is,unavailable,排查,总结 · 浏览次数 : 0

小编点评

## Region is unavailable **问题描述:** tidb 在访问key数据时,获取key所在region的分布信息时,可能出现`region is unavailable` 错误,这是由于以下几种原因: 1. **leader切换时间过长** 2. **region分裂/合并操作执行缓慢** 3. **其他问题** **解决方案:** 1. **检查region is unavailable的原因:** * 检查`Information_schema.tikv_store_status`表中的`region_id`和`leader`字段。 * 使用`pd-ctl region`命令检查每个region的`peer_stores`数量。 * 使用`pd-ctl config show5`命令检查副本数设置。 2. **解决问题 1:** * 使用`pd-ctl region --jq='.regions[]|select(has(\"leader\")|not)|{id: .id,peer_stores: [.peers[].store_id]}'`命令查找所有没有leader的region的ID。 * 使用`pd-ctl region --jq='.regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length==1) } '`命令查找所有长度为1的region,其中只有一个为leader。 3. **解决问题 2:** * 使用`pd-ctl region --jq='.regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length==1) }'`命令查找所有长度为1的region,其中只有一个为leader。 * 使用`pd-ctl region --jq='.regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length==1) } '`命令查找所有长度为1的region,其中只有一个为leader。 4. **其他解决方案:** * 在同一主机部署多个tikv实例时,一定要将所有tikv设置相同的label,否则会导致同一主机有某些region的多个副本存在,宕机后会出现多副本失败。 * 在升级、缩容操作中要处理完整。

正文

https://tidb.net/blog/07c99ed0#4%C2%A0%20%E4%B8%80%E4%BA%9B%E5%BB%BA%E8%AE%AE

 

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等。如:https://docs.pingcap.com/zh/tidb/stable/release-5.3.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是否正常。

explain SQL 检查报错表的执行计划使用索引还是表、走的tikv还是tiflash。

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 排查

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

 

一些建议

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

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

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

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

参考文档: Region is unavailable

与[转帖]Region is unavailable的排查总结相似的内容:

[转帖]Region is unavailable的排查总结

https://tidb.net/blog/07c99ed0#4%C2%A0%20%E4%B8%80%E4%BA%9B%E5%BB%BA%E8%AE%AE 1 region访问基本流程 tidb在访问key数据时需要获取key所在region的分布信息,在tidb 侧有一个region cache存

[转帖]记一次sst文件损坏修复过程

https://tidb.net/blog/54e388c8 【2023-07-14 14:26:28】应用系统报警删除数据失败,查看日志报Region is unavailable,同时企业微信群也收到数据库告警信息。 二、问题定位 首先查看集群进程都正常,登录tidb dashboard查看日志

[转帖]Region 性能调优

https://docs.pingcap.com/zh/tidb/v6.5/tune-region-performance 本文介绍了如何通过调整 Region 大小等方法对 Region 进行性能调优以及如何在大 Region 下使用 bucket 进行并发查询优化。 概述 TiKV 自动将底层数

[转帖]Region Merge Config

TiKV replicates a segment of data in Regions via the Raft state machine. As data writes increase, a Region Split happens when the size of the region o

[转帖]Split Region 使用文档

https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region 在 TiDB 中新建一个表后,默认会单独切分出 1 个 Region 来存储这个表的数据,这个默认行为由配置文件中的 split-table 控制。当这个 Regio

[转帖]TiDB-merge region相关问题

一、开启region merge # 控制 Region Merge 的 size 上限,当 Region Size 大于指定值时 PD 不会将其与相邻的 Region 合并 pd-ctl config set max-merge-region-size 20 # 控制 Region Merge 的

[转帖]openstack中region、az、host aggregate、cell 概念

https://www.cnblogs.com/xiexun/p/14491057.html 1. region 更像是一个地理上的概念,每个region有自己独立的endpoint,regions之间完全隔离,但是多个regions之间共享同一个keystone和dashboard。(注:目前op

[转帖]TIDB TIKV 数据是怎么写入与通过Region 分割的?

https://cloud.tencent.com/developer/article/1882194 国产的分布式数据库不少,TDSQL, OB, TIDB ,等等都是比较知名的产品,使用的分布式协议也不同,有使用POSTGRES-XL ,也有从外观模仿ORACLE 的,还有借鉴各家所长自己研发的

【转帖】68.记忆集(remembered set)和写屏障(write barrier)

目录 1.记忆集(`remembered set`) 1.记忆集(remembered set) 问题:G1将堆区划分成多个region,一个region不可能是独立的,它其中存储的对象可能被其他任意region(这些region可能Old区或者Eden区)中的对象所引用。这样一来,在进行YGC的时

[转帖]058、集群优化之PD

PD调度基本概念 调度流程 调度中还有这还缺来了merge,例如合并空region。 store: 基本信息,容量,剩余空间,读写流量等 region: 范围,副本分布,副本状态,数据量,读写流量等 相关调度说明 balance-leader-scheduler: 保持不同节点的leader均衡ba