raft 另外一种情况:
1. 初始状态下,A 是 leader,其他节点是 Follower。
2. A 失效后,B 和 C 的选举超时时间到期,转为 Candidate。
3. B 和 C 分别发起选举,向其他节点发送 RequestVote RPC,同时 B 和 C 的随机数分别为 900, 1000。
4. 假设 B 和 C 的日志 offset 相同,分别获得了 D 和 E 的投票,那么这里可以考虑使用一种启发式想法,我们认为 A 节点没办法投票,那么 B 和 C 都认为在现有的 raft 算法逻辑下,都不会成为主节点,由于 C 节点 offset 大,C 节点不会发起特定节点的重新投票。而 B 节点会放弃这一轮的 candidate 身份,同时告诉投给它的 B 节点和 D 节点,让这两个节点转投 C 节点。
5. C 节点获取了 4 票,超过多数,完成了选举过程。