【星海出品】分布式存儲數據庫etcd

etcd 數據庫由 CoreOS 公司創建。

https://github.com/etcd-io/etcd

api信息
https://etcd.io/docs/v3.5/dev-guide/api_reference_v3/
etcdctl --help

etcd 最初由 CoreOS 公司開發,作為其核心項目之一。
CoreOS 成立于 2013 年,專注于容器化技術(如 Linux 容器、rkt 容器運行時)和分布式系統基礎設施。

2018 年,CoreOS 被 Red Hat 收購(后 Red Hat 又并入 IBM)

輕量級、高可用的鍵值存儲,用于存儲分布式系統的關鍵元數據(如服務發現、配置管理)。

具有強一致性、高可靠性和易用性。

ETCD 是一個高可用的分布式鍵值key-value數據庫,可用于服務發現。

etcd 存儲了 K8s 集群的所有狀態(如 Pod 定義、Service 配置、節點信息),是控制平面的“大腦”。
基于 Raft 共識算法,提供強一致性、高可用性,支持 watch 機制實現實時數據同步。

K8S API 服務器接收到請求后,會驗證請求格式和內容。通過驗證的請求會被存儲到 etcd(Kubernetes 的分布式數據庫)中。
對象創建:一旦存儲在 etcd 中,Pod 就被正式創建,標記為 Pending 狀態。

Raft 算法

https://www.youtube.com/watch?v=YbZ3zDzDnrw&feature=youtu.be

角色
Leader選舉(Leader election)
日志復制(Log replication)
安全性(Safety)
日志壓縮(Log compaction)

Raft將系統中的角色分為領導者(Leader)、跟從者(Follower)和候選者(Candidate)

Leader:接受客戶端請求,并向Follower同步請求日志,當日志同步到大多數節點上后告訴Follower提交日志。
Follower:接受并持久化Leader同步的日志,在Leader告之日志可以提交之后,提交日志。
Candidate:Leader選舉過程中的臨時角色。

Raft 任意時刻最多只有一個Leader,正常工作期間只有Leader和Followers。
Raft算法將時間分為一個個的周期(term)
選舉Leader之后,Leader會在整個周期內管理整個集群
如果Leader選舉失敗,該term就會因為沒有Leader而結束。
沒有服務器贏得多數的選票,Leader選舉失敗,等待選舉時間超時后發起下一次選舉。

leader會定期發送心跳,根據唯一Term標識進行通信
選舉超時隨機化:節點在超時時間內未收到leader心跳會發起選舉,但超時時間隨機化(如150ms-300ms),確保大多數情況下只有一個節點率先發起選舉。

Follower將其當前term加一然后轉換為Candidate。
它首先給自己投票并且給集群中的其他服務器發送 RequestVote RPC。

當舊leader恢復時,它會發現當前Term已超過自己的Term,立即切換為Follower狀態,并接受新leader的日志。
如果舊leader在失聯期間提交了部分日志,新leader會通過日志復制機制(AppendEntries RPC)強制舊leader回退沖突日志,確保全局一致性。

日志沖突處理:如果舊leader在失聯期間提交了部分日志,新leader會通過日志復制機制(AppendEntries RPC)強制舊leader回退沖突日志,確保全局一致性。

Raft要求leader必須獲得超過半數的節點確認(quorum)才能提交日志。即使網絡分區導致部分節點隔離,只有擁有多數節點的分區能選舉新leader,另一分區無法形成有效選舉。

Raft保證新leader一定包含所有已提交的日志(通過RequestVote階段的日志完整性檢查),避免日志分叉。

如果leader突然崩潰導致缺少了一條followers的條目,則Leader為了使Followers的日志同自己的一致,Leader需要找到Followers同它的日志一致的地方,然后覆蓋Followers在該位置之后的條目。
當 leader 和 follower 日志沖突的時候,leader 將校驗 follower 最后一條日志是否和 leader 匹配,如果不匹配,將遞減查詢,直到匹配,匹配后,刪除沖突的日志。這樣就實現了主從日志的一致性。
Leader會通過RPC向follower發出日志復制,等待所有的follower復制完成,這個過程是阻塞的。
老的leader里面沒提交的數據會回滾,然后同步新leader的數據。

持久化

etcd 通過 WAL + Snapshot 的組合
日志會定期壓縮,帶有快照功能
Leader 節點會保留所有未提交的日志條目,但已提交的日志會在以下條件觸發壓縮

已接收10000條日志條目,或者超過5分鐘

日志保留策略:快照生成后,所有早于該快照的日志會被標記為可刪除。

每個節點上的kubelet定期向API Server上報節點狀態(如CPU、內存、磁盤使用情況),API Server將這些信息寫入etcd。
當創建Pod時,API Server將Pod的元數據(如名稱、標簽、容器鏡像等)寫入etcd。

調度器從etcd讀取節點狀態和Pod元數據,基于算法(如資源匹配、親和性規則)選擇最佳節點,并將調度結果寫回etcd。

etcd使用Raft算法保證強一致性,確保所有節點看到的數據視圖一致。這對調度器的決策至關重要,避免“裂腦”問題。

etcd通過多版本控制系統(MVCC)保存鍵值的所有歷史變更
默認保留最近1000個版本,舊版本會被合并到歷史文件。
MVCC版本號遞增:每次修改操作(如 PUT、DELETE)均觸發全局版本號加1,支持數據追溯和并發控制。
啟動參數作用:

建議通過 etcdctl endpoint status 或監控工具(如 Prometheus)觀察版本號和存儲使用情況,結合業務需求調整參數配置。

空間問題

–auto-compaction-retention
作用:設置自動壓縮(Auto-Compaction)的保留策略,控制舊版本數據的保留時間。
原理:ETCD會定期清理低于指定保留時間的舊版本數據,釋放存儲空間。
配置示例:
–auto-compaction-retention=1h:保留最近1小時內的數據,自動壓縮更早的版本。
若未配置此參數,默認禁用自動壓縮(需手動執行 compact 命令)。
–auto-compaction-mode:定義壓縮模式,可選 periodic(基于時間)或 revision(基于版本號)。
示例:–auto-compaction-mode=periodic --auto-compaction-retention=5m 表示每5分鐘壓縮一次舊數據。

–quota-backend-bytes
作用:設置后端存儲(Backend Storage)的配額,限制數據庫的最大大小。
原理:當數據庫大小超過配額時,ETCD會觸發警報或自動壓縮操作。
配置示例:
–quota-backend-bytes=8589934592:限制數據庫大小為8GB(默認值通常為2GB)。
若未配置此參數,使用默認配額(可能因版本不同而有所差異)。

參考文檔:https://cloud.tencent.com/developer/article/2182442?areaSource=102001.19&traceId=NJua_dMWh91JYgM2Cm7jT
在這里插入圖片描述

RPC

Raft 算法中服務器節點之間通信使用遠程過程調用(RPC)

RequestVote RPC:候選人在選舉期間發起。

AppendEntries RPC:領導人發起的一種心跳機制,復制日志也在該命令中完成。

InstallSnapshot RPC: 領導者使用該RPC來發送快照給太落后的追隨者。

外部etcd關聯

在 kubeadm 配置中指定外部 etcd
kubeadm init --config kubeadm-config.yaml

# kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
etcd:external:endpoints:- https://etcd-node1:2379- https://etcd-node2:2379- https://etcd-node3:2379caFile: /etc/ssl/etcd/ca.crtcertFile: /etc/ssl/etcd/client.crtkeyFile: /etc/ssl/etcd/client.key
靜態pod
# etcd-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: etcdnamespace: kube-system
spec:containers:- name: etcdimage: quay.io/coreos/etcd:v3.5.9command:- etcd- --advertise-client-urls=http://0.0.0.0:2379- --listen-client-urls=http://0.0.0.0:2379hostNetwork: truevolumes:- name: etcd-datahostPath:path: /var/lib/etcd
kubectl apply -f etcd-pod.yaml

網絡相關

Calico Source Code
https://github.com/projectcalico/calico

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903051.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025新版修復蛇年運勢測試風水起名系統源碼

2025新版修復蛇年運勢測試風水起名系統源碼 通過網盤分享的文件:2025xbfsysweb.rar 鏈接: https://pan.baidu.com/s/1r1MOkJJJMj9s9nQX_GzI3Q 提取碼: 9weh 備用下載地址:http://pan.1234f.com:5212/s/JK1uw

Vue3 Pinia

一、Pinia 核心概念 Pinia 是 Vue3 官方推薦的狀態管理庫,相比 Vuex 4,具有以下優勢: 更簡潔的 API(移除 mutations) 完整的 TypeScript 支持 支持組合式 API 自動代碼分割 輕量級(僅 1KB)…

音視頻小白系統入門課-4

本系列筆記為博主學習李超老師課程的課堂筆記,僅供參閱 往期課程筆記傳送門: 音視頻小白系統入門筆記-0音視頻小白系統入門筆記-1音視頻小白系統入門筆記-2音視頻小白系統入門筆記-3 將mp4文件轉換為yuv文件 ffmpeg -i demo.mp4 # 輸入文件-an …

6.2 內容生成與營銷:個性化內容創作與營銷策略優化

隨著消費者對個性化體驗的需求日益增長,傳統的內容創作與營銷方式已難以滿足市場競爭的需要。基于大語言模型(LLM)與智能代理(Agent)的技術為企業提供了全新的解決方案,能夠實現高效、精準、規模化的內容生…

kafka課后總結

Kafka是由LinkedIn開發的分布式發布 - 訂閱消息系統,具備高吞吐量、低延遲、可擴展性、持久性、可靠性、容錯性和高并發等特性。其主要角色包括Broker、Topic、Partition、Producer、Consumer、Consumer Group、replica、leader、follower和controller。消息系統中存…

DataStreamAPI實踐原理——計算模型

引入 通過前面我們對于Flink的理解,我們知道它吸收了 Dataflow 的理念,以及此前已有的流處理系統(如 S4、Storm、MillWheel)的經驗,實現了批流一體化的高效數據處理,并且通過靈活的窗口機制、事件時間與水…

項目筆記1:通用 Service的常見方法

通用 Service 通常封裝了常見的業務邏輯操作,以提高代碼的復用性和可維護性。不同的框架和業務場景下,通用 Service 的方法會有所差異,但一般都會包含一些基本的增刪改查(CRUD)操作,以下為你詳細介紹&#…

阿里云99機器總是宕機,實測還是磁盤性能差

阿里云99計劃總是宕機,經過反復排查,最終確認還是磁盤性能差。 阿里云99機器使用的磁盤類型是Entry云盤40GiB (2120 IOPS) 按照官方的一些數據,這個磁盤最小iops是1800最大是6000,實際使用中發現,這個6000值很虛,這個…

Fedora 43 計劃移除所有 GNOME X11 相關軟件包

Fedora 43 計劃移除所有 GNOME X11 相關軟件包,這是 Fedora 項目團隊為全面擁抱 Wayland 所做的重要決策。以下是關于此計劃的詳細介紹: 提案內容:4 月 23 日,Neal Gompa 提交提案,建議從 Fedora 軟件倉庫中移除所有 G…

魔幻預言手游》:職業介紹!

在《魔幻預言》手游中,共有武玄、魔魅、劍仙三大核心職業,各具特色且定位鮮明,以下為具體介紹: 一、武玄(戰士) 核心定位:近戰物理輸出與團隊增益擔當,兼具控制與防御能力。 戰斗風…

精益數據分析(27/126):剖析用戶價值與商業模式拼圖

精益數據分析(27/126):剖析用戶價值與商業模式拼圖 在創業和數據分析的領域中,每一次深入學習都是一次成長的契機。今天,我們繼續秉持共同進步的理念,深入研讀《精益數據分析》,剖析用戶價值的…

【SwitchyOmega安裝教程】

目錄 一、插件安裝 1. 下載安裝文件 2. 打開瀏覽器擴展安裝頁面 3. 安裝插件 二、界面詳情 三、配置信息 3.1 設置IP 1、查看IP地址信息 2、批量測試IP是否有效 3、點擊擴展程序,選擇 Proxy SwitchyOmega 4、 點擊選項進行配置 5、配置頁面 一、插件安裝 1…

矯平機終極指南:特殊材料處理、工藝鏈協同與全球供應鏈管理

一、特殊材料矯平:挑戰與創新解決方案 1. 高溫合金(如Inconel 718)處理 技術難點: 屈服強度高達1100 MPa,傳統矯平力不足 高溫下易氧化,需惰性氣體保護環境 解決方案: 采用雙伺服電機驅動&a…

反事實——AI與思維模型【82】

一、定義 反事實思維模型是一種心理認知模型,它指的是人們在頭腦中對已經發生的事件進行否定,然后構建出一種可能性假設的思維活動。簡單來說,就是思考“如果當時……,那么就會……”的情景。這種思維方式讓我們能夠超越現實的限制,設想不同的可能性和結果,從而對過去的…

Nginx:支持 HTTPS

文章目錄 Nginx 開啟 ssl 以支持 HTTPS1 生成本地證書2 開啟 ssl 以支持 HTTPS3 將 https 的請求轉發給 http 最終的 nginx.conf 如下 Nginx 開啟 ssl 以支持 HTTPS [!IMPORTANT] 在下文中,將采用如下定義。 HTTP端口: 80 HTTPS端口: 443 服務…

[計算機科學#2]:從繼電器到晶體管的電子計算機發展史(龐然大物的進化)

【核知坊】:釋放青春想象,碼動全新視野。 我們希望使用精簡的信息傳達知識的骨架,啟發創造者開啟創造之路!!! 內容摘要:本文講述了20世紀初至1950年代計算機技術的發展歷程…

【ESP32S3】Cache 框圖和操作

ESP32-S3 采用雙核共享 ICache (指令緩存) 和 DCache (數據緩存) 結構,如下圖所示。以便當 CPU 的指令總線和數據總線同時發起請求時,也可以迅速響應: Cache 的存儲空間與內部存儲空間可以復用。具體為 Internal SRAM0…

wireshark從HEX轉儲導入使用方法

官方資料: https://www.wireshark.org/docs/wsug_html_chunked/ChIOImportSection.html 方法1: 文本文件,純內容導入: ff ff ff ff ff ff 00 00 00 00 5f 0f 08 06 00 01 08 00 06 04 00 01 00 00 00 00 5f 0f 64 01 60 10 00 00 00 00 00 00 64 01 01…

【Android】四大組件之Activity

目錄 一、什么是Activity 二、如何創建和配置Activity 三、Activity 跳轉與數據傳遞 四、數據保存與恢復 五、Activity 啟動模式 六、自定義返回行為 七、復雜界面布局 你可以把Activity想象成手機屏幕上的一個“頁面”。比如,當你打開一個App時,…

uml類關系(實現、繼承,聚合、組合,依賴、關聯)

drawio和EA是架構設計時經常使用的畫圖工具。 drawio學習門檻低,使用靈活,但是功能僅僅限于畫圖。 EA學習門檻高,但是功能更加的豐富: ①在畫圖方面,EA嚴格滿足UML標準,EA中的圖和類是關聯的&#xff0c…