ETCD连接报错:database space exceeded

发布时间 2023-06-19 15:27:38作者: 鲜小橙

ETCD连接报错:database space exceeded

一:背景

此etcd不是k8s集群中的etcd,是kuboard中使用etcd报错,kuboard稳定运行了一年多,上周还正常访问,今天上班访问kuboard报错,然后顺着排查发现kuboard中使用了etcd(之前一直没注意),查看kuboard日志,发现如下报错信息:image-20230619133609582

二:报错分析:

大致意思就是kuboard服务连接ETCD数据库失败,然后复制重点报错信息去google:etcd "database space exceeded",查看了几个网页聚合后得到的信息大致为ETCD存储满了,最开始我以为是ETCD存储的磁盘满了,登陆ETCD服务器df -h后发现空间很充足,然后继续google,发现etcd为了保证性能,设置了空间配额,空间配额默认值(--quota-backend-bytes)为2G,详情见此官方文档此官方博客,然后通过:etcdctl --write-out=table endpoint status命令查看节点信息如下,发现DB SIZE 已经为2.1G了,默认空间配额为2G, 这里DB SIZE已经超过2G,触发ETCD维护模式,只能进行读和删除操作。包括ERRORS行也告警NOSPACE。

image-20230619134146228

三:解决问题

  • etcd备份(自行google,此处不叙述)

  • 获取当前版本

rev=$(etcdctl endpoint status -w json | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*'| awk 'NR==1{print $1}')

image-20230619151345665

  • 压缩掉所有旧版本,这里得截图报错是因为我之前已经压缩过。

etcdctl compact $rev

image-20230619140328516

  • 清理碎片

etcdctl defrag

image-20230619140338538

  • 再次查看节点信息,此时DB SIZE已清理完成,但是告警还在,ETCD还处于维护模式。

etcdctl endpoint status -w table

image-20230619140420102

  • 解除告警,然后再次查看节点信息,告警也消失了,恢复正常。

etcdctl alarm disarm

image-20230619140752180

参考链接:https://www.cnblogs.com/ltzhang/p/14316009.html