文章目錄
- 1、什么是Raft
- 2、Raft相關概念
- 3、原理決議
- 3.1、日志復制
- 3.2、Leader選舉
- 3.3、Leader節點宕機
- 3.4、多個Candidate競爭選舉
- 3.5、網路磁區處理
- 4、總結
- 5、參考
1、什么是Raft
Paxos 是論證了一致性協議的可行性,但是論證的程序據說晦澀難懂,缺少必要的實作細節,而且
工程實作難度比較高, 廣為人知實作只有 zk 的實作 zab 協議,
Paxos協議的出現為分布式強一致性提供了很好的理論基礎,但是Paxos協議理解起來較為困難,
實作比較復雜,
然后斯坦福大學RamCloud專案中提出了易實作,易理解的分布式一致性復制協議 Raft,Java,
C++,Go 等都有其對應的實作之后出現的Raft相對要簡潔很多,引入主節點,通過競選確定主節點,節
點型別:Follower、Candidate 和 Leader,

- Leader 會周期性的發送心跳包給 Follower,每個 Follower 都設定了一個隨機的競選超時時間(我想稱它為“靜默時間”),一般為 150ms~300ms;
- 如果在這個時間內沒有收到 Leader 的心跳包,就會變成 Candidate(靜默期已到,哥們我要出山了),進入競選階段;
- 通過競選階段的投票多的人成為Leader(當老大了),
2、Raft相關概念
節點狀態:
- Leader(主節點):接受 Client 更新請求,寫入本地后,然后同步到其他副本中,
- Follower(從節點):從 Leader 中接受更新請求,然后寫入本地日志檔案,對客戶端提供讀
請求, - Candidate(候選節點):如果 Follower 在一段時間內未收到 leader 心跳,則判斷 leader
可能故障,發起選主提議,節點狀態從 Follower 變為 Candidate 狀態,直到選主結束,
Election Timeout:
選舉超時時間(可以被重置),是節點狀態從Follower變為Candidate的時間,是一個150ms~300ms的隨機值,
Heartbeat Timeout:
心跳超時時間,Leader節點會以固定的時間間隔定時給Follower節點發送心跳,
Election Term:
選舉輪次,初始值為0,當某個節點從Follower 變為 Candidate時該節點的Term會加1,Term值越大表示當前leader越新,
Request Vote:
請求投票,Candidate 在選舉程序中發起,收到多數派回應后,成為 Leader,
3、原理決議
Raft提供兩個核心程序:日志復制和Leader選舉,
3.1、日志復制
1、來自客戶端的修改都會被傳入 Leader,注意該修改還未被提交,只是寫入日志中,

2、Leader 會把修改復制到所有 Follower,

3、Leader 會等待大多數的 Follower 也進行了修改,然后才將修改提交,
4、此時 Leader 會通知的所有 Follower 讓它們也提交修改,此時所有節點的值達成一致,

3.2、Leader選舉
1、初始階段,只有 Follower,沒有 Leader,Follower A 優先等待一個隨機的Election Timeout(競選超時時間)之后,沒收到 Leader 發來的心跳包,因此進入競選階段,
2、A 發送投票請求給其它所有節點,

3、其它節點如果在當前Term沒有投過票則會對請求進行回復,如果超過一半的節點回復了,那么該 Candidate 就會變成 Leader,

4、之后 Leader 會根據Heartbeat Timeout周期性地發送心跳包給 Follower,Follower 接收到心跳包,會重置Election Timeout,
3.3、Leader節點宕機

當之前選舉的Leader A宕機,節點B和節點C在選舉超時時間內沒有收到Leader的心跳續約包,其中節點B優先結束選舉超時時間即變為Candidate,
后續的流程和之前一樣,只不過宕機的節點A不會做出任何回應,
3.4、多個Candidate競爭選舉
1、如果有多個 Follower 成為 Candidate,并且所獲得票數相同,那么就需要重新開始投票,
2、當重新開始投票時,由于每個節點設定的隨機競選超時時間不同,因此下一次再次出現多個Candidate 并獲得同樣票數的概率很低,
3.5、網路磁區處理
1、當出現網路磁區后,如果某個磁區沒有Leader則會進行Leader選舉,

2、當網路磁區恢復后,多個磁區里面的Leader取Term最大的一個作為磁區恢復以后整個集群的Leader,然后向其他節點同步自己的資料,

4、總結
Raft是在Paxos協議基礎上的一個便于理解,便于實作的分布式一致性協議,也經常被用在分布式系統和軟體當中,其中就包括了大名鼎鼎的Redis,兩者都是保證了CAP理論中的“AP”,
通過了解也發現Raft的Leader選舉和日志復制程序巧妙又有趣,對于入門分布式,以及了解分布式系統面臨的問題有很大的幫助,
5、參考
Raft影片演示:http://thesecretlivesofdata.com/raft/#home,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325515.html
標籤:其他
