管理etcd的存儲空間配額

如何管理etcd的存儲空間配額 - 防止集群存儲耗盡指南

本文基于etcd v3.4官方文檔編寫

為什么需要空間配額?

在分布式系統中,etcd作為可靠的鍵值存儲,很容易成為系統瓶頸。當遇到以下情況時:

  • 應用程序頻繁寫入大量數據
  • 未及時清理歷史數據
  • 遭遇異常寫入流量

存儲空間可能會被快速耗盡,導致集群進入維護模式(僅能讀取和刪除)。通過設置空間配額,我們可以:

  1. 主動預防存儲耗盡
  2. 觸發提前預警機制
  3. 保持集群健康狀態

配置空間配額

啟動參數配置

# 設置集群最大存儲為2GB
etcd --quota-backend-bytes=2147483648

參數說明

  • 默認值:2GB (當使用默認的2GB最大請求時)
  • 最小值:建議不低于100MB
  • 單位:字節

運行時動態調整

# 查看當前配額配置
etcdctl endpoint status --write-out=table# 動態修改配額(需要v3.4+)
etcdctl put /quota/config '{"bytes":3221225472}'

監控空間使用

查看實時狀態

etcdctl endpoint status --write-out=json | jq '.[].Status'

關鍵指標說明:

{"header": {...},"version": "3.4.0","dbSize": 1048576,       // 當前數據大小"dbSizeInUse": 524288,   // 實際使用空間"leader": 123456789,"raftIndex": 234567890,"raftTerm": 12
}

空間警報機制

當使用量超過90%閾值時:

# 手動觸發警報檢查
etcdctl alarm list# 警報輸出示例
active alarm(s): NOSPACE

空間維護操作

1. 數據壓縮

# 獲取當前修訂版本
rev=$(etcdctl endpoint status --write-out=json | jq -r '.[].Status.header.revision')# 執行壓縮(保留最近1000個修訂版本)
etcdctl compact $((rev - 1000))

2. 碎片整理

# 對每個節點執行(需要逐個節點操作)
etcdctl defrag# 帶端點參數執行
etcdctl --endpoints=localhost:2379 defrag

3. 警報解除

完成維護后:

etcdctl alarm disarm

最佳實踐

  1. 監控策略

    • 設置Prometheus監控指標:
      etcd_mvcc_db_total_size_in_bytes
      etcd_mvcc_db_total_size_in_use_in_bytes
      
    • 配置Alertmanager規則:
      - alert: EtcdApproachingQuotaexpr: etcd_mvcc_db_total_size_in_use_in_bytes / etcd_mvcc_db_total_size_in_bytes > 0.85for: 5m
      
  2. 容量規劃

    • 常規場景:保留20-30%緩沖空間
    • 高頻寫入場景:保留40%緩沖空間
    • 計算公式:
      預估容量 = 平均寫入量/秒 × 保留天數 × 86400 × 安全系數(1.5-3)
      
  3. 維護窗口

    • 每天執行輕量級狀態檢查
    • 每周執行碎片整理
    • 每月評估配額容量

注意事項

?? 關鍵警告

  1. 修改配額不會自動觸發數據壓縮
  2. 生產環境禁止關閉配額檢查
  3. 碎片整理期間節點不可用
  4. 壓縮操作不可逆
  5. 跨版本兼容性:
    • v3.3+ 支持動態配額修改
    • v3.2及以下需要重啟生效

故障排查

常見問題處理

Q1: 集群已觸發NOSPACE警報

# 步驟1: 立即停止寫入
# 步驟2: 執行緊急壓縮
etcdctl compact $(etcdctl endpoint status --write-out=json | jq -r '.[].Status.header.revision')
# 步驟3: 碎片整理
etcdctl defrag
# 步驟4: 解除警報
etcdctl alarm disarm

Q2: 寫入返回"etcdserver: mvcc: database space exceeded"

# 檢查碎片率
du -sh /var/lib/etcd/member/snap/db 
etcdctl endpoint status
# 如果物理大小 > 邏輯大小,立即執行defrag

總結

合理的空間配額管理是etcd集群穩定的基石。通過:

  • 預防性容量規劃
  • 自動化監控告警
  • 定期維護操作

可以確保etcd集群持續可靠地提供服務。建議結合具體業務場景,制定適合的配額策略和維護計劃。

官方文檔參考:https://etcd.io/docs/v3.4/op-guide/maintenance/#space-quota
``

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

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

相關文章

調用騰訊云批量文本翻譯API翻譯srt字幕

上一篇文章介紹了調用百度翻譯API翻譯日文srt字幕的方法。百度翻譯API是get方式調用,參數都放在ur中,每次調用翻譯文本長度除了接口限制外,還有url長度限制,而日文字符通過ur轉碼后會占9個字符長度,其實從這個角度來講…

Python aiortc API

本研究的主要目的是基于Python aiortc api實現抓取本地設備媒體流(攝像機、麥克風)并與Web端實現P2P通話。本文章僅僅描述實現思路,索要源碼請私信我。 1 demo-server解耦 1.1 原始代碼解析 1.1.1 http服務器端 import argparse import …

記錄 | WPF基礎學習Style局部和全局調用

目錄 前言一、Style1.1 例子1.2 為樣式起名字1.3 BasedOn 繼承上一個樣式 二、外部StyleStep1 創建資源字典BaseButtonStyle.xamlStep2 在資源字典中寫入StyleStep3 App.xaml中寫引用路徑【全局】Step4 調用三、代碼提供四、x:Key和x:Name區別 更新時間 前言 參考文章&#xff…

如果$nextTick內部拋出錯誤,如何處理?

如果 $nextTick 內部拋出錯誤,可以通過在回調函數中使用 try…catch 語句來捕獲和處理這些錯誤。由于 $nextTick 是異步執行的,因此錯誤不會直接影響到 Vue 的運行,但捕獲錯誤可以幫助你進行更好的錯誤處理和調試。 一、使用 try…catch 以下是如何在 $nextTick 中捕獲錯誤…

吳恩達深度學習——卷積神經網絡實例分析

內容來自https://www.bilibili.com/video/BV1FT4y1E74V,僅為本人學習所用。 文章目錄 LeNet-5AlexNetVGG-16ResNets殘差塊 1*1卷積 LeNet-5 輸入層:輸入為一張尺寸是 32 32 1 32321 32321的圖像,其中 32 32 3232 3232是圖像的長和寬&…

Spring Boot 自動裝配原理與優化實踐

在 Java 開發領域,Spring Boot 以其 “約定優于配置” 的理念,極大地簡化了 Spring 應用的開發和部署過程,成為了眾多開發者的首選框架。它通過自動裝配機制,讓開發者能夠快速搭建一個功能完備的應用,而無需進行繁瑣的…

【Uniapp-Vue3】z-paging插件組件實現觸底和下拉加載數據

一、下載z-paing插件 注意下載下載量最多的這個 進入Hbuilder以后點擊“確定” 插件的官方文檔地址: https://z-paging.zxlee.cn 二、z-paging插件的使用 在文檔中向下滑動,會有使用方法。 使用z-paging標簽將所有的內容包起來 配置標簽中的屬性 在s…

【B站保姆級視頻教程:Jetson配置YOLOv11環境(七)Ultralytics YOLOv11配置】

Jetson配置YOLOv11環境(7)Ultralytics YOLOv11環境配置 文章目錄 1. 下載YOLOv11 github項目2. 安裝ultralytics包3. 驗證ultralytics安裝3.1 下載yolo11n.pt權重文件3.2 推理 1. 下載YOLOv11 github項目 創建一個目錄,用于存放YOLOv11的項目…

第二天:系統從BIOS/UEFI到GRUB/bootloader的啟動過程

目錄 **一、BIOS/UEFI初始化階段****二、引導加載程序(GRUB)的啟動過程****1. BIOS模式下的GRUB分階段加載****2. UEFI模式下的GRUB加載** **三、操作系統內核加載與初始化****四、關鍵組件與配置文件****五、故障排查與恢復****總結**常見問題如何在UEF…

es官方go客戶端創建ik索引并進行查詢操作

es-go client引入gomod go get github.com/elastic/go-elasticsearch/v8latest連接es服務器(不經過安全校驗) cfg : elasticsearch.Config{Addresses: []string{"http://localhost:9200",}, } es, err : elasticsearch.NewClient(cfg) if err ! nil {pa…

【容器技術01】使用 busybox 構建 Mini Linux FS

使用 busybox 構建 Mini Linux FS 構建目標 在 Linux 文件系統下構建一個 Mini 的文件系統,構建目標如下: minilinux ├── bin │ ├── ls │ ├── top │ ├── ps │ ├── sh │ └── … ├── dev ├── etc │ ├── g…

【C語言系列】深入理解指針(5)

深入理解指針(5) 一、sizeof和strlen的對比1.1sizeof1.2strlen1.3sizeof和strlen的對比 二、數組和指針筆試題解析2.1 一維數組2.2 字符數組2.2.1代碼1:2.2.2代碼2:2.2.3代碼3:2.2.4代碼4:2.2.5代碼5&#…

標志的推理

下面的討論是我對《對編程實現擬人智能可行性的論證》這篇文章的“賦值與對象的標志”這一節的展開討論。 標志能夠使我們更好的思維(比如用輪廓標記物體對象,用興奮強度標記回憶情況等等)。有思維標志、信息標志,單純標志、組合…

【藍橋杯嵌入式】2_LED

1、電路圖 74HC573是八位鎖存器,當控制端LE腳為高電平時,芯片“導通”,LE為低電平時芯片“截止”即將輸出狀態“鎖存”,led此時不會改變狀態,所以可通過led對應的八個引腳的電平來控制led的狀態,原理圖分析…

Diskgenius系統遷移之后無法使用USB啟動

前言 本文用于記錄系統遷移中遇到的問題及解決方法,如有不對請指出,謝謝! 現象 使用DiskGenius進行系統遷移后,使用USB啟動失敗,反復在品牌logo和黑屏之間切換,期間還會在左上角顯示”reset system“報錯…

使用 Postman 進行 API 測試:從入門到精通

使用 Postman 進行 API 測試:從入門到精通 使用 Postman 進行 API 測試:從入門到精通一、什么是 API 測試?二、Postman 簡介三、環境搭建四、API 測試流程1. 收集 API 文檔2. 發送基本請求示例:發送 GET 請求示例代碼(…

Android Studio:Application 和 Activity的區別

Application 和 Activity 是 Android 中非常重要的兩個組件,它們分別負責不同的生命周期管理和應用的不同層次的操作。 Application 是應用級別的生命周期管理,它在整個應用運行時只有一個實例,負責應用的全局初始化和資源管理。Activity 是…

Mac本地體驗LM studio

博主很懶,不愛打字! 1、LM studio官網:LM Studio - Discover, download, and run local LLMs 2、下載DMG文件,安裝 3、使用vscode工具,commandshiftH【全局替換功能】,選擇目錄/Applications/LM\ Studio…

SQL Server 數據庫備份指南

SQL Server備份是數據庫維護的日常工作。備份的目的是在發生數據丟失、損壞甚至硬件故障時將數據庫和事務日志恢復到最近的時間點。您可以借助專業的SQL Server備份軟件,操作起來更方便。前提需要安裝SQL Server Management Studio (SSMS)工具。 對于 SQL 數據庫備份,有多種…

我最近在干什么【2】

前言 這系列的上一篇是2024.12.05寫的,現在是2025.02.06,這都兩個月🤔小久。 不是完整全面的技術分享,話題聚焦個人成長(學的技術、了解到的信息、看的書……) 方面。文章偏意識流點,單純分享我…