Etcd mvcc: database space exceeded
异常
网上搜了下, Etcd 后端存储 boltdb 超过 2G 容量,会提示mvcc: database space exceeded
异常,导致 Etcd 无法正常提供服务
临时解决方案
执行以下脚本:
rev=$(ETCDCTL_API=3 etcdctl --endpoints=${IP}:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
echo $rev
ETCDCTL_API=3 etcdctl --endpoints=${IP}:2379 --user=root:xxxx compact $rev
ETCDCTL_API=3 etcdctl --endpoints=${IP}:2379 --user=root:xxxx defrag
ETCDCTL_API=3 etcdctl --endpoints=${IP}:2379 --user=root:xxxx alarm disarm
更好的解决方案
上面粗暴执行 compact ,遇到 ttl 已为 0 的 KV 直接被删除。但是有时,某些应用,希望 Etcd 2G 故障时,不要粗暴马上清除
因此,最好不要手动执行 compact 到最新 revison ,或者 compact [ revison - N ] 版本
更好的解决方法:
etcd server 加启动参数: --auto-compaction-retention=1
,保留最近 1 小时历史记录
再加定时任务执行:etcdctl defrag