etcdserver: mvcc: database space exceeded

张开发
2026/4/16 1:29:15 15 分钟阅读

分享文章

etcdserver: mvcc: database space exceeded
文章目录一、问题原因二、临时解决方案立即恢复服务三、长期预防措施避免再次发生四、注意事项etcdserver: mvcc: database space exceeded错误表示etcd数据库空间已耗尽默认限制2GB需通过压缩历史版本、碎片整理和解除告警来恢复服务同时建议配置自动压缩和扩容至8GB以预防复发。一、问题原因存储空间限制etcd默认数据库大小限制为2GB当达到此限制时会触发mvcc: database space exceeded错误。历史版本累积etcd采用多版本并发控制(MVCC)机制若未启用自动压缩历史版本数据会持续累积导致空间耗尽。告警影响空间耗尽后etcd进入维护模式仅接受读取和删除操作拒绝所有写入请求。二、临时解决方案立即恢复服务获取当前版本号rev$(ETCDCTL_API3etcdctl--endpointshttps://127.0.0.1:2379\--cacert/etc/kubernetes/pki/etcd/ca.crt\--cert/etc/kubernetes/pki/etcd/server.crt\--key/etc/kubernetes/pki/etcd/server.key\endpoint status-wjson|jq-r..Status.header.revision)压缩历史版本保留当前版本及之后数据ETCDCTL_API3etcdctl--endpointshttps://127.0.0.1:2379\--cacert/etc/kubernetes/pki/etcd/ca.crt\--cert/etc/kubernetes/pki/etcd/server.crt\--key/etc/kubernetes/pki/etcd/server.key\compact$rev注意压缩仅清理历史版本不会删除最新版本数据。碎片整理释放物理磁盘空间ETCDCTL_API3etcdctl--endpointshttps://127.0.0.1:2379\--cacert/etc/kubernetes/pki/etcd/ca.crt\--cert/etc/kubernetes/pki/etcd/server.crt\--key/etc/kubernetes/pki/etcd/server.key\defrag建议若整理耗时较长可添加--command-timeout300s参数延长超时时间。defrag 操作的目的是物理上释放被标记为“删除”的空间。因为即使 compact 删除了历史数据etcd 的存储文件依然会保留被删除的数据类似文件系统中的删除文件而这些空间在物理存储上并未真正释放。通过 defrag 操作可以让 etcd 重新组织数据将这些被标记为删除的空间清理出来从而减少 etcd 占用的磁盘空间。解除告警必须执行否则仍拒绝写入ETCDCTL_API3etcdctl--endpointshttps://127.0.0.1:2379\--cacert/etc/kubernetes/pki/etcd/ca.crt\--cert/etc/kubernetes/pki/etcd/server.crt\--key/etc/kubernetes/pki/etcd/server.key\alarm disarm验证恢复状态ETCDCTL_API3etcdctl--endpointshttps://127.0.0.1:2379\--cacert/etc/kubernetes/pki/etcd/ca.crt\--cert/etc/kubernetes/pki/etcd/server.crt\--key/etc/kubernetes/pki/etcd/server.key\endpoint status --write-outtable检查DB SIZE是否显著降低且ERRORS字段为空。三、长期预防措施避免再次发生配置自动压缩推荐在etcd启动参数中添加--auto-compaction-modeperiodic\--auto-compaction-retention1h\--quota-backend-bytes8589934592--auto-compaction-retention1h保留1小时历史记录可调整为24h等。--quota-backend-bytes8589934592将存储上限扩容至8GB官方建议最大值。设置定时维护任务创建cron任务定期执行压缩示例# 每日凌晨1点执行01* * *ETCDCTL_API3etcdctl compact$(date%s)etcdctl defrag关键路径监控监控/registry/events/和/registry/minions/等高频路径Kubernetes中易产生大量事件。可通过etcdctl get --prefix /registry/events/ | wc -l检查事件数量。ec get /registry --prefix --keys-only | grep -v ^$ | awk -F / { h[$3] } END {for (k in h) print h[k], k} | sort -nr | head四、注意事项备份优先执行压缩前建议先备份数据etcdctl snapshot save backup.db。集群操作在集群所有节点上依次执行压缩操作避免数据不一致。扩容限制最大建议8GB超过此值可能影响etcd性能稳定性。压缩误区压缩不会删除最新版本数据仅清理历史版本但过度压缩可能影响Watch机制的历史数据同步。提示对于Kubernetes环境建议在/etc/kubernetes/manifests/etcd.yaml中直接修改启动参数并重启etcd服务确保配置持久化。若使用托管服务如Kuboard需联系云服务商调整后端存储配额。

更多文章