[转帖]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存储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等。如:https://docs.pingcap.com/zh/tidb/stable/release-5.3.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
10、检查问题region的tikv/pd日志,确认是否有异常信息。
4 一些建议
1、在同一主机部署同一集群的多个tikv实例时一定要将所有tikv设置相同的label,否则会导致同一主机有某些region的多个副本存在,宕机后会出现多副本失败。
2、升级、缩容操作要处理完整。缩容处理流程可参考:
TiKV缩容下线异常处理的三板斧:https://tidb.net/blog/ddef26a5
----------------------------------------------------------------------------------------------------------------------
[转帖]Region is unavailable的排查总结的更多相关文章
- tidb损坏tikv节点怎么恢复集群
tikv节点宕机(机器再起不来),或者数据节点被rm -rf 掉了怎么办 正常情况下tikv节点down掉了.此时不要去执行store delete store_id .数据一般可以正常访问,但是如 ...
- 线上问题排查-HBase写数据出现NotServingRegionException(Region ... is not online)异常
今天线上遇到一个问题:有一台服务器的cpu持续冲高,排查发现是我们的一个java应用进程造成的,该进程在向hbase中写入数据时,日志不断地打印下面的异常: org.apache.hadoop.hba ...
- IIS进程池异常崩溃,导致网站 service unavailable,原因排查与记录。
昨晚十点钟的样子,网站崩溃,开始 service unavailable,最近开始业务高峰,心里一惊,麻痹肯定进程池又异常崩溃了.又碰到什么问题?上次是因为一个异步线程的问题,导致了进程池直接崩溃,后 ...
- 【转帖】HBase之五:hbase的region分区
HBase之五:hbase的region分区 https://www.cnblogs.com/duanxz/p/3154487.html 一.Region 概念 Region是表获取和分布的基本元素, ...
- 关于报错:'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based
最近在看Extension相关知识的时候,自己写了个小demo 发现[UIApplication sharedApplication]这个方法敲不出来了, 总是报错:'sharedApplicatio ...
- su: cannot set user id: Resource temporarily unavailable
今天R&D所在主机出现su: cannot set user id: Resource temporarily unavailable资源不可用报错,直接通过其他机器ssh huyuh@xxx ...
- 13_FCITX输入法安装及问题排查解决
使用linux最沮丧的事情莫过于中文输入法切换不出来,甚至有人错误地认为,要使用中文输入法,必须把“区域和语言”(Region & Language)设置为中国-中文.输入法只是一个软件,和区 ...
- 排查 docker flow proxy 的 503 问题
这是今天我们在开发环境下 docker swarm 集群上遇到的问题,在这篇博文中记录一下排查过程. 先登录到应用容器内检查一下其中运行的站点是否能正常访问: # docker exec -it 02 ...
- su: cannot set user id: Resource temporarily unavailable【转】
今天R&D所在主机出现su: cannot set user id: Resource temporarily unavailable资源不可用报错,直接通过其他机器ssh huyuh@xxx ...
- [转帖] sqlserver CAL 授权模式下 只能够有20个core的使用问题
http://www.cnblogs.com/diabloxl/p/3623640.html?utm_source=tuicool&utm_medium=referral 公司这边性能组老师进 ...
随机推荐
- 取消deepin-wine TIM置顶
取消把deepin-wine TIM置顶 问题 在manjaro系统下,使用deepin-wine安装了tim.点击了tim的置顶功能后无法取消了.无法取消的原因是,弹出取消置顶的弹框会被置顶的tim ...
- libGDX游戏开发之打包游戏(十二)
libGDX游戏开发之打包游戏(十二) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goog ...
- 一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
前言 今天给大家分享一个小巧.快速.轻量级的 .NET NoSQL 嵌入式数据库:LiteDB.本篇文章主要是介绍LiteDB和在.NET中如何使用. LiteDB介绍 LiteDB 是一个小巧.快速 ...
- react-native在windows环境搭建并使用脚手架新建工程
截止到2024-1-11,使用的主要软件的版本如下: 软件实体 版本 react-native 0.73.1 react 18.2.0 react-native-cli 2.0.1 Android S ...
- 基于CREATE TYPE语法自定义新数据类型
摘要:介绍CREATE TYPE语法可以在数据库中定义一种新的数据类型. 本文分享自华为云社区<GaussDB(DWS)数据类型之自定义数据类型(复合类型)>,作者: 清道夫. CREAT ...
- GaussDB NoSQL架构设计分享
摘要:文章总结了当前数据库的发展趋势.GaussDB NoSQL关键技术解密以及核心竞争力. 本文分享自华为云社区<华为云GaussDB NoSQL云原生多模数据库的超融合实践>,作者:华 ...
- QA团队基于DataLeap开放平台能力的数据测试实践
背景 &痛点 随着生态体系扩展和业务发展,数据在业务中承担的决策场景越来越多样化,一部分数据已应用在资损.高客诉等高风险场景,因此对数据质量的要求,尤其是高风险场景的质量要求非常之高.但在保障 ...
- mysql--ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
问题背景: 1.在授权机器上连接mysql 8.0的数据库,账号.密码都没有问题,报错 2.使用 navicat工具连接8.0版本,报错 排查思路: 可能是创建用户没有指定插件使用了8.0自带的插件, ...
- Modern C++ Starter Kits Share
初入 C++ 搬砖,在团队中开发实际上很少亲自从零开始搭建C++的完整项目,99%时候都是使用基础架构团队或者CI/CD团队搭建好的框架.这里分享几个配置C++项目的模版,它们一般会涉及三方库管理.格 ...
- KB专题:区间DP专辑
自从多校后心憔悴啊,发现DP还是太水了,有一场的区间DP竟然不会做,咳,果然是赤裸裸的水军. 花了几天时间写了几道区间DP的题目,大部分都是水题,然后和以前的合并起来就是KB区间DP这个8 + 1道题 ...