1. 程式人生 > >分布式Raft算法

分布式Raft算法

機制 客戶 png leader 功能 分享 復制 接受 sensu

參考文章:
《In Search of an Understandable Consensus Algorithm》
https://raft.github.io/
http://thesecretlivesofdata.com/raft/
這裏有一個非常適合理解raft協議的小動畫。

1.1.1 簡介
概念:
raft是一種用於管理log 復制的一致性協議,它和paxos有同樣功能,但是比它簡單容易理解。
功能:
leader 選舉、日誌復制及安全問題。並且提供了強一致性。

1.1.2 原理
這裏以3個節點為例
每個節點都有三種狀態:leader、candidate、follower
每個組有三種行為:leader election、log replication、safety。

1) leader election
當啟動三個節點時,都處在candidate狀態(raft有時間機制,然後發送vote信息給其他節點),當超過一半時會變成candidate,其他兩個節點的狀態會變為follower。
所有客戶端數據的交換都跟leader進行。
2) log replication
log replication保證了數據在組中的一致性。log entry是這個的核心。
下圖是過程
技術分享圖片

技術分享圖片

技術分享圖片

在第三步的時候,raft協議會使用append entries message心跳檢測,如果followers的log追加的key值的follower的數量過半,那麽就會進行第四步即leader的log commit

技術分享圖片

在raft協議中,這裏有兩個超時時間設置(它控制這選舉)
election timeout:它是follower變成candicate時間。一般設置為150ms到300ms
如果選舉超時,那麽follower變成candicate同時新的一輪選舉。首先candicate A會給自己投一票同時會向其他節點發送選我的信息,如果節點還未投票,那它會選A,同時這個節點會重置election timeout。一旦A得到的票數過一半以上,那就成為了leader,同時leader開始向followers發送Append Entries messages的操作,這個發送的時間間隔在heartbeat timeout之內。

followers然後會響應Append Entries message。選舉會繼續指導一個followers停止收到heartbeats並變為candidate。

註意:如果在log replication這一過程中,發生了網絡分區或者網絡通信故障,使得Leader不能訪問大多數Follwers了,那麽Leader只能正常更新它能訪問的那些Follower服務器,而大多數的服務器Follower因為沒有了Leader,他們重新選舉一個候選者作為Leader,然後這個Leader作為代表於外界打交道,如果外界要求其添加新的日誌,這個新的Leader就按上述步驟通知大多數Followers,如果這時網絡故障修復了,那麽原先的Leader就變成Follower,在失聯階段這個老Leader的任何更新都不能算commit,都回滾,接受新的Leader的新的更新。

分布式Raft算法