etcd 使用

部署

1
#

空间不足问题

在使用期间我们也观察到 Load 一直突高不下的情况,经检查发现 etcd 内的数据量已达到 600 多兆,所以我们采取了定期压缩 etcd 的措施,将历史事物数据全部清除。具体代码可参考:

  • 获取当前的版本

    1
    rev=$(ETCDCTL_API=3 etcdctl --endpoints=:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
  • 压缩当前版本之前的所有记录

    1
    ETCDCTL_API=3 etcdctl compact $rev
  • 清理多余的碎片空间

    1
    2
    3
    4
    # 清理当前 etcd 节点的碎片空间
    ETCDCTL_API=3 etcdctl defrag
    # 清理集群的碎片空间
    # ETCDCTL_API=3 etcdctl defrag --cluster
  • 解除警告

    1
    2
    # 一定要解除警告,否则 etcd 集群还是异常状态
    ETCDCTL_API=3 etcdctl alarm disarm

备份脚本

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env bash

ETCD_BACKUP_DIR=/data/etcd/backup
ENDPOINTS="127.0.0.1:2379"

# 如果是配置 crontab 定时执行,这里需要使用 /usr/local/bin/etcdctl
# 否则会报 etcdctl: command not found
ETCDCTL_API=3 /usr/local/bin/etcdctl --endpoints=${ENDPOINTS} snapshot save ${ETCD_BACKUP_DIR}/etcd-snapshot-`date +%Y%m%d`.db

# 备份保留30天
find ${ETCD_BACKUP_DIR} -name *.db -mtime +30 -exec rm -f {} \;

恢复脚本

1
#
  • 本文作者: forever杨
  • 本文链接: https://blog.yl-online.top/posts/a4aedd4.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!