Etcd是CoreOS基于Raft協(xié)議開發(fā)的分布式key-value存儲(chǔ),可用于服務(wù)發(fā)現(xiàn)、共享配置以及一致性保障(如數(shù)據(jù)庫選主、分布式鎖等)。
如,Etcd也可以作為微服務(wù)的注冊中心,比如SpringCloud也基于ETCD實(shí)現(xiàn)了注冊中心功能,可以替代earka,具體參考:Spring Cloud Etcd
在分布式系統(tǒng)中,如何管理節(jié)點(diǎn)間的狀態(tài)一直是一個(gè)難題,etcd是專門為集群環(huán)境的服務(wù)發(fā)現(xiàn)和注冊而涉及,它提供了數(shù)據(jù)TTL失效、數(shù)據(jù)改變監(jiān)視、多值、目錄監(jiān)聽、分布式鎖原子操作等功能,可以方便的跟蹤并管理集群節(jié)點(diǎn)的狀態(tài)。
Etcd被形容為Kubernetes集群的大腦,是 Kubernetes的關(guān)鍵組件,因?yàn)樗鎯?chǔ)了集群的整個(gè)狀態(tài):其配置,規(guī)格以及運(yùn)行中的工作負(fù)載的狀態(tài)。
在Kubernetes世界中,etcd用作服務(wù)發(fā)現(xiàn)的后端,并存儲(chǔ)集群的狀態(tài)及其配置。
Etcd被部署為一個(gè)集群,幾個(gè)節(jié)點(diǎn)的通信由Raft算法處理。在生產(chǎn)環(huán)境中,集群包含奇數(shù)個(gè)節(jié)點(diǎn),并且至少需要三個(gè)。
特點(diǎn)
etcd作為一個(gè)受到ZooKeeper與doozer啟發(fā)而催生的項(xiàng)目,除了擁有與之類似的功能外,更專注于以下四點(diǎn)。
簡單:基于HTTP+JSON的API讓你用curl就可以輕松使用。
安全:可選SSL客戶認(rèn)證機(jī)制。
快速:每個(gè)實(shí)例每秒支持一千次寫操作。
可信:使用Raft算法充分實(shí)現(xiàn)了分布式。
? ? ? ? 簡單:curl可訪問的用戶的API(HTTP + JSON)
? ? ? ? 安全:可選的SSL客戶端證書認(rèn)證
? ? ? ? 快速:單實(shí)例每秒1000次寫操作
? ? ? ? 可靠:使用Raft算法保證一致性
主要功能
? ? ? ? 1. 基本的key-value存儲(chǔ)
? ? ? ? 2. 監(jiān)聽機(jī)制
? ? ? ? 3. key的過期及續(xù)約機(jī)制, 用于監(jiān)控和服務(wù)發(fā)現(xiàn)
? ? ? ? 4. 原子Compare And Swap和Compare And Delete, 用于分布式鎖和leader選舉
架構(gòu)
基礎(chǔ)模塊介紹
client 層: 包含 client v2 和 v3 兩個(gè)大版本 API 客戶端
API 網(wǎng)絡(luò)層:主要包含 client 訪問 server 和 server 節(jié)點(diǎn)之間的通信協(xié)議。client 訪問 server 分為兩個(gè)版本:v2 API 采用 HTTP/1.x 協(xié)議,v3 API 采用 gRPC 協(xié)議。server 之間的通信:是指節(jié)點(diǎn)間通過 Raft 算法實(shí)現(xiàn)數(shù)據(jù)復(fù)制和 Leader 選舉等功能時(shí)使用的 HTTP 協(xié)議
Raft 算法層:實(shí)現(xiàn)了 Leader 選舉、日志復(fù)制、ReadIndex 等核心算法特性,用于保障 etcd 多節(jié)點(diǎn)間的數(shù)據(jù)一致性、提升服務(wù)可用性等,是 etcd 的基石和亮點(diǎn)
功能邏輯層:etcd 核心特性實(shí)現(xiàn)層。如典型的 KVServer 模塊、MVCC 模塊、Auth 鑒權(quán)模塊、Lease 租約模塊、Compactor 壓縮模塊等,其中 MVCC 模塊主要有 treeIndex 模塊和 boltdb 模塊組成
存儲(chǔ)層:包含預(yù)寫日志 WAL 模塊、快照 Snapshot 模塊、 boltdb 模塊,其中 WAL 可保障 etcd crash 后數(shù)據(jù)不丟失,boltdb 則保存了集群元數(shù)據(jù)和用戶寫入的數(shù)據(jù)。
數(shù)據(jù)寫入流程
client 發(fā)起一個(gè)更新 hello 為 world 請求后
若 Leader 收到寫請求,它會(huì)將此請求持久化到 WAL 日志,并廣播給各個(gè)節(jié)點(diǎn)
a. 若一半以上節(jié)點(diǎn)持久化成功,則該請求對應(yīng)的日志條目被標(biāo)識為已提交
b. 之后,etcdserver 模塊異步從 Raft 模塊獲取已提交的日志條目,應(yīng)用到狀態(tài)機(jī)(boltdb等)
?
Kubernetes 中的 Etcd
在Kubernetes集群的上下文中,etcd實(shí)例可以作為Pod部署在master節(jié)點(diǎn)上(這是我們將在本文中使用的示例)。文章來源:http://www.zghlxwxcb.cn/news/detail-692269.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-692269.html
到了這里,關(guān)于k8s etcd 簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!