互聯網技術發展真的快,層出不窮的新技術,最近專案使用到了
etcd
,自己之前在部署k8s集群的時候玩過,但是并沒有系統的學習,正好趁這個機會,系統性的學習下,文章中的內容有些是來自官方檔案,有些是來自網上的資料,有些是自己的思考,如果有不錯的地方,請不吝賜教,大家有好的教程,也歡迎評論區留言,學習學習,感謝感謝!
這一系列文章是etcd的入門教程,并不是深入的教程,適合像我這種對 etcd 了解不深入或者完全不了解的同學,大牛請繞道,
1、什么是etcd
etcd官網
etcd-github地址
對于 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則保存了集群元資料和用戶寫入資料,
參考資料:
bilibili視頻教程
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/551580.html
標籤:NoSQL
下一篇:返回列表