最近在看 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 是怎么避免的?
1
ZingLix 2021-09-18 17:51:20 +08:00 1
对于任何节点,收到 term 比自己大的请求或回复,都需要将 term 更新并转为 Follower
m1 能成为 term 1 的 leader 那么说明他发出过 RequestVote 请求(term=1)。 另两台能够回复同意说明收到该请求,那么这两台收到请求时发现 term 比自己大,那么 term 也会更新为 1,所以其他机器不会 term 仍未 0 |
2
JasonLaw OP |