淺入深出ETCD之【raft原理】

前言

此次咱們來講說,有關於etcd原理的一些事情。以前咱們已經瞭解到了etcd是一個分佈式的k-v存儲,那麼它到底是如何保證數據是如何複製到每一個節點上面去的呢?又是如何保證在網絡分區的狀況下能正常工做下去?raft協議究竟是什麼?帶着這些問題咱們繼續往下看。服務器

raft選舉策略

咱們知道etcd使用raft協議來保證整個分佈式的節點網絡能正常的運轉而且能正確的將數據複製到每一個節點上面去。那麼什麼是raft協議嘞?網絡

首先咱們有這樣一個背景:raft是想維護整一個網絡,其中有一個領導人,這個領導人負責將收到的信息同步給網絡中的其餘全部節點,從而保證整個網絡數據一致。分佈式

若是你有必定的英文基礎,我建議直接查看下面這個網站,它用動畫很是清楚的描述了raft選舉的整個過程:http://thesecretlivesofdata.com/raft/動畫

這個其實已經說明的超級棒了,若是你還看不懂,我下面會用最簡單的幾個要點來進行最簡單的說明。網站

大多數理論

首先說明一個理論,叫作大多數理論,很簡單,舉個栗子:日誌

  • 有10我的,若是你將蘋果給其中的6我的(大多數),那麼你隨機選擇5我的,必定有一我的會有蘋果。

在etcd中的應用:blog

  • 選舉中只要有大多數(超過半數的人給你投票)你確定就是票數最多的了,不可能有人比你更多。
  • 只須要將日誌複製給大多數的節點,那麼只要有一半的節點正常工做就能保證數據最新

選舉狀態

下面是一些選舉過程當中節點的狀態
leader 表示選舉最終產生的領導人
candidate 候選狀態,表示當前正在參與選舉
follower 表示選舉最終本身不是領導人,那本身就是從屬節點get

選舉過程與要點

  1. 全部節點一開始都是follower狀態
  2. 當節點處於follower狀態時,每一個節點隨機通過一段時間,若是沒有收到leader的消息就會進入candidate狀態(證實當前沒有leader節點須要從新進行選舉),若是收到信息就會繼續保持follower狀態
  3. 當節點處於candidate就會要求別人給本身投票,收到大多數的節點的投票那就轉變爲leader狀態,不然要麼是別的節點成爲了leader,要麼就是由於特殊狀況致使此次選舉失敗從新進行選舉
  4. 每次選舉舉辦的時候有一個term,在每個term中,每一個節點只能投票一次
  5. 投票的時候必須投給當前數據至少和本身同樣的節點,而且term大的優先

日誌複製規則

etcd是經過日誌複製來實現數據同步的

這個圖網上也不少,說明的是日誌複製的規則
每一個節點都有一份本身的日誌,有的節點多,有的節點少,日誌最多的確定是leader。
上圖還有幾個要點,我看別人沒提到,我就提一下:同步

  1. 顏色表明term
  2. 第四行表示的這個節點,第一term下複製了兩個日誌就異常掛掉了
  3. 最終只有第三行這個follower和第一行的leader保持了同步

異常狀況

raft之因此厲害由於即便出現一些特殊狀況,整個網絡在必定的時間以後也能自動恢復並正常工做。源碼

一個節點的異常

首先最多見的狀況就是一個節點出現異常,有多是這個節點的服務器掛了,或者別的什麼緣由。

  • 若是出現問題的這個節點是follower,那麼沒有關係,整個網絡依舊能正常運行,當這個節點再次加入網絡的時候也只須要同步後面的數據便可。
  • 若是出現問題的是leader,有一點麻煩,由於網絡中沒有leader節點了,那麼就會從新進行選舉,從新找一個leader,當這個異常節點恢復以後發現當前網絡中有leader了,並且term還比本身大,那麼本身就退位稱爲follower。

網絡分區

還有一種異常狀況是因爲網絡致使的,網絡出現異常,致使節點之間的通訊存在異常,一部分節點與另外一部分之間沒有辦法訪問了。以下圖所示:

上面三個follower沒有辦法與下面的節點進行通訊。

  • 當客戶端再次請求leader發送數據的時候,leader發現沒有辦法將數據同步給給大多數節點,它只能給本身和旁邊的一個,此時leader沒有辦法給客戶端反饋。
  • 上面三個節點因爲收不到leader的消息,那麼會認爲網絡中沒有leader存在,會從新進行選舉操做,由於當前上面有三個節點存在(只要有超過半數的節點參與選舉就行),因此能夠從新選舉成功,選出新的leader告訴客戶端,客戶端就會從新發送數據到新的leader。
  • 當網絡恢復以後又會找到最新的leader從而將數據同步至最新的狀態。

總結

總的來講,只要整個網絡中存在大多數節點正常運行,那麼etcd就是可用的,而且可以保證數據正確。當網絡恢復以後也能將數據調整到最新的狀態。 raft強大的地方在於它能自動的進行狀態的變化,自動進行選舉,而且選舉遵循必定的策略,進而保證整個網絡的正常運轉。同時保證數據的一致性。 瞭解etcd的這個原理有助於咱們後續的使用以及源碼的閱讀。

相關文章
相關標籤/搜索