如果服务器竞选失败,这个服务器的Term还需要增加吗
我看动画的实现是需要增加的。如果是增加的话,我对于有一种情况有疑问:
五个节点A,B,C,D,E,一开始A是leader,term=1。如果ABC和DE产生网络分区,D会一直开始一直竞选,当网络分区结束,D.term>1,,怎么拒绝D成为Leader,D的term比A大,并且按照论文上的定义,D上的日志也比A的新
这问题怎么解释,或者是我对raft的理解出现问题了?
答案:
这个问题不成立的一点:并且按照论文上的定义,D上的日志也比A的新
D一直在竞选,并不能主动将日志存下来,所以D的日志没有A新。
正确的过程是:A发现自己的Term比D小,然后退位。ABC发起竞选,新的Leader在他们之中产生。
还有一个之前我个人的疑问:A退位后,ABC如何将Term超过D成为Leader(D在分区时Term可能增加很多)?
其实RequestVote和AppendEntries中,如果发现更大的Term,直接将自己的Term赋值为那个较大的Term
我理解在网络划分时,D虽然成了leader。但是它的票数是只有2票的。没有超过一半。所以是一个假的leader。A是有3票的。超过一半