问题描述
Rancher官方提供的docker单体rancher 2.x在经过一段时间的调戏后,出现无法访问,查看日志错误Error: etcdserver: mvcc: database space exceeded
,经过检查rancher使用的是etcd的默认配置,未对快照进行管理,需要对数据进行清理和压缩。
虽然很多时候应该部署HA的Rancher,但是难免有人不按套路出牌。
思路
提取rancher最新版本容器,在其之上搞事情,添加如下环境变量到容器中,是构建个新容器还是搞事情酌情即可。注意只是思路,还没有完成验证,这个需要时间。。。。
ETCD_AUTO_COMPACTION_RETENTION=1
ETCD_MAX_REQUEST_BYTES=10485760
ETCD_QUOTA_BACKEND_BYTES=8589934592
现有环境下的修复办法
# 利用docker cp将3.2+版本的etcdctl可执行文件移至容器内,放置路径`/var/lib/rancher/management-state/etcd`中。
# 使用 etcd api version 3,V2版本的API功能不多。。。
ETCDCTL_API=3 etcdctl endpoints status
# 这里会得到当期数据的版本
ETCDCTL_API=3 etcdctl endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*'
xxxxxxxxx
# 压缩数据
ETCDCTL_API=3 etcdctl compact xxxxxxxxx
# 碎片整理(基本上到这里就已经解决问题了)
ETCDCTL_API=3 etcdctl defrag
# 解除告警
ETCDCTL_API=3 etcdctl alarm disarm
# 备份
ETCDCTL_API=3 etcdctl snapshot save backup.db
ETCDCTL_API=3 etcdctl snapshot status backup.db