-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
部分节点加入 raft group失败,一直preVote #12079
Comments
上述raft信息统计是直接调用每个pod的ip,通过/nacos/v2/core/cluster/node/self接口获取的节点信息,通过整合统计出来的raft任期信息;如图所示,pod故障重启后,高概率出现上述情况,部分pod无法加入某些raft组; |
之前排查过, 应该是jraft的bug, jraft的处理请求的线程池和处理leader心跳的线程池是同一个, 当线程池满了之后,leader的心跳任务可能会加入线程池失败,而失败后没有重试机制,导致心跳任务停止了; 此时丢失心跳的follower开始重新选主,但是旧leader认为还在任期,所以一直拒绝,就无限循环了。 这个问题大概率出现在某个follower和leader之间的网络出现问题,或者follower挂掉重启之后出现。 需要jraft尝试解决一下,比如心跳任务不能因为线程池加入失败而停止,或者拆分两个线程池来处理等等。 |
这个问题在jraft社区反馈过,现象就是异常发生时某个节点一直无法加入不断的在发送prevote请求,具体的现象和分析写在这个issue了 sofastack/sofa-jraft#1042 最后和jraft 作者探讨确定的原因就是,leader因为线程池的reject异常直接跳出了心跳append entry的逻辑且后续无重试,导致某个follow node无法加入,目前jraft社区还没有比较好的解法,大家可以提pr来解决这个问题 |
感谢回复,我们目前的处理方式只能是通过operator检测raft信息,通过主动删除pod的方式触发重新选主来修复,但是效果不太理想,期待社区大佬早日修复~ |
nacos版本:2.2.1、2.3.0、2.3.2
上述raft信息统计是直接调用每个pod的ip,通过/nacos/v2/core/cluster/node/self接口获取的节点信息,通过整合统计出来的raft任期信息;如图所示,pod故障重启后,高概率出现上述情况,部分pod无法加入某些raft组;
故障节点alipay-jraft.log相关日志如下:
另一个节点日志如下:
当前主节点日志如下:
The text was updated successfully, but these errors were encountered: