Etcd概念簡介

2021-09-25 02:06:29 字數 2588 閱讀 3400

etcd 是乙個分布式鍵值對儲存系統,由coreos 開發,內部採用raft 協議作為一致性演算法,用於可靠、快速地儲存關鍵資料,並提供訪問。通過分布式鎖、leader選舉和寫屏障(write barriers),來實現可靠的分布式協作。etcd集群是為高可用、持久化資料儲存和檢索而準備。

"etcd"這個名字源於兩個想法,即 unix 「/etc」 資料夾和分布式系統"d"istibuted。 「/etc」 資料夾為單個系統儲存配置資料的地方,而 etcd 儲存大規模分布式系統的配置資訊。因此,"d"istibuted 的 「/etc」 ,是為 「etcd」。

etcd 以一致和容錯的方式儲存元資料。分布式系統使用 etcd 作為一致性鍵值儲存系統,用於配置管理、服務發現和協調分布式工作。使用 etcd 的通用分布式模式包括領導選舉、分布式鎖和監控機器活動。

雖然 etcd 也支援單點部署,但是在生產環境中推薦集群方式部署。由於etcd內部使用投票機制,一般 etcd 節點數會選擇 3、5、7等奇數。etcd 會保證所有的節點都會儲存資料,並保證資料的一致性和正確性。

etcd 目前預設使用 2379 埠提供 http api 服務,2380 埠和 peer 通訊(這兩個埠已經被 iana 官方預留給 etcd)。在之前的版本中,可能會分別使用 4001 和 7001,在使用的過程中需要注意這個區別。

raft:etcd所採用的保證分布式系統強一致性的演算法。

node:乙個raft狀態機例項。

member: 乙個etcd例項。它管理著乙個node,並且可以為客戶端請求提供服務。

cluster:由多個member構成、可以協同工作的etcd集群。

peer:對同乙個etcd集群中另外乙個member的稱呼。

client: 向etcd集**送http請求的客戶端。

wal:預寫式日誌,etcd用於持久化儲存的日誌格式。

snapshot:etcd防止wal檔案過多而設定的快照,儲存etcd資料狀態。

proxy:etcd的一種模式,為etcd集群提供反向**服務。

leader:raft演算法中,通過競選而產生的、處理所有資料提交的節點。

follower:競選失敗的節點作為raft中的從屬節點,為演算法提供強一致性保證。

candidate:當follower超過一定時間接收不到leader的心跳時轉變為candidate開始競選。

term:某個節點成為leader到下一次競選時間,稱為乙個term。

index:資料項編號。raft中通過term和index來定位資料。

etcd作為乙個受到zookeeper與doozer啟發而催生的專案,除了擁有與之類似的功能外,更專注於以下四點:

簡單:安裝配置簡單,而且提供了 http api 進行互動,使用也很簡單

安全:支援 ssl 證書驗證

快速:根據官方提供的 benchmark 資料,單例項支援每秒 2k+ 讀操作

可靠:採用 raft 演算法,實現分布式系統資料的可用性和一致性

4.1coreos 的容器 linux:    在container linux上執行的應用程式,獲得自動的不宕機 linux 核心更新。 容器 linux 使用locksmith來協調更新。locksmith 在 etcd 上實現分布式訊號量,確保在任何給定時間只有集群的乙個子集重新啟動。

4.2kubernetes: 將docker集群的配置資訊儲存到etcd中,用於服務發現和集群管理;etcd 的一致性對於正確安排和執行服務至關重要。kubernetes api 伺服器將群集狀態持久化在 etcd 中。它使用etcd的 watch api監視集群,並發布關鍵的配置更改。

4.3 cloudfoundry:使用etcd作為hm9000的應用狀態資訊存等。

場景一:服務發現(service discovery)

場景二:訊息發布與訂閱

場景三:負載均衡

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

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

場景六:集群監控與leader競選

etcd的工作原理圖如下所示:

從etcd的架構圖中我們可以看到,etcd主要分為四個部分:

第1部分是http server: 用於處理使用者傳送的api請求,以及其它etcd節點的同步與心跳資訊請求。

第2部分是store:用於處理etcd支援的各類功能的事務,包括資料索引、節點狀態變更、監控與反饋、事件處理與執行等等,是etcd對使用者提供的大多數api功能的具體實現。

第3部分是raft:raft強一致性演算法的具體實現,是etcd的核心。

第4部分是wal:write ahead log(預寫式日誌),是etcd的資料儲存方式。除了在記憶體中存有所有資料的狀態以及節點的索引以外,etcd就通過wal進行持久化儲存。在wal中,所有的資料提交前都會事先記錄日誌。snapshot是為了防止資料過多而進行的狀態快照;entry表示儲存的具體日誌內容。

通常,乙個使用者的請求傳送過來,會經由http server**給store,以進行具體的事務處理。如果涉及到節點修改,則交給raft模組進行狀態變更、日誌記錄;然後,再同步給別的etcd節點,以確認資料提交;最後,進行資料提交,再次同步。

Zookeeper概念簡介

zookeeper是乙個分布式協調服務 就是為使用者的分布式應用程式提供協調服務 a zookeeper是為別的分布式程式服務的 b zookeeper 本身就是乙個分布式程式 只要有半數以上節點存活,zk就能正常服務,zookeeper適合裝在奇數臺機器上!c zookeeper所提供的服務涵蓋 ...

閒談etcd(三)etcd的使用

type client structimport fmt go.etcd.io etcd clientv3 time 連線 func main dialtimeout 5 time.second,建立連線 if client,err clientv3.new config err nil fmt.p...

Mysql簡介及概念

關係型資料庫系統 建立在關係模型上的資料庫系統。關係模型 當將日常生活中的實體 學生 和實體的屬性 學生的學號,姓名 儲存資料中時,該如何處理該實體結構。1 資料結構可以規定,同類結構,結構一致。就是乙個二維 有行有列。2 資料之間的關係可以設定 關係型資料庫的典型概念 資料庫 資料的倉庫。表 資料...