[英]how raft follower rejoin after network disconnected?
木筏上有问题。
在论文“寻求可理解的共识算法(扩展版本)”中,它说:
为了开始选举,跟随者增加其当前术语并转换到候选状态。 (见第5.2节)
它还说:
在AppendEntries RPC和RequestVot RPC中,reciever应为“如果args.term <currentTerm”,则返回false
那么,让我们想想这个场景,筏系统中有5台机器,现在机器0是领导者,机器1到4是跟随者,现在是第1项。突然,机器1断开网络,然后机器1超时,它开始领导选举,它发送RequestVot RPC,确定它将失败(网络断开)。 然后它将开始新的领导人选举......等等。 机器1的术语是多次增加。 也许增加到10.当机器1'Term增加到10时,它连接网络。 并且领导者(机器0)将心跳发送到机器1,机器1将拒绝心跳(机器0'小于机器1),现在,机器1将无法重新加入系统。
这里要记住的重要一点是,当节点收到更大的术语时,它总是更新其本地术语。 因此,由于机器1将拒绝领导者的请求,领导者将最终了解更高期限(10)和降级,然后将选择新节点> 10。
显然这是低效的,但这就是为什么大多数现实世界的实现使用所谓的“预投票”协议,检查以确保节点在转换到候选角色并增加该术语之前可以赢得选举。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.