ETCD數據空間壓縮清理


ETCD數據空間壓縮清理

 

場景:做etcd數據鏡像的時候出現如下錯誤  Error: etcdserver: mvcc: database space exceeded

通過查找官方文檔https://coreos.com/etcd/docs/latest/op-guide/maintenance.html 確定解決方案,通過執行命令壓縮etcd空間並且整理空間碎片即可

命令如下:

復制代碼
#使用API3
export ETCDCTL_API=3
# 查看告警信息,告警信息一般 memberID:8630161756594109333 alarm:NOSPACE
etcdctl --endpoints=http://127.0.0.1:2379 alarm list

# 獲取當前版本
rev=$(etcdctl --endpoints=http://127.0.0.1:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
# 壓縮掉所有舊版本
etcdctl --endpoints=http://127.0.0.1:2379 compact $rev
# 整理多余的空間
etcdctl --endpoints=http://127.0.0.1:2379 defrag
# 取消告警信息
etcdctl --endpoints=http://127.0.0.1:2379 alarm disarm
復制代碼

 

數據壓縮完成之后數據大小和內存占用信息如下:

 

 通過上圖可以看出,壓縮操作執行完之后數據庫大小和內存占用率下降了很多,整體的性能也會有所提升

 

說明:

壓縮ETCD空間也可以減少etcd程序的內存占用量,提高etcd性能,在沒有問題的時候提前進行壓縮也是明智的選擇

 

通過線上實踐發現還是設置自動壓縮更靠譜,官方同樣提供數據自動壓縮方式,歷史數據只保留一個小時的

詳細信息可以參考官方文檔: https://coreos.com/etcd/docs/latest/op-guide/maintenance.html#history-compaction

etcd can be set to automatically compact the keyspace with the --auto-compaction option with a period of hours:

# keep one hour of history
$ etcd --auto-compaction-retention=1

 

根據實踐發現只配置auto-compaction-retention只會做碎片整理,不會實際減少空間大小; 如果需要減少大小還是需要使用etcdctl compact 和 etcdctl defrag清理空間


免責聲明!

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



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