互聯網技術發展真的快,層出不窮的新技術。最近項目使用到了etcd,自己之前在部署k8s集群的時候玩過,但是並沒有系統的學習。正好趁這個機會,系統性的學習下。文章中的內容有些是來自官方文檔,有些是來自網上的資料,有些是自己的思考。如果有不錯的地方,請不吝賜教,大家有好的教程,也歡迎評論區留言,學習學習 ...
互聯網技術發展真的快,層出不窮的新技術。最近項目使用到了
etcd
,自己之前在部署k8s集群的時候玩過,但是並沒有系統的學習。正好趁這個機會,系統性的學習下。文章中的內容有些是來自官方文檔,有些是來自網上的資料,有些是自己的思考。如果有不錯的地方,請不吝賜教,大家有好的教程,也歡迎評論區留言,學習學習。感謝感謝!
這一系列文章是etcd的入門教程,並不是深入的教程,適合像我這種對 etcd 瞭解不深入或者完全不瞭解的同學,大牛請繞道。
1、什麼是etcd
對於 etcd 的定義,我們來看一看官方是如何描述的。描述如下:A distributed, reliable key-value store for the most critical data of a distributed system
。翻譯過來就是:一個分散式、可靠的鍵值存儲系統,用於存儲分散式系統中最關鍵的數據。
對於上面這句話,我們可以提取出來幾個關鍵詞,分散式、可靠的、鍵值存儲系統、最關鍵的數據。對於在互聯網行業待過一段時間的同學,應該對前面三個詞比較熟悉,最後一個最關鍵的數據
如何理解呢?我說說自己的理解。
etcd 中存儲的是這個分散式系統中最重要的數據,例如配置信息、元數據等,這些數據對於整個分散式系統而言是至關重要的,一旦出現問題,就可能導致系統出現故障或者問題。
通過上面,我們知道了 etcd 是分散式系統中的基礎設施,為分散式系統提供了可靠的數據存儲和管理能力。它是由CoreOS開發的,k8s 中的信息就是存儲在 etcd 中,是 k8s 集群管理工具的核心組件之一。
etcd採用 Raft
一致性演算法來保證數據的一致性和可靠性,支持多節點部署,可以容忍節點故障和網路分區等故障情況。etcd的使用非常廣泛,除了作為 k8s 的核心組件之一,還可以用於服務發現、配置管理、分散式鎖
等場景。etcd提供了簡單易用的API,支持多種語言的客戶端,可以方便地集成到各種應用中。
2、etcd的應用場景
通過上面的瞭解,感覺 etcd 還是挺牛逼的,那 etcd的應用場景一般在那些地方呢?
-
服務發現:etcd可以存儲服務的地址和埠信息,例如Web服務、資料庫服務等。客戶端可以通過etcd API查詢服務的地址和埠信息,從而實現服務發現和負載均衡。
-
分散式鎖:etcd可以實現分散式鎖,多個進程可以通過etcd API競爭鎖資源,從而實現分散式同步和協調。
-
集群管理:etcd可以存儲集群的狀態信息,例如節點狀態、領導者選舉結果等。應用程式可以通過etcd API查詢集群狀態信息,從而實現集群管理和監控。
-
分散式任務調度:etcd可以存儲任務的狀態信息,例如任務的執行狀態、執行結果等。應用程式可以通過etcd API查詢任務狀態信息,從而實現分散式任務調度和監控。
-
配置管理:etcd可以存儲應用程式的配置信息,例如資料庫連接信息、日誌級別、緩存大小等。應用程式可以通過etcd API讀取這些配置信息,從而實現動態配置管理。
-
容器編排:k8s中集群管理的核心組件之一就是etcd。
上面是 etcd 的一些常用的場景,等大家熟悉 etcd 後,可以根據自己的實際需求,來選擇是否需要使用到 etcd 這個組件。
3、為什麼使用etcd
下麵再來說說 etcd 的優點,這樣跟同事吹牛的時候或者面試的時候,可以吹一吹,哈哈!
- 可靠性:etcd採用
Raft演算法
實現分散式一致性,保證數據的可靠性和一致性。 - 高可用性:etcd支持多節點部署,節點之間通過
Raft協議
進行數據同步和選舉,保證系統的高可用性。 - 靈活性:etcd提供了RESTful API和gRPC API,可以方便地與各種編程語言進行交互。
- 安全性:etcd支持TLS加密和訪問控制,可以保證數據的安全性。
- 可擴展性:etcd支持水平擴展,可以通過添加更多的節點來提高系統的性能和容量。
4、etcd架構圖
上圖是 etcd 基礎架構圖,按照分層模型,etcd可分為Client層、API網路層、Raft演算法層、邏輯層和存儲層
。這些層的功能如下:
-
Client層:Client層包括client v2 和v3兩個大版本API客戶端,提供了簡介易用的API,同時支持負載均衡、節點間故障自動轉移,可極大降低業務使用etcd複雜度,提升開發效率、增強服務的可用性。
-
API網路層:
API網路層主要包括client訪問server和server節點之間的通信協議
。一方面,client訪問etcd server 的API分為V2和V3兩大版本。V2 API使用http/1.x協議,v3 API使用gRPC協議。同時v3通過etcd grpc-gateway 組件也支持 http/1.x 協議,便於各種語言的服務調用。另一方面,server之間通信協議,是指節點間通過Raft演算法實現數據複製和Leader選舉等功能時使用的HTTP協議。 -
Raft演算法層:
Raft演算法層實現了Leader選舉、日誌複製、ReadIndex等核心演算法特性,用於保障etcd多個節點間的數據一致性,提升服務可用性等
,是etcd的基石。 -
邏輯層:etcd核心特性實現層,如典型的KVserver模塊、MVCC模塊、Auth鑒權模塊、Lease租約模塊、Compactor壓縮模塊等,其中MVCC模塊主要由treeIndex模塊和boltdb模塊組成。
-
存儲層:存儲層包含預習日誌(WAL)模塊、快照(Snapshot)模塊、boltdb模塊。其中WAL可保障etcd crash後數據不丟失,boltdb則保存了集群元數據和用戶寫入數據。
參考資料: