算法【Raft 投票】

发布时间 2023-10-31 17:07:10作者: 木乃伊人

一、简介

      Raft算法属于典型的多数派选主算法,谁获得的票数最多,谁就可以成为主节点。

二、说明

        Raft算法选主中集群各个节点的角色有3种:

       Leader:主节点,同一时刻只有一个Leader节点,负责整个集群的节点间的协调和管理。

       Candidate: 候选节点,只有角色为候选者的节点才可以被选为新的Leader,每个节点               都有可以成为候选者。

       Follower:Leader的跟随者,这个角色的时候不可以发起选主。      

      

三、选举流程

      

       

  1. 初始化时,各个节点均为Follower状态;
  2. 开始选主时,所有节点的Follower状态转为Candidate状态,并向其他节点发送选主请求;
  3. 其他节点根据收到的选主请求的先后顺序,进行回复是否同意其成为主节点;每个节点只能投一张票;
  4. 发起选主的节点如果得到一半以上的投票,则会成为主节点,状态变为Leader,其他几点则会由Candidate转为Follower状态,此时Leader和Follower将保持心跳检测;
  5. 如果Leader节点的任期到了,Leader则会降为Follower,进行新一轮选主。

四、触发条件

       1、Leader出现故障;

       2、Leader任期满了(节点有一定的任期时间)

五、优缺点

      【优点】:选举速度快、算法复杂度低、易于实现的优点

      【缺点】:1、集群中各个节点均需要相互通信,且需要半数以上的节点同意才能成为主,因此通信量比较大。

                        2、Raft的稳定性要比Bully算法好,是因为它在新节点加入或者故障节点恢复的时候,并不一定像Bully那样可能频繁切主,除非投票数过半才会真的切主。