raft 一致性演算法

2022-04-11 11:02:38 字數 1307 閱讀 9939

redis使用raft leader election進行master選舉。

概念:乙個cluster中有多個node,最終狀態有乙個leader,多個follower。

leader通過heartbeat週期性和follower通訊。

node有三種狀態:leader,follower,candidate(leader候選人)

什麼時候開始選舉?

如果followers在一定時間沒有接收到leader的heartbeat message(稱之為選舉超時election timeout,比如election timeout 是乙個150ms-300ms中的隨機數,為了避免)followers認為cluster中沒有leader,follower變成candidate,發起選舉,要求其他節點進行投票。

選舉過程:

某乙個或多個followers的election timeout達到,該follower變為candidate,開始自己的任期(當前term+1),並向其他node傳送請求投票(request vote)的message,讓他們給自己投票。

如果接收到request vote的node本term內沒有投票,那麼該node投票給這個candidate,同時重置自身的election timeout。

一旦某一candidate獲得多數投票,它成為leader。

一輪投票的結果可能有:

1.某一node獲得majority vote,成為leader。

2.沒有節點獲得majority vote。candidate到達自己的election timeout,再次開始重新選舉。因為每個node的timeout是乙個隨機值,能夠確保不會產生無限的選舉迴圈,在一定數量的選舉輪次後能夠選出leader。

選舉規則:

一旦乙個candidate獲得多數投票,它成為leader。

每個node在乙個term內最多投票一次。

成為leader的node通過傳送heartbeat給其他node,通知leader選舉完成,並重置其它node的election timeout。

client傳送change到leader,leader記錄該change到自身的log(稱之為乙個log entry),之後通過heartbeat傳送該change到followers。

在多數followers回覆已接收到該change時(acknowledaged),leader的log中的乙個entry被標記為committed。leader 傳送回覆給client,宣告該change已完成。一旦follower知道log entry已經被committed,那麼他也會將這個log entry應用到本地的log中。

refs:

一致性演算法 Raft

乙個 raft 集群包含若干個伺服器節點 通常是 5 個,這允許整個系統容忍 2 個節點的失效,每個節點處於以下三種狀態之一 raft通過選出乙個leader來簡化日誌副本的管理,例如,日誌項 log entry 只允許從leader流向follower。基於leader的方法,raft演算法可以分...

raft一致性演算法

過去,paxos一直是分布式協議的標準,但是paxos難於理解,更難以實現,google的分布式鎖系統chubby作為paxos實現曾經遭遇到很多坑。來自stanford的新的分布式協議研究稱為raft,它是乙個為真實世界應用建立的協議,主要注重協議的落地性和可理解性。在了解raft之前,我們先了解...

Raft一致性協議

什麼是raft協議?我們應當知道,分布式儲存系統通常通過維護多個副本來進行容錯,提高系統的可用性。要實現此目標,就必須要解決分布式儲存系統的最核心問題 維護多個副本的一致性。raft協議就可以完成這個操作。為什麼用raft?除了raft,還有很多協議可以實現這個功能,比如說 兩階段提交協議,三階段提...