天天看點

etcd詳解

etcd簡介

etcd 是一個分布式、可靠的 key-value 存儲系統,它用于存儲分布式系統中的關鍵資料。

etcd原理

一個 etcd 叢集,通常會由 3 個或者 5 個節點組成,多個節點之間通過 Raft 一緻性算法的完成分布式一緻性協同,算法會選舉出一個主節點作為 leader,由 leader 負責資料的同步與資料的分發。當 leader 出現故障後系統會自動地選取另一個節點成為 leader,并重新完成資料的同步。用戶端在多個節點中,僅需要選擇其中的任意一個就可以完成資料的讀寫,内部的狀态及資料協同由 etcd 自身完成。

在 etcd 整個架構中,有一個非常關鍵的概念叫做 quorum,quorum 的定義是 (n+1)/2,也就是說超過叢集中半數節點組成的一個團體,在 3 個節點的叢集中,etcd 可以容許 1 個節點故障,也就是隻要有任何 2 個節點可用,etcd 就可以繼續提供服務。同理,在 5 個節點的叢集中,隻要有任何 3 個節點可用,etcd 就可以繼續提供服務,這也是 etcd 叢集高可用的關鍵。

在允許部分節點故障之後繼續提供服務,就需要解決一個非常複雜的問題:分布式一緻性。在 etcd 中,該分布式一緻性算法由 Raft 一緻性算法完成。Raft 一緻性算法能夠工作的一個關鍵點是:任意兩個 quorum 的成員之間一定會有一個交集(公共成員),也就是說隻要有任意一個 quorum 存活,其中一定存在某一個節點(公共成員),它包含着叢集中所有的被确認送出的資料。正是基于這一原理,Raft 一緻性算法設計了一套資料同步機制,在 Leader 任期切換後能夠重新同步上一個 quorum 被送出的所有資料,進而保證整個叢集狀态向前推進的過程中保持資料的一緻。

etcd特點

  • 簡單:基于HTTP+JSON的API讓你用curl就可以輕松使用
  • 安全:可選SSL客戶認證機制
  • 快速:每個執行個體每秒支援一千次寫操作
  • 可信:使用Raft算法充分實作了分布式

etcd應用場景

分布式系統中的資料分為控制資料和應用資料。etcd的使用場景預設處理的資料都是控制資料,對于應用資料,隻推薦資料量很小,但是更新通路頻繁的情況。

應用場景有如下幾類:

場景一:服務注冊與發現(Service Discovery)

場景二:消息釋出與訂閱

場景三:負載均衡

場景四:分布式通知與協調

場景五:分布式鎖、分布式隊列

場景六:叢集監控與Leader競選

場景六:配置管理

舉個最簡單的例子,如果你需要一個分布式存儲倉庫來存儲配置資訊,并且希望這個倉庫讀寫速度快、支援高可用、部署簡單、支援http接口,那麼就可以使用etcd。目前,cloudfoundry使用etcd作為hm9000的應用狀态資訊存儲,kubernetes用etcd來存儲docker叢集的配置資訊等。