etcd的压缩和碎片整理提升性能

  1. 压缩+碎片整理(逐节点执行,先压缩后整理,避免并发)
    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 左右的回落。

     

     
posted @ 2025-11-12 15:07  滴滴滴  阅读(12)  评论(0)    收藏  举报