1、etcd基礎介紹

来源:https://www.cnblogs.com/huageyiyangdewo/archive/2023/05/03/17369354.html
-Advertisement-
Play Games

互聯網技術發展真的快,層出不窮的新技術。最近項目使用到了etcd,自己之前在部署k8s集群的時候玩過,但是並沒有系統的學習。正好趁這個機會,系統性的學習下。文章中的內容有些是來自官方文檔,有些是來自網上的資料,有些是自己的思考。如果有不錯的地方,請不吝賜教,大家有好的教程,也歡迎評論區留言,學習學習 ...


互聯網技術發展真的快,層出不窮的新技術。最近項目使用到了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視頻教程


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 常量 const double PI = 3.1415926; 常量名命名一般使用大寫字母 枚舉類型 開發一個游戲,游戲角色有法師(Mage)、射手(Archer)、刺客(Assassin)、坦克(Tank)、鋪助(Support)、戰士(Warrior),等不同類型。 ❓如何存儲游戲角色 使用in ...
  • 接了個活, 寫個 WPF 上位機用 PCAN 或 ECAN 和單片機通訊, 讀取感測器數據. 程式邏輯是 : 選擇連接類型 PCAN / ECAN, 選擇波特率, 選擇通道號, 輸入查詢間隔, 連接設備. 然後開啟一個後臺線程迴圈發送讀取指令逐個讀取感測器數據. 使用 PCAN 時, 連接和收發數據 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx上第三級啟動保障 - SDMMC manufacture模式。 如果你在 i.MXRT1xxx 板卡上嘗試過從 SD/eMMC 卡啟動,你會發現一個奇怪的現象:如果把 SD/eMMC 卡還插著(並且裡面保留正常的 A ...
  • https://github.com/zk2013/windows_remote_lock_unlock_screen 將生成的DLL註冊至註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\ ...
  • 以沁恆官方的定製版 RISC-V Embedded GCC 和 OpenOCD 為例說明 Ubuntu 下如何配置基於Makefile的開發環境, 如何進行命令行Debug, 以及VSCode下Debug環境的配置 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MXRT1xxx系列MCU的SD/eMMC卡啟動。 最近在恩智浦官方社區上支持了一個關於 i.MXRT 從 SD 卡啟動的案例,這讓痞子衡想起了一年前寫過的一篇《i.MXRT600從SD/eMMC啟動》,那一篇重點介紹了基於 ...
  • (DCL語言) 一、概述 數據控制語言,用來定義訪問許可權和安全級別。主要包含包括grant,revoke 關鍵字 grant 授予許可權 revoke 回收許可權 二 、授權 2.1 語法格式 GRANT priv_type [(column_list)] [, priv_type [(column_l ...
  • 功能05-好友關註 6.功能05-好友關註 6.1關註和取關 6.1.1需求分析 在探店圖文的詳情頁面中,可以關註發佈筆記的作者: 關註和取關:點擊關註按鈕就會發出請求(上圖):http://127.0.0.1:8080/api/follow/2/true(2是關註的用戶id,最後面的參數可以是tr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...