在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 # 定期压缩