etcd 碎片整理
基础信息
etcd Version: 3.5.1
OS: Linux 4.18.0-348.el8.x86_64 x86_64
运行方式:系统进程方式运行
集群数量: 3
问题:etcd 集群状态正常,RAFT TREM 正常,RAFT INDEX 正常,没有报错,但是集群中有一个 slave 节点 DB SIZE 过大。
解决方案
etcd 3.5.1 不支持完全离线的 data-dir defrag,defrag 操作必须依赖可用 etcd endpoint;通过在异常 follower 上以临时单节点模式启动 etcd,对本地 data-dir 执行 defrag,随后恢复加入原集群,可安全修复 bbolt 碎片导致的 DB Size
# 1. 停止异常 follower 节点的 etcd 服务
systemctl stop etcd
# 2. 备份异常 follower 节点的 data-dir
cp -a /var/lib/etcd /var/lib/etcd.bak.$(date +%F_%H%M)
# 3. 用临时单节点模式启动 etcd,指定本地 data-dir
etcd \
--data-dir=/var/lib/etcd \
--name=etcd-103-tmp \
--listen-client-urls=https://127.0.0.1:2379 \
--advertise-client-urls=https://127.0.0.1:2379 \
--listen-peer-urls=https://127.0.0.1:2380 \
--initial-cluster=etcd-103-tmp=https://127.0.0.1:2380 \
--initial-cluster-state=new \
--cert-file=/etc/etcd/pki/etcd.pem \
--key-file=/etc/etcd/pki/etcd-key.pem \
--trusted-ca-file=/etc/etcd/pki/ca.pem \
--peer-cert-file=/etc/etcd/pki/etcd.pem \
--peer-key-file=/etc/etcd/pki/etcd-key.pem \
--peer-trusted-ca-file=/etc/etcd/pki/ca.pem
# 4. 执行 defrag 操作
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cert=/etc/etcd/pki/etcd.pem \
--key=/etc/etcd/pki/etcd-key.pem \
--cacert=/etc/etcd/pki/ca.pem \
defrag
# 5. 停止临时 etcd 实例
Ctrl+C 或 kill
# 6. 恢复原集群配置,重新启动 etcd 服务
systemctl start etcd