如何理解Raft算法的实现原理?

(一)Raft的基本流程过程:

首先在整个过程中只有三种状态:

  • 首先是Leader
  • Follower (一开始都是这种状态)
  • Candidate

然后进行开始整个流程:
如何理解Raft算法的实现原理?_第1张图片

  1. start up:起始状态,节点刚启动的时候自动进入的是follower状态。 times out, starts election:follower在启动之后,将开启一个选举超时的定时器,当这个定时器到期时,将切换到candidate状态发起选举。
  2. times out, starts election:follower在启动之后,将开启一个选举超时的定时器,当这个定时器到期时,将切换到candidate状态发起选举。
  3. times out, new election:进入candidate 状态之后就开始进行选举,但是如果在下一次选举超时到来之前,都还没有选出一个新的leade,那么还会保持在candidate状态重新开始一次新的选举。
  4. receives votes from majority of servers:当candidate状态的节点,收到了超过半数的节点选票,那么将切换状态成为新的leader。
  5. discovers current leader or new term:candidate状态的节点,如果收到了来自leader的消息,或者更高任期号的消息,都表示已经有leader了,将切换回到follower状态。
  6. discovers server with higher term:leader状态下如果收到来自更高任期号的消息,将切换到follower状态。这种情况大多数发生在有网络分区的状态下。

Leader的选举:

  • 在进行Leader选举的时候Raft使用的是心跳机制来触发leader选举的,在节点刚开始启动时,初始状态是follower状态。
  • 一个follower状态的节点,只要一直收到来自leader或者candidate的正确RPC消息的话,将一直保持在follower状态,而且每一个任期的Leader都会定期发送周期性的心跳请求,如果在这个周期内没有收到Leader的心跳就说明Leader已经宕机了,就会发起新一轮的Leader选举,每次发起新一轮的选举的时候都会把leader的term【任期】进行加一,
  • 如果当一个candidate节点在选举超时到来的时候,既没有赢得也没有输掉这次选举
    ,说明此时有两个candidate打成平手,需要再次进行发起选举,理论上会一直进行进行下去,但是这里进行优化点【选举超时时间都是随机决定的,一般在150~300毫秒之间】,意思就是谁的选举任期时间短就是谁当老大

(二)日志的复制过程:

日志的组成:
如何理解Raft算法的实现原理?_第2张图片

(三)新的Leader是如何和Follower进行同步数据的?

如何理解Raft算法的实现原理?_第3张图片
如何理解Raft算法的实现原理?_第4张图片

  • 其实总结就是:Leader节点的任期是6,日志索引现在是10,然后对应一个二元组,然后其他的Follower也是一样,都有类似这样的一个二元组
  • 如果Leader的任期和Follower的任期相同的话,日志的索引位置比Leader的位置大的话,会进行截取相同的部分,后面的数据都会被抛弃
  • 如果Leader的任期和Follower的任期不同,日志索引位置不同的话,Follower会给Leader发送自己最后的日志索引位置,leader节点在收到该拒绝消息之后,将从Follower的下一个日志索引位置开始进行同步日志

你可能感兴趣的:(【分布式算法】,raft,raft算法)