Error Tips
使用etcd时报错,报错信息: etcdserver: mvcc: database space exceeded
-
检查主机是否安装etcd操作工具(etcdctl)
$ etcdctl --h # 未安装,接下来安装工具,版本自行去github找, 3.x以上即可,下面仅为示例版本 $ wget https://github.com/etcd-io/etcd/releases/download/v3.3.23/etcd-v3.3.23-linux-amd64.tar.gz $ tar -xzf etcd-v3.3.23-linux-amd64.tar.gz $ cd etcd-v3.3.23-linux-amd64 $ cp etcdctl /usr/local/bin/etcdctl
-
检查主机/集群的状态
# 设置变量, use API-3 $ export ETCDCTL_API=3 # 查询etcd部署情况 $ etcdctl member list # 连接主机 $ ssh [master-ip/host-ip] # 检查当前主机状态 $ etcdctl endpoint status 127.0.0.1:2379, c48c8c6f0e1493a5, 3.2.5, 2.2 GB, true, 19920, 460159113 # 官方默认2G,超限报错,问题就在于此
-
解决方案
# 查看警告信息 $ etcdctl --endpoints=http://127.0.0.1:2379 alarm list memberID:8630161756594109333 alarm:NOSPACE # 获取当前版本 $ 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 endpoint status # 惊人 G变成了M # 最后清除警告 $ etcdctl --endpoints=http://127.0.0.1:2379 alarm disarm
So funny!