raft 协议中, 候选人角色能参与投票吗

发布于: 2020 年 07 月 18 日
raft协议中, 候选人角色能参与投票吗

来源知乎提问

raft协议中, 候选人角色能参与投票吗?

如果不能,其他不合适节点成为候选人,也无法获取成为leader。

此时假如多个候选人,每次选举都不成功,如何解决?

我在这里补充一下;

假如5个节点 ,crash2个阶段,其中 只有一个节点根据leader选举规则,成为新的leader,

但是因为根据选举超时协议,[T,2T]时间内,第一个出现,第二个候选人出现

Raft uses randomized election timeouts to ensure that

split votes are rare and that they are resolved quickly

此时,最能成为leader节点,没有成为候选人,怎么办?

验证

  • 假设5个节点,刚启动,然后crash2个节点,其中s4第一成为候选人,S5马上成为第二个

S4,S5个投票自己一次。

只有一个

S4,S5最多获取2票,失败

  • s4和S5开启第二轮

S4 和S5 各自term+1,然后各自投自己一票

S4 获取2票,但是不够三票,最后失败,继续开启新的一轮

S5此时只能获取一票,开启新的一轮

  • 开启term为5的选举

原来在这里 S5 当前term=4,发现更高的term=5,变为follower状态

总结

raft协议中, 候选人角色能参与投票吗?

  1. 同一个term,candidate首先投自己一票,因此不在投票给其他人。

raft中,候选人可以投票,但是只能投给自己,如果5个节点,全部都是候选人,这次投票选举失败。

其他不合适节点成为候选人,也无法获取成为leader。

  1. 需要多消耗150–300ms 进行下一个term投票,下个term依然遇到这个情况,

假如多个候选人,每次选举都不成功,如何解决?

  1. 通过心跳,如果候选人遇到更高的term后续人为变为follower。

这样此时多个候选人问题变成一个候选人

无论出于什么角色,如果发现更好的term,会更新自己term和角色

最重要一个图

s5和S3变得一模一样 都是follower

继续测试

  • 5个节点,crash 2个节点,此时剩余节点都是候选人

  • term =11

日志

  • 不一致 重启2个节点

  • 不满足大多数,就是无限投票。

发布于: 2020 年 07 月 18 日 阅读数: 11
用户头像

王传义

关注

希望每一位来访的朋友都能有所收获! 2017.11.30 加入

如果有疑问 wang_cyi@163.com 联系

评论

发布
暂无评论
raft协议中, 候选人角色能参与投票吗