etcd key space 超出限额处理etcdserver: mvcc: database space exceeded

  其他常见问题
内容纲要

问题描述

tdc环境在更新tdc license的时候报错:etcd报错:mvcc: database space exceeded

问题分析

TCOS 2.x使用 etcd 存储 license 及申请信息,报错表明集群中 etcd 的数据量达到了默认的 2g 限额。此时 etcd 会拒绝对外提供写服务。

虽然集群中配置了会周期性的执行压缩数据的操作,但是一些碎片化的空间并不会主动回收,需要手动执行以下操作

解决方法

  • 1、检查etcd空间大小
    ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000,https://zwjcfwpt-02:4000,https://zwjcfwpt-03:4000 endpoint status
  • 2、检查etcd健康状态
    ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000,https://zwjcfwpt-02:4000,https://zwjcfwpt-03:4000 endpoint health
  • 3、备份etcd
    ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000,https://zwjcfwpt-02:4000,https://zwjcfwpt-03:4000 snapshot save backup.db
    (或者可以备份下/opt/kubernetes/data/transwarp-etcd/data目录)
  • 4、获取revision信息
    rev=$(ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints=https://zwjcfwpt-01:4000 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*')
  • 5、压缩etcd
    ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 compact $rev
  • 6、etcd碎片整理
    ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 defrag
  • 7、验证etcd状态、空间大小
  • 8、消除告警
    ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 alarm disarm
  • 9、所有etcd节点重复上述操作(4-8步,换成其他节点的主机名称)
  • 10、put验证
    ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 put newkey 123
  • 完成清理操作后,再次执行 endpoint status 命令(即第一步的检查命令),应该可以发现使用的资源有明显的下降。之后可以正常进行 license 相关的写操作。

PS,正常运行的环境中不建议同时对所有运行的节点执行 defrag 操作,该操作比较耗时且会导致 etcd 集群无法对外提供服务。如果需要,可以依次执行。

相关wiki:
https://wiki.transwarp.io/pages/viewpage.action?pageId=63422483
https://wiki.transwarp.io/pages/viewpage.action?pageId=20251636

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。