亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Raft算法概念是什么

發布時間:2021-12-30 15:09:15 來源:億速云 閱讀:190 作者:iii 欄目:云計算

本篇內容介紹了“Raft算法概念是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

背景

最近在使用K8S過程中,一直用到了一個Key-Value數據庫Etcd,每當看到有介紹Etcd的教程時,介紹不多,大多都是獨立于K8S集群之外,保存狀態數據。再深入百度下,發現Etcd是一個可靠的,分布式的Key Value存儲系統,它用于存儲分布式系統中的關鍵數據,一個Etcd集群,通常會由3個或者5個節點組成,多個節點之間,通過一個叫做Raft一致性算法的方式完成分布式一致性協同,算法會選舉出一個主節點作為leader,由leader負責數據的同步與數據的分發,當leader出現故障后,系統會自動地選取另一個節點成為leader,并重新完成數據的同步與分發。

Raft算法概念是什么

看到這里,大概知道Etcd之所以可靠,是因為背后的Raft算法的支撐,仔細思考下,Raft協議是什么? 它是如何進行選舉的?leader節點掛了,又如何保證各個節點數據一致? 成員節點變更會出現腦裂問題嗎?帶著這些問題,我們一起揭開Raft本后真實面紗。

 

Raft算法概念

通俗易懂的來說,Raft算法是一個通過以領導者為準的方式,實現各個節點的通信和數據的一致;如果領導節點宕機,則通過特定規則重新選出新的領導者。

這就好比村里選舉一樣,首先村里會有一個村長,村長就是這個村子里的扛把子,一切都得聽他的,后來呢,因為抗疫不力,被干掉了,村子不可一日無長,重新推舉出候選人,如何選舉村長? 首先推舉候選人,然后投票選舉。所以整個raft算法中存在這樣三個角色:分別是跟隨者、候選人、領導者。

跟隨者:普通群眾,默默聽從指揮,如果找不到領導者,那么推薦自己為候選人;

候選人:候選人向其它節點請求投票,如果獲得大多數的投票,那么將成為領導者;

領導者:一切以我為準,所有節點都得聽我的。

 

如何進行選舉?

1、初始狀態下,所有節點都是跟隨者。每個跟隨者都會攜帶一個任期編號和隨機超時時間。如下圖所示:

Raft算法概念是什么

倒計時狀態(0)
Raft算法概念是什么  
初始狀態(1)

2、NodeC時間最先出現超時,那么它將推薦自己為候選人。如下圖所示:

Raft算法概念是什么  
請求投票(2)

3、其它節點發現該任期編號還沒有進行過投票,通過RPC方式進行調用,那么將按照一節點一票的規則進行投票,在投票過程中驗證候選者的編號大于自己、驗證日志的完整性并增加自己任期編號。Raft算法概念是什么

4、NodeC當選為領導者節點以后,將周期性往其它節點發送消息,告訴其它節點,一切以我為主,阻止其它節點發起選舉,而其它節點如果能夠在超時時間內跟領導者保持心跳,將不會發起選舉。

Raft算法概念是什么  
領導者發送心跳(4)
 

如何保證數據的一致性?

在提到raft算法一致性這個問題時,就不得不說日志的概念,什么時日志呢?各個節點副本數據就是以日志的形式存在,客戶端發送寫請求到服務端,領導者接收到寫請求,處理寫請求的過程就是復制和提交日志項的過程。如下圖所示:

Raft算法概念是什么  
日志提交過程

1、客戶端發送數據到領導者節點,領導者節點基于客戶端數據創建日志項,添加到本地日志中。

2、領導者把日志信息通過RPC復制到其它跟隨者節點。

3、大多數節點復制成功后,那么領導者節點會提交數據到狀態機。

4、返回給客戶端。

5、其它節點接收到日志復制RPC信息,發現領導者已經提交數據,那么其它節點也會跟隨提交數據。

當然看完這個過程,順風順水的情況下,沒有什么問題,但是在分布式系統中,任何一個節點都有隨時宕機的可能。舉一個,最常見的例子,在上面第二步中,領導者剛好成功日志復制到其它節點,這個時候主節點恰好宕機,raft算法如何處理呢?這個時候其實可以分為領導者節點已經提交并成功返回給客戶端和未提交兩種情況,但是處理比較類似,都是重新選舉出新的領導者節點繼續進行數據提交,你可能有兩個疑問。

raft算法不是要求所有節點數據都以領導者節點為準,如果領導者節點的數據不是最新的怎么辦?

“  

首先能被選舉的領導者日志一定是最新的,否則選舉不能成功;另外如果跟隨者比領導者日志數據多,那么也要強制跟領導者保持一致。

”  

對于客戶端在不知道是否提交成功的前提下,如何處理?

“  

可以嘗試重復提交到主節點,raft算法要求各個節點實現冪等性,也就是去重機制。

”  

另外多說幾句,日志匹配這部分,raft做的很有意思,如果有興趣的話,可以在公眾號后臺回復【raft】獲取raft論文。Raft算法概念是什么

 

成員節點變更問題

在沒有了解成員節點變更之前,先思考一個問題,假設有兩個節點同時加入三節點集群,會不會出現集群分裂問題呢?如下所示,一個穩定運行的raft集群現在需要加入兩個節點。

Raft算法概念是什么恰巧這個時候NodeC和NodeA、NodeB發生了集群分裂,因為NodeC的編號和日志索引都是最大的,順利上位成為領導者,如下所示:

Raft算法概念是什么對于上述問題,很多分布式系統中都存在該問題,raft算法是如何解決的呢?

“  

很簡單,節點一個一個按序加入集群,永遠不存在兩個大多數的問題。

”  

具體加入方式,如下所示:

Raft算法概念是什么在整個加入過程中,主要步驟:首先領導者向NodeD同步數據; 同步完成后, 把NodeD的節點加入信息同步到其它跟隨者節點,最后提交日志,完成變更。待本次完成變更后,下個節點按照上述步驟再次執行。

通過如上方式進行節點變更,保證了永遠只有一個領導者節點,這樣保證了大多數節點的數據一致性,從這里可以看出Raft并不是嚴格一致性算法,而是共識算法。

另外考慮另外一種極端情況,NodeA、NodeB、NodeC是一個raft集群,這時NodeA跟NodeB、NodeC之間發生了網絡連接錯誤,即NodeA和NodeB、NodeC發生了隔離,如下所示:

Raft算法概念是什么  
網絡隔斷(1)
Raft算法概念是什么  
NodeB當選領導者(2)
Raft算法概念是什么  
客戶端請求,不能復制到大多數節點,無法提交成功(3)

Raft算法概念是什么

客戶端請求,能復制到大多數節點,提交成功(4)

最后如果網絡恢復,NodeA更新任期數據,發現集群存在任期更新,那么NodeA將降級為一個跟隨者加入到raft集群,并復制領導者節點數據。

“Raft算法概念是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

固镇县| 吴堡县| 安徽省| 临高县| 嘉兴市| 洛宁县| 平度市| 寻乌县| 常山县| 偏关县| 咸阳市| 苍南县| 大姚县| 温州市| 吴旗县| 安远县| 布拖县| 清水河县| 黑水县| 苏尼特右旗| 新津县| 桦甸市| 息烽县| 遵化市| 亳州市| 铅山县| 荣昌县| 纳雍县| 陕西省| 荥经县| 遂平县| 衡东县| 新化县| 获嘉县| 兴国县| 昌图县| 山西省| 内江市| 连云港市| 永年县| 望谟县|