关于 Raft Consensus Algorithm 的疑问

2021-09-18 17:37:47 +08:00
 JasonLaw

最近在看 Raft Consensus Algorithm 相关资料,在Distributed Consensus with Raft - CodeConf 2016 - YouTube中,他说“At most one winner per term”。但是怎么避免下面的情况发生呢?

假设一共有 3 台机器,一开始大家都是 Follower,m1 得到大多数投票成为 term 1 的 Leader,但是其它机器还处于 term 0 。接下来{m1}和{m2, m3}隔离了,m2 得到大多数投票又成为 term 1 的 Leader 。会发生这种情况吗?如果不会的话。Raft Consensus Algorithm 是怎么避免的?

相关资料

1205 次点击
所在节点    程序员
3 条回复
ZingLix
2021-09-18 17:51:20 +08:00
对于任何节点,收到 term 比自己大的请求或回复,都需要将 term 更新并转为 Follower

m1 能成为 term 1 的 leader 那么说明他发出过 RequestVote 请求(term=1)。

另两台能够回复同意说明收到该请求,那么这两台收到请求时发现 term 比自己大,那么 term 也会更新为 1,所以其他机器不会 term 仍未 0
JasonLaw
2021-09-18 18:04:06 +08:00
@ZingLix #1 谢谢

怪不得视频中其它机器收到 S2 的 RequestVote 请求(term=2)后,term 也会变成 2 。

<amp-youtube data-videoid="RHDP_KCrjUc" layout="responsive" width="480" height="270"></amp-youtube>&t=669s
JasonLaw
2021-09-20 17:14:05 +08:00
@JasonLaw #2 <amp-youtube data-videoid="4r8Mz3MMivY" layout="responsive" width="480" height="270"></amp-youtube>&t=655s 也解答了我的疑问

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802818

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX