处理ECTD空间满的问题

本文主要介绍在使用etcd集群过程中遇到的空间满的问题的解决方法。

解决方法

切换到有etcd可执行文件的目录下:

xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx换成自己etcd集群的真实IP

查看当前状态

1
2
3
./etcdctl --endpoints=xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx

endpoint health

处理etcd空间满的问题:

1
2
3
4
5
export ETCDCTL_API=3

./etcdctl --endpoints=http://127.0.0.1:2379 alarm list

./etcdctl --write-out=table --endpoints=xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx endpoint status

1.获取当前etcd数据的修订版本(revision)

1
rev=$(ETCDCTL_API=3 ./etcdctl --endpoints=:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*')

2.整合压缩旧版本数据
1
ETCDCTL_API=3 ./etcdctl compact $rev

3.执行碎片整理
1
./etcdctl --endpoints=http://xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx defrag

4.取消告警信息
1
./etcdctl --endpoints=http://xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx,xxx.xxx.xxx.xxx:xxxx alarm disarm

根据实践发现只配置auto-compaction-retention只会做碎片整理,不会实际减少空间大小; 如果需要减少大小还是需要使用etcdctl compact 和 etcdctl defrag清理空间

总结

其实可以将本文的步骤写成一个shell脚本然后放到crontab中去每天执行一次就OK了。

如果你觉得本文对你有帮助,欢迎打赏