raft算法动画地址:http://thesecretlivesofdata.com/raft/
raft是一个共识算法
raft算法角色
follower
candidate
leader
每一个节点初始状态都是follower,每一次选举过程中每个节点只能给其他节点投一票
选举过程:所有follower节点随机生成一个150ms-300ms的时间进行倒计时,倒计时为0时未收到选举通知或者心跳,(倒计时为0之前收到选举通知或者心跳就会重置随机时间,重新倒计时)就会变成candidate状态,candidate状态节点会向其他节点发起投票,投票数达到majority,节点则会变成leader,并立即发送心跳给其他节点
共识算法中,节点的数目都是奇数个,保证不会出现平票的情况
数据同步过程(日志复制):数据发送到主节点,主节点记录到日志,主节点将心跳和数据一起发送给follower节点,follower节点收到信息,记录到日志并回复主节点,主节点才修改数据,修改数据后通过下一次心跳通知follower节点修改数据
网络分区情况下,分区后数据同步过程中获取不到majority回复的leader节点数据只会保存在日志中,节点数据不会修改,恢复网络分区后新的leader需要结合term值来决定,term的值大的作为leader,term值小的节点之前变更的数据要回滚,并同步最新leader的值
网友评论