ETCD資料空間壓縮清理
阿新 • • 發佈:2020-09-08
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清理空間