Leader 选举过程 一个节点有3中状态Raft算法动态演示: http://thesecretlivesofdata.com/raft/
三种状态:Follower(从节点)、Candidate(竞选状态)、Leader(主节点)
所有的数据变更操作(写操作),将由主节点完成
客户端发起写请求,请求先到达主节点 任何数据的变更,将写入节点的日志中 当前的日志是未提交状态,所以不会修改节点的值 Leader节点向所有Follower节点同步日志 主节点等待过半节点写入日志时,主节点提交,节点数据变更。并给客户端响应成功 然后Leader节点通知Follower节点进行数据提交。此时,集群中的节点数据是一致的 Leader选举过程详解 Raft算法有两个超时时间的设置,来控制选举election timeout (选举超时时间): The election timeout is the amount of time a follower waits until becoming a candidate, The election timeout is randomized to be between 150ms and 300ms
选举超时时间是follower在成为 candidate 之前等待的时间,选举超时时间是150ms到300ms之间的一个随机值
因为选举超时时间 是150 ~ 300 的随机值,所以总有一个follower节点先走完,变成一个candidate节点
当两个节点同时变为 candedate 时,会出现分裂投票
A和D的选举超时时间同时到达,同时变为candidate状态。A和D的Term+1,各自投自己一票。 B投给A,C投给D,则A和D各的2票,票据未过半,所以将开始新一轮的投票。B和C收到投票后,将重置时间轮。
D的时间轮先到,则D将首先发起新一轮的投票,D的Term+1变为5,D将成为Leader。
结合动画Raft演示: http://thesecretlivesofdata.com/raft/ ,可了解得更清楚。



