故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐

2024年 6月 11日 72.4k 0

一、现象描述

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-1

在一个平平无奇的下午收到告警,登录到监控进行查看:

Overview -> Tikv -> leader

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-2

Overview -> Tikv -> region

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-3

通过观察 leader 和 region 的面板,我们发现某 TiKV 节点的 leader 被驱逐,leader 数量呈断崖式下降,最终 leader 被全部驱逐。但与此同时,该期间 region 数量正常变化,这是令人比较诧异的一个现象。

到这里,我们还不能判断是什么原因导致的这一现象,下面继续分析。

二、问题排查

2.1 IO 被打满

Overview -> System Info -> IO Util

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-4

到这里,我们看到某节点磁盘利用率被打满过,该节点上混部了我们的一个 TiDB 和 一个 PD 。

2.2 查看该机器日志

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-5

在这里发现了 kernel 级别的错误,controller encountered a fatal error and was reset,表示某个硬件控制器出现了严重错误并被重置。

2.3 PD 集群 Leader 切换

Overview -> PD -> Region health

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-6

随后观察 PD 的 Region health 监控,发现告警后的数据没有显示,除此之外还有其他面板有相似的情况:

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-7

通常来说,TiKV 节点会将这些信息上报给 PD 集群中的 Leader 节点。因为在 PD 集群中,Leader 节点是负责处理所有数据调度操作的。所以,这里猜测 PD 集群中的 Leader 节点发生了切换。

后面通过 tiup cluster display 集群名称 以及 监控:Overview -> PD -> PD role 发现,PD 集群的 Leader 节点确实进行了切换。

截止到这里,关于某个 TiKV 节点的 leader 被驱逐的原因还是没有被分析出来,不过既然得知 PD集群 Leader被切换也算是稍有眉目了。

2.4 查看 PD 日志

旧 Leader 节点的日志:

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-8

leader failed to send out heartbeat on time; took too long, leader is overloaded likely from slow disk。
Leader 节点没有在预定的时间内发送出心跳信息,发送心跳信息所需的时间过长,可能是因为 Leader 节点的磁盘响应速度过慢,导致了过载。

pd leader election,紧接着 PD 集群开始的 Leader 的选举。

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-9

新 Leader 节点的日志:

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-10

同样,我们看到了 send keepalive message fail, store maybe disconnected ,PD 给 Store 发送信息失败,认为其有可能失去连接。

除此之外,在它 "晋升" 为 Leader 后 对某个 Store 添加了 evict-leader-scheduler 的任务。

2.5 及时解决

  • 既然是由于 evict-leader-scheduler 造成的,我们只需要执行 scheduler remove evict-leader-scheduler 即可。

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-11

  • 在有资源的前提下,考虑将 TiDB 和 PD 分开部署;资源有限的前提下,将 TiDB 和 PD 部署到同一台机器的不同磁盘上,降低风险。

  • 当前版本为 V5.4.3,后续也考虑将集群进行升级,规避一些未知风险。

三、总结

根本原因是系统级别的磁盘 Kernel 故障,带来了一系列影响。首先是 PD 集群的 Leader 角色磁盘负载升高,导致 Leader 进行切换,之后对某个 Store 节点上的 Region 的 Leader 角色进行了驱逐,产生告警。

首先,我们要肯定 PD 切换 Leader 这一操作是十分正确的。但对于为某个 TiKV 节点添加 evict-leader-scheduler 这一操作还是有疑惑的,有可能是因为 V5.2.0 起,TiKV 引入了慢节点检测机制导致的,导致我们的 PD 集群的 Leader 切换后,觉得某个 TiKV 慢,从而进行了 Region 的 leader 驱逐。并且我们针对 leader 被驱逐的 TiKV 做了检测,并未发现存在硬件问题。后续也期待官方在 TiKV 慢节点检测这方面的优化。

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐-12

除此之外,在整个切换过程中,业务感知良好,没有产生很大影响,也验证了 TiDB 高可用性的强大,手动点赞。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论