我在木筏上遇到了问题。
在论文《寻找一种可理解的共识算法(扩展版)》中写道:
要开始选举,追随者会增加其当前的
任期并过渡到候选状态。 (第 5.2 节)
它还说:
AppendEntries RPC 和 RequestVot RPC 中的接收者应为“Reply false if args.term
所以,让我们想象一下这个场景,raft系统中有5台机器,现在机器0是leader,机器1到4是follower,现在是term 1。突然,机器1断开网络,然后机器1超时,并且它开始领导者选举,它发送RequestVot RPC,肯定会失败(网络断开)。然后它将开始新的领导者选举......等等。机器1的项是增加了很多倍。也许增加到10。当机器1'Term增加到10时,它连接了网络。领导者(机器0)向机器1发送心跳,机器1将拒绝该心跳(机器0的期限小于机器1),现在机器1将无法重新加入系统。
这里要记住的重要一点是,当一个节点收到一个更大的术语时,它会always更新其本地术语。因此,由于机器 1 将拒绝领导者的请求,领导者最终将了解更高的任期 (10) 并下台,然后将选举一个任期 >10 的新节点。
显然,这是低效的,但这就是为什么大多数现实世界的实现使用所谓的“预投票”协议,检查以确保节点can在转变为候选人角色并增加任期之前赢得选举。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)