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,在各節點的固定超時時間上某個范圍內的隨機數)。如下圖:

                 

 

      第二步:開始選舉自己:

        節點身份切換為 candidate,並將term加上1。然后它會向集群其它節點發送“請給自己投票”的消息(RequestVote RPC)。

                      

 

      第三步:選擇結果:

        candidate會有3種結果,分別對應上面狀態圖的3條線。

        1. 選舉成功(Step: receives votes from majority of servers):

        

 

 

           

        2、選舉失敗(Step: discovers current leader or new term):

          Candidate 在等待投票回復的時候,收到其它自稱是 leader 節點發送的心跳包,且term 不小於 candidate 當前的 term,那么 candidate 會承認這個 leader,並將身份切回 follower。term 比自己小,candidate 會拒絕這次請求並保持選舉狀態

          

 

 

                 

        3、選舉超時(Step: times out, new election):

          多個 follower 同時成為 candidate,選票是可能被瓜分的,如果沒有任何一個 candidate 能得到大多數節點的支持,那么每一個 candidate 都會超時。這里的“特殊處理”指的就是前文所述的隨機化選舉超時時間。此時 candidate 需要增加自己的 term,然后發起新一輪選舉。

 

 

      第四步、老leader更換:

        即上面狀態圖的:discovers server with higher term。一段時間后老 leader 恢復了(如:網絡故障、或者機器宕機恢復),收到了來自新leader 的心跳包,發現心跳中的 term 大於自己的 term,此時該節點會立刻切換為 follower 並跟隨的新 leader。

 

 

 

 

       

        

 

 

 

 

 

 

    

      

      

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM