图解分布式一致性算法RAFT

目录

 

概述

选举

脑裂

平票

数据一致


概述

在Raft中,每个结点会处于下面三种状态中的一种:
追随者:所有结点都以追随者的状态开始,无选举发生,一旦没有收到领导者的消息,就开始选举。
领导者:所有对系统的修改都会先经过领导者。每个修改都会写一条日志(log entry)。leader收到修改请求后的过程如下,这个过程叫做日志复制(Log Replication):
候选:会向其他结点“拉选票”,如果得到大部分的票则成为领导者。这个过程就叫做领导大选(Leader Election)。

选举

初始状态大家都一样,随机设置了一个超时时间,等待领导的一次召唤,一般叫一次心跳。

图解分布式一致性算法RAFT_第1张图片

没有等到心跳,最先超时的发起竞选,给自己投票并且给能联系到的发投票邀请。

图解分布式一致性算法RAFT_第2张图片

那三个没有领导,并且这个候选者能连接的点最多,于是同意了邀请,这样候选者得到4票,成功成为领导

图解分布式一致性算法RAFT_第3张图片

超时时间作废,开始追随领导,等待每一次心跳。那两个失联于是也开始竞选,不超过半数竞选失败。再次到同一网络时,发起发起竞选,发现了更多跟随者的领导就加入。

图解分布式一致性算法RAFT_第4张图片

脑裂

所有的个体分成两部分,有两个领导,就是脑裂。上述选举不会出现脑裂,但如果运行过程中产生连接中断则会脑裂

好多追随者拥护一个领导,突然有大量失联情况

图解分布式一致性算法RAFT_第5张图片

于是失联的又一次选举产生一个领导,所以同时存在两个领导,互相又不知道,用户访问时就会看到两种数据。

图解分布式一致性算法RAFT_第6张图片

解决办法:可以设置定时判断领导的连接数,连接数小于等于一半自动作废领导地位。再次到同一网络时,发起发起竞选,发现了更多跟随者的领导就加入。

平票

集群总数为偶数,恰好有两个点同时发起投票,恰好得到的票是相等,于是就不成功开始等待。虽然说时小概率事件等待事件也不长,但是心跳时间和超时时间都是以百毫秒计算,时间长了,系统运行会多浪费一些时间,raft随机超时时间会减少这种情况。同时,节点的数目都是奇数个也很大程度减少这种情况。

数据一致

众所周知,读一般多余写,主从结构中,写的操作在主,读在从,这就要同步数据了,主要通过复制日志同步。

图解分布式一致性算法RAFT_第7张图片

1.用户修改发送到主

2.领导修改日志发送到从

3.从根据日志做同样的事,复制日志,成功后反馈

4.主收到修改成功反馈给用户发送修改成功信息

5.主提交,并且告诉从也提交

你可能感兴趣的:(分布式)