图解Raft之领导者选举

图解Raft领导者选举,这里通过五张图来解答Raft选举的全过程;

图解Raft之领导者选举_第1张图片

  Raft集群各个节点之间是通过RPC通讯传递消息的,每个节点都包含一个RPC服务端与客户端,初始时启动RPC服务端、状态设置为Follower、启动选举定时器,每个Raft节点的选举定时器超时时间都在100-500毫秒之间且并不一致;

图解Raft之领导者选举_第2张图片

  Raft节点启动后在一个选举定时器周期内未收到心跳和投票请求,则状态转为候选者candidate状态、term自增、向Raft集群中所有节点发送投票请求并且重置选举定时器;

图解Raft之领导者选举_第3张图片

  Raft节点收到投票后对比当前term、votedFor、日志项信息判断觉得是否接受该投票请求,在此过程中如节点收到其他领导者的附加日志信息PRC请求如该term比自己大则接受改请求转为Follower状态,否则拒绝并保持候选人状态;

图解Raft之领导者选举_第4张图片

  当前由于每次选举超时发起投票请求都会增加term,而term又会导致Raft节点收到影响,所以出现网络分区后term增加到足够大后重新加入Raft集群时会导致集群可用性受到影响;

图解Raft之领导者选举_第5张图片

  为了解决网络分区可能造成的影响这时在正式发起投票请求前引入了一个用于确认是否能成为Leader的PrevoteRPc请求;

参考资料:
http://ramcloud.stanford.edu/raft.pdf

文章首发地址:Solinx
http://www.solinx.co/archives/1209

你可能感兴趣的:(图解Raft之领导者选举)