ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

etcd的压缩和碎片整理提升性能
  1. 压缩+碎片整理(逐节点执行,先压缩后整理,避免并发)
    bash
    复制
    for ep in ${ENDPOINTS//,/ }; doecho "==> working on $ep"# 取得当前 revisionREV=$(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 左右的回落。

     

     
返回列表