问题描述:
变更无法生效,相关报错信息:etcd mvcc: database space exceeded。查询etcd节点状态,发现"NOSPACE"的告警信息,并且DB SIZE=2.1G
原因分析:
etcd的官方文档常见问题(FAQ)版块针对这个场景有明确的说明,这个报错信息是etcd服务端返回的,用来提示应用etcd服务端空间不足了。etcd服务默认不会开启自动压缩参数,如果变更频繁,会导致空间和内存的浪费,最终将耗尽etcd的存储空间,Etcd v3 的默认的存储空间是2GB,如果不压缩,超过这个限制后,就会报错:”mvcc: database space exceeded”,导致数据无法写入。
问题解决:
1.为了保证数据的安全,最好做一下数据的备份(非必须)
./etcdctl snapshot save backup.db --user=root --password="e63Sdv3xZ5JmTE"
2.获取版本号revision
./etcdctl endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*'
3.执行空间压缩
export ETCDCTL_API=3
./etcdctl compact $revision
4.整理碎片
./etcdctl defrag --user=root --password="e63Sdv3xZ5JmTE"
5.清除告警信息(必须)
etcdctl alarm disarm
以上操作需要在etcd集群中每一个节点都执行一遍。