摘要:Etcd广泛应用于分布式系统中,如Kubernetes、服务发现、消息队列、负载均衡、分布式锁等场景。它提供了强大的数据管理能力,适用于需要高可用、一致性及数据共享的分布式应用。etcd为了防止性能下降其存储大小配额默认设置为2GB(当然我们可以修改为最高8G
私信 ”运维笔谈”,对话回复 “阿里云k8s” 可以获取《阿里云Kubernetes项目实战手册》PDF。
Etcd广泛应用于分布式系统中,如Kubernetes、服务发现、消息队列、负载均衡、分布式锁等场景。它提供了强大的数据管理能力,适用于需要高可用、一致性及数据共享的分布式应用。etcd为了防止性能下降其存储大小配额默认设置为2GB(当然我们可以修改为最高8GB)。
今天遇到一个问题,由于etcd是默认配置,其磁盘配置为2GB的配额,目前出现了数据写入失败的情况。
/ # etcdctl put frank JingLiError: etcdserver: mvcc: database space exceeded/ # etcdctl --endpoints etcd-0.etcd:2379,etcd-1.etcd:2379,etcd-2.etcd:2379 endpoint status --write-out=table ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX etcd-0.etcd:2379 | f8a8*** | 3.3.8 | 2.1 GB | false | 951 | 7898831 || etcd-1.etcd:2379 | 9de5*** | 3.3.8 | 2.1 GB | false | 951 | 7898831 || etcd-2.etcd:2379 | 7760*** | 3.3.8 | 2.1 GB | true | 951 | 7898831那么如何来解决2GB空间配额满的问题,除了增加配额,我们也可以压缩数据,整理碎片释放下部分空间。下面我简单罗列了下处理过程:
1、执行碎片整理
etcdctl defrag2、手动触发压缩
etcdctl --endpoints= compact 78988313、检查状态已经压缩到了1.2GB了。
/ # etcdctl --endpoints etcd-0.etcd:2379,etcd-1.etcd:2379,etcd-2.etcd:2379 endpoint status --write-out=table ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX etcd-0.etcd:2379 | f8a8*** | 3.3.8 | 1.2 GB | false | 951 | 7900975 || etcd-1.etcd:2379 | 9de5*** | 3.3.8 | 1.2 GB | false | 951 | 7900975 || etcd-2.etcd:2379 | 7760*** | 3.3.8 | 1.2 GB | true | 951 | 7900975然而再测试写入,还是提示database space exceeded(空间超出)
/ # etcdctl put aa bbError: etcdserver: mvcc: database space exceeded迫不得已,我尝试了挨个重启每个etcd实例后还是无法写入[笑哭]
4、查看告警列表etcdctl alarm list,发现有两条告警:
/ # etcdctl alarm listmemberID:179** alarm:NOSPACEmemberID:113** alarm:NOSPACE5、手动解除告警 etcdctl alarm disarm
/ # etcdctl alarm disarmmemberID:179** alarm:NOSPACEmemberID:113** alarm:NOSPACE解除之后,etcd可以正常写入了。
舒缓下眼睛放松放松
来源:阿花说科技
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!