我是靠谱客的博主 健忘胡萝卜,最近开发中收集的这篇文章主要介绍etcd报错:mvcc: database space exceeded,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

etcd报错:mvcc: database space exceeded

问题来源:恢复生产环境的时候发现apiserver连etcd报错,etcd一直重启

原因分析:
etcd服务未设置自动压缩参数(auto-compact)
etcd 默认不会自动 compact,需要设置启动参数,或者通过命令进行compact,如果变更频繁建议设置,否则会导致空间和内存的浪费以及错误。etcd v3 的默认的 backend quota 2GB,如果不compact,boltdb 文件大小超过这个限制后,就会报错:”Error: etcdserver: mvcc: database space exceeded”,导致数据无法写入。

处理过程:
我这里的master节点ip是192.168.10.203,192.168.10.204,192.168.10.205

1 查看告警
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.203:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem alarm list
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.204:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem alarm list
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.205:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem alarm list

2 获取旧版本号
[root@ ~]# rev=$(/opt/k8s/bin/etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem --endpoints=“https://127.0.0.1:2379” endpoint status --write-out=“json” |egrep -o ‘“revision”:[0-9]’|egrep -o '[0-9].’)
[root@ ~]# echo $rev
846418475

3 整合压缩旧版本数据
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.203:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem compact $rev
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.204:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem compact $rev
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.205:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem compact $rev

4 执行碎片整理
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.203:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem defrag
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.204:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem defrag
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.205:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem defrag

5 解除告警
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.203:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem alarm disarm
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.204:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem alarm disarm
[root@ ~]# /opt/k8s/bin/etcdctl --endpoints=https://192.168.10.205:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem alarm disarm

6 备份以及查看备份数据信息
ETCDCTL_API=3 etcdctl snapshot save backup.db
ETCDCTL_API=3 etcdctl snapshot status backup.db

最后

以上就是健忘胡萝卜为你收集整理的etcd报错:mvcc: database space exceeded的全部内容,希望文章能够帮你解决etcd报错:mvcc: database space exceeded所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部