how raft follower rejoin after network disconnected?

谁说我不能喝 提交于 2020-07-08 19:46:17

问题


I have a problem on raft.

In paper "In Search of an Understandable Consensus Algorithm(Extended Version)" it says:

To begin an election, a follower increments its current term and transitions to candidate state. (in section 5.2)

and it also says:

reciever should be "Reply false if args.term < currentTerm" in AppendEntries RPC and RequestVot RPC

so, let's think this scene, there are 5 machine in raft system, and now machine 0 is leader, machine 1 to 4 is follower, now is term 1. Suddenly, machine 1 is disconnected network, and then machine 1 is timeout, and it begin leader election, it send RequestVot RPC, sure it will be failed(network is disconnected). and then it will begin new leader election.......and so on. machine 1's term is increasement many times. Maybe increase to 10. when machine 1'Term is increased to 10, it connected network. and leader(machine 0) send heartbeat to machine 1, and machine 1 will REJECT the heartbeat(machine 0'term is less than machine 1), and now, machine 1 will not able to rejoin the system.


回答1:


The important thing to remember here is when a node receives a greater term it always updates its local term. So, since machine 1 will reject the leader's request, the leader will ultimately learn about the higher term (10) and step down, then a new node will be elected for term >10.

Obviously this is inefficient, but it's why most real world implementations use the so called "pre-vote" protocol, checking to ensure a node can win an election before it transitions to the candidate role and increments the term.



来源:https://stackoverflow.com/questions/47568168/how-raft-follower-rejoin-after-network-disconnected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!