raft
参考动画 http://thesecretlivesofdata.com/raft/
节点类型:
1.leader 领导者
2.follower 跟随者
3.candidate 候选人
选择阶段:leader election.
. 发生阶段可能是集群初始化启动或者发生网络分区跟leader失去联系,主要由两个超时参数来控制:
1) election timeout. follower变成candidate的超时时间,随机取值在150ms 和 300ms之间;
2)heartbeat timeout follower和leader之间同步Append Entries的超时时间,follower收到心跳后会重置election timeout
follower变为candidate后会启动一个新的term,并给自己投一票,然后发送邀票给其他follower. 如果其他follower还没有vote就会重置自己的election timeout,并选择是否投票给candidate,一旦获得一半以上的投票就会成为新的leader
日志复制阶段:Log Replication.
当客户端发送一个请求会在leader会在下一次heartbeat发送Append Entries message给follower,需要在大多数的follower上acknowledge 成功才会commit,然后在下一次heartbeat通知follower提交,从而集群达到一致状态.如果没有在大多数node上写成功,将会是uncommited状态.
网络隔离
当发生网络隔离时,老的leader还会继续领导folower. 如果新集群可以满足选举新leader(能够得到原集群的总数的一半以上),则新领导剩余的follower.当客户端提交请求时,老Leader不能在大多数的node上写成功处于uncommited阶段,当网络恢复后,老leader组成的集群的未提交的消息会被丢弃,并加入新leader,集群状态达到了一致.

浙公网安备 33010602011771号