关于Raft
RAFT是实现分布式一致的协议
根据描述,一个节点有三种状态
- Follower steta ----跟随者模式
- the Candidate state ----候选者模式
- the Leader state ----领导者模式
所有节点起始于跟随者模式。
根据描述,当无法接收到领导者的消息时,会自动成为候选者,然后会向其他节点发送选票(就相当于,候选人需要其他人同意才能成为Leader,属于民主制。)其他节点会返回选票,多数票通过[1],则该候选者会成为Leader.
此过程成为领导人选举。所有的改变都要通过领导的决定。每个更改都添加到节点的日志中。
由于没有提交,其他节点的值没有改变。提交的时候,leader首先复制到跟随节点。而领导节点会在大部分节点完成的情况下写入数据。这是还会反向通知其他节点。现在集群就已经一致了。这个过程称为日志复制 [2].
领导者模式
领导者模式的领导不是一直固定的,选举具有时效性。选举超时时间是跟随者等待成为候选人的时间。时间随机[3]
当过期以后,会重新开始执行最开始的过程(跟随-候选-领导)
当跟随者收不到来自leader的消息,等待超时时间后,会进行选举,成功上位以后,会继续进行同步[4],要求多数票,保证每个任期只能选出一位leader。如果两个(或以上)节点同时成为候选节点,则可能发生分裂[5]投票。若发生了,所有的候选人会重新发起投票(发起的时间不一定一致)
日志复制
一旦我们选出了一个领导者,我们就需要将对系统的所有更改复制到所有节点上—通过使用和心跳的相同的附加条目消息(log)来完成的。
如果分为两部分,有两个领导,当合并时有两个Leader,会跟着最多的那个,其余的,不同步的会回滚,并跟随最终领导的脚步。
1 : 多数票值得多数是:可以自己设置(大多数经验是50%)
2:日志复制模式:
3:随机时间:150ms到300ms
4 :继续同步:即便是没有响应的节点,也会继续发送消息
5 :分裂投票:两个或以上的候选人会导致一种情况,即得票数相同的情况.
仅用于学习整理,如有建议与意见,欢迎提出,亦可发送至邮箱1715921342@qq.com进行联系