etcd的压缩和碎片整理提升性能
-
压缩+碎片整理(逐节点执行,先压缩后整理,避免并发)bash
for ep in ${ENDPOINTS//,/ }; do echo "==> working on $ep" # 取得当前 revision REV=$(etcdctl --endpoints=$ep endpoint status --write-out json | jq -r .[0].Status.header.revision) # 压缩 etcdctl --endpoints=$ep compact $REV # 碎片整理(会触发一两秒阻塞,选低峰) etcdctl --endpoints=$ep defrag done先拿到当前最新 revision bash 复制 REV=$(etcdctl \ --endpoints=https://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-out json | \ jq -r '.[0].Status.header.revision') 含义:把 etcd 里已经提交的最大版本号读出来,作为压缩点。 压缩(逻辑删除旧数据) bash 复制 etcdctl …(同上证书参数) compact $REV 含义:告诉 etcd“revision ≤ $REV 的所有历史版本现在可以真正丢弃”,不会立刻释放磁盘空间,只是打标记。 碎片整理(真正释放空间) bash 复制 etcdctl … defrag 含义:etcd 重新把 boltdb 文件重写一遍,把上一步打标记的页回收,db 文件瞬间变小;执行期间该节点会短暂阻塞读写(通常 1~3 秒)。 单条命令(整合版,可直接贴终端) bash 复制 # 注意把证书路径换成你集群的实际位置 etcdctl --endpoints=https://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 $(etcdctl --endpoints=https://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-out json | \ jq -r '.[0].Status.header.revision') && \ etcdctl --endpoints=https://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 执行完会看到 Finished defragmenting etcd member… 以及 db size 从 1G → 200 M 左右的回落。
时来天地皆同力,运去英雄不自由
浙公网安备 33010602011771号