raft协议

Posted 修心而结网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了raft协议相关的知识,希望对你有一定的参考价值。

what:

  raft是分布式的一致性协议(Consensus),其相对pasox更加简单。用来保障servers上副本一致性的一种算法。

  一致性协议是为了确保容错性,也就是即使系统中有一两个服务器当机,也不会影响其处理过程

 

how:

  确保一致性的核心思想:

    采用选举机制,参选者需要说服大多数选民(服务器)投票给他,一旦选定(leader)后,其他的server就是(follower)跟随leader操作,从而确保分布式的一致性。

 

  选leader:

    参考如下图(也是follower状态转化图):

      

 

       Raft 的选主基于一种“心跳机制”。leader 会周期性的向所有节点发送心跳包来维持自己的权威。

      第一步:准备选举自己     

        刚启动时,所以的server节点都是follower身份(Step: starts up)。没有leader时,某个server节点和leader的心跳先超时,它就会从follower变为candidate,而发起选举(Step: times out, starts election)。(注意:为了各节点不同时变为candidate,在各节点的固定超时时间上某个范围内的随机数)。如下图:

      

 

         五节点都是follower身份,term为1,且选举超时定时器不同

 

      第二步:开始选举自己:

        节点身份切换为 candidate,并将term加上1。然后它会向集群其它节点发送“请给自己投票”的消息(RequestVote RPC)。

          

 

            S1 率先超时,变为 candidate,term + 1,并向其它节点发出拉票请求

 

      第三步:选择结果:

        candidate会有3种结果,分别对应上面状态图的3条线。

        1. 选举成功(Step: receives votes from majority of servers):

                             

 

               S1获得大部分选票。                                                       S1变为leader,开始发送心跳维持权威

 

        2、选举失败(Step: discovers current leader or new term):

          Candidate 在等待投票回复的时候,收到其它自称是 leader 节点发送的心跳包,且term 不小于 candidate 当前的 term,那么 candidate 会承认这个 leader,并将身份切回 follower。term 比自己小,candidate 会拒绝这次请求并保持选举状态

                                                         

 

             S4、S2 依次开始选举               S4 成为 leader;S2 在收到 S4 的心跳包,且term不小于自己的,则切为 follower 跟随S4

                 

        3、选举超时(Step: times out, new election):

          多个 follower 同时成为 candidate,选票是可能被瓜分的,如果没有任何一个 candidate 能得到大多数节点的支持,那么每一个 candidate 都会超时。这里的“特殊处理”指的就是前文所述的随机化选举超时时间。此时 candidate 需要增加自己的 term,然后发起新一轮选举。

                               

 

           S1~S5都在参与选举                  没有任何节点愿意给他人投票          没有随机化超时时间,所有节点将会继续同时发起选举……

 

      第四步、老leader更换:

        即上面状态图的:discovers server with higher term。一段时间后老 leader 恢复了(如:网络故障、或者机器宕机恢复),收到了来自新leader 的心跳包,发现心跳中的 term 大于自己的 term,此时该节点会立刻切换为 follower 并跟随的新 leader。

                               

              S4 作为 term=2 的 leader                               S4 宕机,S5 即将率先超时              S5 当选 term=3 的 leader

 

                    

 

          S4 宕机恢复后收到了来自 S5 的 term3 心跳                S4 立刻变为 S5 的 follower 

 

 

 

 

 

 

    

      

      

  

  

以上是关于raft协议的主要内容,如果未能解决你的问题,请参考以下文章

raft 和 zab协议

Raft 协议学习笔记

由浅入深理解Raft协议

Raft协议处理各种failover情况

Raft 协议

Raft协议备注