Raft演算法詳解

2021-10-06 10:01:10 字數 1198 閱讀 1240

3、log replication

4、腦裂問題

raft協議中,乙個節點任一時刻處於以下三個狀態之一:

有節點啟動時都是follower狀態,在一段時間內如果沒有收到來自leader的心跳,從follower切換到candidate,發起選舉。如果收到集群中大多數的票(含自己的一票)則切換到leader狀態;如果發現其他節點比自己先成為了leader,則主動切換到follower。

如果follower在election timeout內沒有收到來自leader的心跳,(也許此時還沒有選出leader,大家都在等;也許leader掛了;也許只是leader與該follower之間網路故障),則會主動發起選舉。步驟如下:

在這個過程中,根據來自其他節點的訊息,可能出現三種結果

raft演算法保證任一任期內最多乙個leader被選出。在乙個複製集中任何時刻只能有乙個leader。系統中同時有多餘乙個leader,被稱之為腦裂(brain split),這是非常嚴重的問題,會導致資料的覆蓋丟失。在raft中,兩點保證了這個屬性:

因此,某一任期內一定只有乙個leader。

但是,在網路分割(network partition)的情況下,可能會出現兩個leader,但兩個leader所處的任期是不同的。

上圖中,node a、b和node c、d、e可能由於網路問題出現了分割,因此node c、d、e無法收到來自leader(node b)的訊息。

在election time之後,node c、d、e會分期選舉,由於滿足majority條件,node e成為了term 2的leader。

因此,在系統中貌似出現了兩個leader:term 1的node b, term 2的node e。node b的term更舊,但由於無法與majority節點通訊,nodeb仍然會認為自己是leader。

此時,有客戶端往node b傳送了寫請求,nodeb發現自己無法將log entry 複製到majority大多數的節點,因此不會告訴客戶端寫入成功。如果客戶端往c傳送了寫請求,node c是能將log entry 複製到majority大多數的節點,所以node c所在的網路分割槽能正常接收請求。

當網路被修復後,node b和node a發現自己所在的term為1,比node c的term小,因此會退化為follower並同步集群資料。

raft演算法 Paxos和Raft共識演算法(二)

raft 譯文 在過去的 10 年中,leslie lamport 的 paxos 演算法幾乎已經成為了一致性演算法的代名詞,但是paxos 有兩個致命的缺點 第乙個是 paxos 太難以理解,第二個缺點是它難以在實際環境中實現。其中乙個原因是,對於多決策 paxos multi paxos 大家還...

分布式共識演算法 Raft詳解

拜占庭將軍問題是分布式領域最複雜 最嚴格的容錯模型。但在日 常工作中使用的分布式系統面對的問題不會那麼複雜,更多的是因 為計算機故障宕機,或者網路通訊問題而沒法傳遞資訊,這種情況 不考慮計算機之間互相傳送惡意資訊,極大簡化了系統對容錯的要 求,最主要的是達到一致性。假設將軍中沒有叛軍,信使的資訊可靠...

理解Raft演算法

知乎 raft演算法詳解 比較通俗易懂的描述了raft github 尋找一種易於理解的一致性演算法 擴充套件版 該文是raft文獻的乙個翻譯,翻譯的還是比較流暢易懂的 下面是以q a的方式自己的總結,對於應試幫助比較大 q1 raft演算法的目的 a1 解決分布式架構下的副本一致性問題。q2 ra...