etcd 是一種分散式鍵值儲存系統,通常用於保存分散式系統中的配置數據和元數據。
它是一個高可用、高一致性且易於使用的儲存解決方案,由 CoreOS 開發並以 Go 語言編寫。
etcd 作為 Kubernetes 的後端資料存儲,保存所有的集群狀態資訊,如節點、Pod、配置、Secret 等。
etcd 可以作為 pod 部署在主節點中,以便在 Kubernetes 中實現高可用性。
外部部署,以實現復原能力和安全性
etcd 可以作為一個中心化的配置管理系統,為分散式系統提供一個一致的配置數據儲存資訊。
這使得系統的各個節點可以存取、共享和同步同一組配置數據。
透過使用 etcd,開發者和運維人員可以:
假設我們有一個分散式 Web 服務,每個服務節點都需要訪問一組 API 設定,比如 API 金鑰和 API 路徑。
我們可以將這些設定存儲在 etcd 中,當設定變更時,所有服務節點都可以自動更新其設定。
/api-config:
key: "API_KEY_12345"
path: "/api/v1/"
etcd 允許服務在啟動時將自己註冊到 etcd 中,這樣其它服務就可以發現並連接到它們。
這對於動態和彈性伸縮的系統非常重要,因為服務的實例數量和位置可能經常變化。
一個服務可以將自己的資訊寫入 etcd,其他服務則可以監聽 etcd 中的服務列表變化,並動態調整連接。
/service-registry:
service-1:
address: "192.168.1.10:8080"
status: "healthy"
service-2:
address: "192.168.1.11:8080"
status: "unhealthy"
etcd 提供了一種分散式鎖定機制,允許多個客戶端在共享資源時協調和同步操作。
這對於需要確保某些操作的唯一性或順序性的情況非常有用。
假設我們有一個需要確保只有一個實例在執行特定任務的應用程序。
我們可以使用 etcd 的分散式鎖來實現這個功能。
# 使用 etcd 進行分散式鎖定
from etcd3 import Client
etcd = Client()
lock = etcd.lock("my-distributed-lock")
with lock:
# 執行需要鎖定的操作
pass
etcd 提供了監聽(watch)功能,允許客戶端監視特定鍵或目錄下的數據變化。
當數據發生變化時,etcd 會自動通知監聽者。
假設我們有一個服務需要監聽 API 配置的變化,當配置更新時,服務可以即時調整其設定。
import etcd3
def callback(event):
print("Configuration changed:", event.key, event.value)
etcd = etcd3.client()
etcd.watch("/api-config", callback)