etcd教程(零)---etcd使用过程中遇到的问题
Contents
本文主要记录了etcd的使用过程中遇到的问题及其解决方案。
1. 空间不足
1.1 问题描述
使用的时候报错,提示空间不足
但是看了下没存多少数据呀…
Server register error: etcdserver: mvcc: database space exceeded
1.2 原因分析
前几章说了etcd采用的是MVCC来进行多版本并发控制,会存储数据的每一次变化,如果不进行压缩(删除)则空间会越变越大。
1条数据修改了1W次就相当于存了1W条记录。
1.3 解决方案
etcd 默认不会自动 compact,需要设置启动参数,或者通过命令进行compact,如果变更频繁建议设置,否则会导致空间和内存的浪费以及错误。
etcd v3 的默认的 backend quota 2GB,如果不 compact,boltdb 文件大小超过这个限制后,就会报错:”Error: etcdserver: mvcc: database space exceeded”,导致数据无法写入。
命令如下:
- 获取当前etcd数据的修订版本(revision)
rev=$(ETCDCTL_API=3 etcdctl –endpoints=:2379 endpoint status –write-out=”json” | egrep -o ‘”revision”:[0-9]*’ | egrep -o ‘[0-9]*’)
- 整合压缩旧版本数据
ETCDCTL_API=3 etcdctl compact $rev
- 执行碎片整理
ETCDCTL_API=3 etcdctl defrag
- 解除告警
ETCDCTL_API=3 etcdctl alarm disarm
- 备份以及查看备份数据信息
ETCDCTL_API=3 etcdctl snapshot save backup.db
ETCDCTL_API=3 etcdctl snapshot status backup.db