美文网首页
raft zab协议分析

raft zab协议分析

作者: tony_0c73 | 来源:发表于2018-05-31 15:17 被阅读0次

raft

在Raft中,任何时候一个服务器可以扮演下面角色之一:

  1. Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader.
  2. Follower: 类似选民,完全被动
  3. Candidate候选人: 类似Proposer律师,可以被选为一个新的领导人。

raft 分为2个阶段 选举和恢复

选举

  1. 每个服务器都可以成为Candidate,向其他follower发送请求,要求选择我
  2. 其他服务器同意,发送ok. 注意如果在这个过程中,有一个Follower当机,没有收到请求选举的要求,因此候选者可以自己选自己,只要达到N/2 + 1 的大多数票,候选人还是可以成为Leader的

恢复

  1. 新leader向follower发出指令,进行操作,比如日志复制
  2. leader和follower之间进行心跳联系,如果有leader奔溃后,重新选举
image.png

Splite Vote是因为如果同时有两个候选人向大家邀票,这时通过类似加时赛来解决,两个候选者在一段timeout比如300ms互相不服气的等待以后,因为双方得到的票数是一样的,一半对一半,那么在300ms以后,再由这两个候选者发出邀票,这时同时的概率大大降低,那么首先发出邀票的的候选者得到了大多数同意,成为领导者Leader,而另外一个候选者后来发出邀票时,那些Follower选民已经投票给第一个候选者,不能再投票给它,它就成为落选者了,最后这个落选者也成为普通Follower一员了。

Term
  在Raft中使用了一个可以理解为周期(第几届、任期)的概念,用Term作为一个周期,每个Term都是一个连续递增的编号,每一轮选举都是一个Term周期,在一个Term中只能产生一个Leader;先简单描述下Term的变化流程: Raft开始时所有Follower的Term为1,其中一个Follower逻辑时钟到期后转换为Candidate,Term加1这是Term为2(任期),然后开始选举,这时候有几种情况会使Term发生改变:
  1:如果当前Term为2的任期内没有选举出Leader或出现异常,则Term递增,开始新一任期选举
  2:当这轮Term为2的周期选举出Leader后,过后Leader宕掉了,然后其他Follower转为Candidate,Term递增,开始新一任期选举
  3:当Leader或Candidate发现自己的Term比别的Follower小时Leader或Candidate将转为Follower,Term递增
  4:当Follower的Term比别的Term小时Follower也将更新Term保持与其他Follower一致;
  可以说每次Term的递增都将发生新一轮的选举,Raft保证一个Term只有一个Leader,在Raft正常运转中所有的节点的Term都是一致的,如果节点不发生故障一个Term(任期)会一直保持下去,当某节点收到的请求中Term比当前Term小时则拒绝该请求;

3、选举(Election)
  Raft的选举由定时器来触发,每个节点的选举定时器时间都是不一样的,开始时状态都为Follower某个节点定时器触发选举后Term递增,状态由Follower转为Candidate,向其他节点发起RequestVote RPC请求,这时候有三种可能的情况发生:
  1:该RequestVote请求接收到n/2+1(过半数)个节点的投票,从Candidate转为Leader,向其他节点发送heartBeat以保持Leader的正常运转
  2:在此期间如果收到其他节点发送过来的AppendEntries RPC请求,如该节点的Term大则当前节点转为Follower,否则保持Candidate拒绝该请求
  3:Election timeout发生则Term递增,重新发起选举
  在一个Term期间每个节点只能投票一次,所以当有多个Candidate存在时就会出现每个Candidate发起的选举都存在接收到的投票数都不过半的问题,这时每个Candidate都将Term递增、重启定时器并重新发起选举,由于每个节点中定时器的时间都是随机的,所以就不会多次存在有多个Candidate同时发起投票的问题。

什么时候选举

1:Raft初次启动,不存在Leader,发起选举;
2:Leader宕机或Follower没有接收到Leader的heartBeat,

  1. 发生election timeout从而发起选举;

zab

相关文章

  • raft zab协议分析

    raft 在Raft中,任何时候一个服务器可以扮演下面角色之一: Leader: 处理所有客户端交互,日志复制等,...

  • raft 和 zab协议

    raft 是一个 副本一致性协议1, 我们可以类比的是 zookeper 的副本一致性机制2, kafka 的 I...

  • Raft PK Zab协议

    共同点 都是基于 状态机+ 操作日志 +快照的机制实现存储 都是Master负责写,而且写的过程都类似,都是两阶段...

  • zookeeper学习

    zookeeper重新梳理学习下以下这些部分: 1、raft算法和paxos算法 2、zab协议 3、zookee...

  • Zookeeper——一致性协议:Zab协议

    什么是Zab协议 Zab 协议的作用 Zab 协议原理 Zab 协议核心 Zab 协议内容 消息广播 崩溃恢复 如...

  • Zookeeper ZAB协议

    什么是Zab协议 Zab 协议的作用 Zab 协议原理 Zab 协议核心 Zab 协议内容 原子广播 崩溃恢复 如...

  • 酋长的故事(分布式一致性)

    关键协议:Paxos,2PC,3PC,NWR,Gossip,Raft,Lease,ZAB 看到我的毁灭之锤到货突发...

  • 面试官问:ZooKeeper 一致性协议 ZAB 原理

    一致性协议有很多种,比如 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是...

  • ZooKeeper 一致性协议 ZAB 原理分析!

    一致性协议有很多种,比如 Paxos,Raft,2PC,3PC等等,在这讲一种协议,ZAB 协议,该协议应该是所有...

  • 面试官问:ZooKeeper 一致性协议 ZAB 原理

    一致性协议有很多种,比如 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是...

网友评论

      本文标题:raft zab协议分析

      本文链接:https://www.haomeiwen.com/subject/imvqsftx.html