安装etcd

在Ubuntu 22.04上卸载旧版etcd并安装最新版本

卸载旧版etcd

停止etcd服务

sudo systemctl stop etcd

禁用服务

sudo systemctl disable etcd

卸载etcd软件包

sudo apt remove --purge etcd etcd-server etcd-client

删除配置文件和数据目录(谨慎操作,会删除所有数据)

sudo rm -rf /var/lib/etcd/
sudo rm -rf /etc/etcd/
sudo rm -rf /etc/systemd/system/etcd.service

安装最新版etcd

# 下载最新版etcd

ETCD_VER=v3.6.1  # 检查最新版本:https://github.com/etcd-io/etcd/releases
wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz

# 解压

tar xvf etcd-${ETCD_VER}-linux-amd64.tar.gz
cd etcd-${ETCD_VER}-linux-amd64

# 安装到系统目录

sudo mv etcd etcdctl /usr/local/bin/

# 验证安装

etcdctl version

配置etcd服务

创建systemd服务文件:

sudo tee /etc/systemd/system/etcd.service > /dev/null <<EOF
   [Unit]
   Description=etcd key-value store
   Documentation=https://github.com/etcd-io/etcd

[Service]
User=root
Type=notify
ExecStart=/usr/local/bin/etcd \
  --name=etcd \
  --data-dir=/var/lib/etcd \
  --listen-client-urls=http://0.0.0.0:2379 \
  --advertise-client-urls=http://localhost:2379
Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target
EOF

启动etcd服务

创建数据目录

sudo mkdir -p /var/lib/etcd
sudo chmod 700 /var/lib/etcd

重载systemd

sudo systemctl daemon-reload

启动服务

sudo systemctl enable etcd
sudo systemctl start etcd

检查状态

sudo systemctl status etcd
etcdctl endpoint status

配置认证(可选)

创建root用户

etcdctl user add root

创建root角色

etcdctl role add root

授予权限

etcdctl role grant-permission root --prefix=true readwrite /

关联用户和角色

etcdctl user grant-role root root

启用认证

etcdctl auth enable

测试

etcdctl --user root:<password> put testkey testvalue
etcdctl --user root:<password> get testkey

重要

etcd默认分配2g磁盘空间,但频繁操作会一直记录日志,导致磁盘增长较快。需要配置日志压缩策略

解决方案

1. 增加 etcd 存储配额

修改 etcd 配置,增加 --quota-backend-bytes 参数值(默认是 2GB):

# 编辑 etcd 配置文件(位置可能不同)
vim /etc/etcd/etcd.conf

# 添加或修改以下参数
--quota-backend-bytes=8589934592  # 设置为8GB

然后重启 etcd 服务。

2. 压缩 etcd 数据库

执行压缩操作来回收旧版本数据占用的空间:

# 获取当前修订版本
rev=$(ETCDCTL_API=3 etcdctl endpoint status --write-out="json" | grep -o '"revision":[0-9]*' | awk -F: '{print $2}')

# 压缩数据库
ETCDCTL_API=3 etcdctl compact $rev

# 整理碎片
ETCDCTL_API=3 etcdctl defrag

3. 删除不必要的数据

删除不再需要的 key 或租约:

# 删除 key
ETCDCTL_API=3 etcdctl del <key>

# 删除租约
ETCDCTL_API=3 etcdctl lease revoke <lease-id>

4. 设置自动压缩

在 etcd 配置中添加自动压缩策略:

--auto-compaction-retention=1h  # 保留1小时的历史数据
--auto-compaction-mode=periodic  # 定期压缩

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注