图解分布式一致性算法
这个选举周期会一直持续直到某个 follower 停止心跳消息接收变成 candidate。 我们停掉 leader 再来看一下重新选举的情况。 此时 节点 B 已经停止,所以 节点A 和节点C 都收不到心跳消息。咱们前面说收不到心跳消息的话,节点的状态会从 Follower 变成 Candidate,所以A 和C 在各自的选举超时时间设置内会改变状态, 此时,节点 A 和 节点 C 都在等待,由于节点C先超时,所以会先开始一轮选举。和上面的选举过程一样,会先新增Term,给自己投一票,并发送投票请求给其他节点。 在收到节点A的投票后,节点C现在升级为 term 2的 leader。 咱们前面总在说的「大多数节点投票」(a majority of votes)。这个能保证能在一个投票周期内,只会产生一个 leader。 假设两个节点同时从 Follower 状态变成了 Candidate,这个时候两者都会升级 Term,并请求其他节点不给自己投票。 这个时候两者的 Term 其实是相同的,在同一个 Term 内 其他节点只会投出一票,所以每个 Candidate 都只会收到一个节点的投票。 因为没有超过「大多数」,所以都会不能成为 leader。这些节点就会等待新一轮的选举,此时节点D先开始发起投票,并收到了大多数的投票,所以在Term 5 最终成为 leader。 四、 Log Replication 在选举出一个leader之后,就需要复制所有的变更信息到系统里的所有节点。这些是通过和心跳检测相同的的Append Entries message 来完成的。 (编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |