我正在学习Raft算法。我的实现满足以下情况:
- 1-领导者-1追随者的局面成立
- 关闭领导
- 追随者并没有心跳,所以成为了一个候选人
- 候选人不断向对等方发送VoteRequest(已经关闭(,但失败
- 选举暂停,没有选出任何领导人
- 候选人开始另一个候选人会话,实际重复4-6
我不知道如何在Raft论文中解决这种情况(也许我错过了什么(。
在我看来,在开始新的选举之前,我可以在第五步检查已授予的选票。由于候选人在选举会议开始时投票给自己,因此在这次检查中,候选人将成为新的领导人。
但我担心这个解决方案会破坏Raft,尤其是当所有节点都是候选节点时,会破坏初始过程。
另一个想法是将RequestVote请求的网络错误视为"已授予投票"。(仍然担心它是否损坏了什么(
我知道这种情况可能是由"只有2个节点"引起的。然而,即使有3个节点(因此建立了1个领导者2个追随者的情况(,那么如果2个领导者因此被关闭,那么剩余的追随者仍然可能表现为这样。
您所描述的问题实际上是一种合法的情况。
如果大多数节点不存在,Raft将不起作用,除了让大多数节点恢复功能外,没有办法避免这种情况。