非雲環境中Kubernetes的配置和運行:etcd

這是非雲環境中Kubernetes的配置和運行系列的第六篇文章,本文將詳細闡釋etcd的技術細節,及其在Kubernetes集羣中的作用。

etcd是一種爲集羣內各機器提供可靠數據存儲的分佈式鍵值存儲。etcd開源提供在GitHub上,它很好地解決了網絡分區期間領導者的選舉問題,可容忍包括領導者節點在內的節點故障。

引用自: https://coreos.com/etcd/docs/latest/

etcd以駐留內存進程形式運行在集羣中的每臺機器上,提供動態配置的記錄,支持以簡單方式在集羣成員間共享多種配置數據。

etcd以鍵值方式存儲數據,它是分佈式的,支持自動複製和領導者自動選舉產生。對存儲數據的所有更改,會自動反映到整個集羣。
etcd還提供發現服務,支持“已部署的”應用向集羣所有成員廣播其所提供的服務。
etcd使用基於HTTP的JSON方式通過API調用實現通信。API可直接通過curl或wget等方式使用,也可以通過etcdctl間接使用。

參考資料: https://etcd.io/

容錯能力

推薦奇數個集羣成員,即維持奇數規模的集羣成員。無需更改獲得多數所需的成員,但額外添加成員可增加對失敗的容忍。對於集羣成員應選奇數還是偶數時,實踐出真知。

參考資料: https://coreos.com/etcd/docs/latest/v2/admin_guide.html

複製能力

在計算機科學中,狀態機複製(也稱爲“狀態機方法”)是一種通過服務器複製並協調客戶與服務器間的副本交互實現容錯服務的通用方法。該方法還爲副本管理協議的理解和設計提供了框架。

參考文獻: https://en.wikipedia.org/wiki/State_machine_replication

活動副本

  • 所有節點實現爲一種有限狀態機。
    • 節點在各自Quorum投票操作順序上達成一致,並在本地執行。

非活動副本

  • 指定一個節點爲領導者(如下圖動畫所示),接收所有寫入命令。
    • 領導者節點對大多數副本有效執行Quorum投票操作。
    • 領導者節點負責將複製狀態分發給其它副本。

Raft共識

Raft共識算法在設計上易於理解,它具有和Paxos一樣的容錯和性能。不同之處在於,Raft將問題分解爲相對獨立的子問題,並很好地解決了系統運行實際所需的關鍵問題。我們希望Raft共識能得到更廣泛的採用,進而開發出更多基於共識的高質量系統,滿足當前的需求。

參考鏈接: https://raft.github.io/

什麼是分佈式共識算法?

  • 支持一組進程就某個值達成一致的算法;
  • 支持對分佈式進程的協調;
  • 隨着複製狀態機一併提出。
  • 共識算法在構建大規模可靠分佈式系統中具有重要作用。

一個用於概念理解的小比喻

從前有個王國,稱爲“集羣之地”(Cluster Land)。王國由一位非常民主的國王統治,他受由九位非常智慧、忠誠的智者團的支持 。
一旦有王國的臣民向國王提出請求,國王都會先與他的智者團商議,然後再決定是否批准該請求。如果多數智者都投了贊成票,那麼該請求將獲得批准。否則,將被拒絕。

上面簡單比喻了Raft算法將事務提交到日誌的做法。所有請求均由領導者(即國王)處理,並且僅在得到多數智者(集羣中的其他節點)贊成後才能提交。

一天,國王在與一條可怕的龍作戰時殉國。智者團決定無需等待任何哀悼期,應立刻選舉他們中的一位作爲新的國王統治者。九位智者中,有兩位(暫稱爲其爲五號和七號)申請成爲新國王。在經過快速選舉後,有四位智者投票贊成五號,而三位投票贊成七號。這樣,五號就成爲了新的國王,開始繼續執行與上任國王相同的政策。

這大致說明了Raft算法中時如何進行領導者選舉的。

一段時間後,由於對新統治者治理王國的方式產生了不滿,一些智者發動了叛亂,最終原王國一分爲二。由五號統治的“集羣北地”,和由七號統治的“集羣南地”,每個王國具有自己的國王和智者。原臣民生活在其中一個王國,並向各自的國王提出請求。分裂的王國依然延用相同的統治方法,即請求直接提交國王,並由各自智囊團進行磋商達成決議。
多年後,兩位國王達成協議,王國得到統一。“集羣之地”再次成爲一個王國,由五號重新統治。不幸的是,在分裂期間,每個王國都制定了一些相互牴觸的法律。爲解決這個問題,智囊們同意通過遵循最新頒佈的相應法律,解決所有的法律衝突。

這部分故事比喻了發生網絡分區的情況。這時集羣被拆分,每個新集羣都有其自己的領導者和節點。衝突的請求可由各個的集羣在不同的時間處理。當集羣再次合併時,需要給出解決衝突值的方法。在Raft中,引入了Term概念解決分區一致性問題。

算法使用場合

  • 進程需要共享一個滿足一致、原子且有序的操作/事件集視圖,考慮:
    • 高可用性(容錯);
    • 性能(將負載分發給數千客戶)。

etcd如何適用於Kubernetes集羣?

etcd存儲kubernetes的設置、狀態和元數據。考慮到Kubernetes是一種分佈式系統,使用分佈式數據庫是非常必要的。正如前文所闡釋的,etcd是一個具有高可用性和可擴展性的分佈式數據庫。

“在集羣之地王國中,Raft和etcd是天作之合。”

原文鏈接:

Kubernetes Journey — Up and running out of the cloud — etcd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章