etcd基礎架構


介紹

​ etcd是一個高可用的 Key/Value 存儲系統,主要用於分享配置和服務發現。它是一款雲原生時代的首選元數據存儲產品,已經成為雲原生和分布式系統的存儲基石。

簡要基礎架構圖

Client層

  • 組成

    • client v2 API 客戶端庫

    • client v3 API 客戶端庫

  • 作用

    • 提供了簡潔易用的 API

    • 支持負載均衡、節點間故障自動轉移

    • 極大降低業務使用 etcd 復雜度,提升開發效率、服務可用性

API 網絡層

  • client 訪問 server的通信協議

    • v2API

      • HTTP/1.x 協議
    • v3API

      • gRPC 協議

      • HTTP/1.x 協議(通過 etcd grpc-gateway 組件支持)

  • server 節點之間的通信協議

    • 節點間通過 Raft 算法實現數據復制和 Leader 選舉等功能時使用的 HTTP 協議

Raft 算法層(基石和亮點)

  • 核心算法組成

    • Leader 選舉

    • 日志復制

    • ReadIndex

  • 作用

    • 用於保障 etcd 多個節點間的數據一致性、提升服務可用性等

功能邏輯層(核心特性實現層)

  • KVServer 模塊

    • 限速判斷(保證集群穩定性,避免雪崩)

    • 生成一個唯一的 ID,將此請求關聯到一個對應的消息通知 channel,然后向 Raft 模塊發起(Propose)一個提案(Proposal)

    • 等待此 put 請求,等待寫入結果通過消息通知 channel 返回或者超時。etcd 默認超時時間是 7 秒(5 秒磁盤 IO 延時 +2*1 秒競選超時時間),如果一個請求超時未返回結果,則可能會出現 etcdserver: request timed out 錯誤

  • MVCC 模塊

    • 讀場景

    • 寫場景

    • treeIndex 模塊(內存樹形索引模塊)

      • 保存用戶 key 和版本號的映射關系
    • boltdb 模塊

      • 基於 B+ tree 實現的 key-value 鍵值庫,支持事務,提供 Get/Put 等簡易 API 給 etcd 操作

      • 每次修改操作,生成一個新的版本號 (revision),以版本號為 key, value 為用戶 key-value 等信息組成的結構體

      • 數據隔離

        • boltdb 里每個 bucket 類似對應 MySQL 一個表

          • 用戶的 key 數據存放的 bucket 名字的是 key

          • etcd MVCC 元數據存放的 bucket 是 meta

  • Auth 鑒權模塊

  • Lease 租約模塊

  • Compactor 壓縮模塊

  • Quota 模塊(配額)

  • Apply模塊

存儲層

  • 預寫日志 (WAL) 模塊

    • 可保障 etcd crash 后數據不丟失
  • 快照 (Snapshot) 模塊

  • boltdb 模塊

    • 保存了集群元數據和用戶寫入的數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM