raftlog同步延迟告警TiKV_raft_log_lag

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
v5.4.0

【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
1.由于历史原因和业务需要,部署的是v5.4.0新集群,集群尚未接入业务,但是出现TiKV_raft_log_lag延迟告警。
该告警含义 TiKV_raft_log_lag

  • 报警规则:histogram_quantile(0.99, sum(rate(tikv_raftstore_log_lag_bucket[1m])) by (le, instance)) > 5000
  • 规则描述:这个值偏大,表明 Follower 已经远远落后于 Leader,Raft 没法正常同步了。可能的原因是 Follower 所在的 TiKV 卡住或者挂掉了。

2.集群没有写入流量,tpd/tidb/tikv等各个节点都是正常的状态,没有挂掉的节点,集群无异常节点。
看PD面板集群是有30个region,这30个region都是空region。

3.TiKV_raft_log_lag 有一个tikv节点较高,可能的原因是 Follower 所在的这个 TiKV 卡住了。

4.排查节点日志
1)查看该节点日志,无ERRO异常信息,但是一直在刷“try to transfer leader”。
[2023/12/19 10:23:31.445 +08:00] [INFO] [pd.rs:1273] [“try to transfer leader”] [to_peer=“id: 633 store_id: 1 role: IncomingVoter”] [from_peer=“id: 558 store_id: 397 role: DemotingVoter”] [region_id=557]
这里推测可能是因为 raft 进程可能有问题,导致无法正常切换Leader。
store_id: 397 就是出现告警的tikv节点。
2)排查region 577、633 、558的情况,无异常信息。
3)对集群进行pd-ctl region check 没有异常或损坏的region,只有出现的30个空region。
4)查看问题时段,pd确实有生成打散region的operator调度策略,tikv执行add 3个新learner,然后把三个新learner转到voter,3个老voter转成learner,然后把leader从397转到633卡住了。pd和tikv的GRPC交互对接是正常的,只是tikv的调度执行一直无法推进,在重复try。
5)选主,卡在中间状态

5.尝试恢复
1)由于集群的30个region全部都是空region,尝试调大merge-schedule-limit、max-merge-region-keys、max-merge-region-size处理,效果是没有优化,问题仍然在。
2)重启节点,问题恢复
重启后,这个故障点store_id 397上的peer_ID 558已经去掉了。

6.重启后告警也随之消失,监控曲线恢复正常。

7.社区里之前有过一个类似的问题,但是没有提出解决办法:TiKV节点出现大量的TiKV_raft_log_lag的问题
这个问题和官方的一个bugfix现象很像:

8.结论:这个是 raft log 从 leader 同步到 follow 出现 raft client线程卡主的的问题,导致阻塞了PD的调度任务he raft GC,可以暂时通过重启节点解决了问题。

但伴随着运行风险点,仍需要解决,各位大佬有没有遇到过类似的问题,有无其他处理思路?

这个问题看上去在 7.1 及后面的版本已经修复了,是不是目前升级方案不太符合你们。所以想看看有没有其他方案?

是的,如果升级到更高的版本,相对来说tikv的稳定性和性能都会有比较大的提升。
不过目前业务上不适合升级的操作,想看看导致这个问题的根因以及暂时idea规避方式。

那就版主交流会上来讨论讨论吧

通过往集群写入大量数据,发现全部tikv节点不同程度出现raft log延迟,根据pd的调度operator确认到是无法往其中某个store正常调度,且还有一些 DiskAlmostFull 的 INFO 日志。
最终确认到是少挂了个nvme 数据盘,导致该节点挂载在根目录,出现单节点的性能卡点,导致了上面的问题。一开始以为是别的因素,确实没想到是没挂盘的原因。

找到原因就好了

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。