https://github.com/kennethreitz
Etcd是Go语言开发的一个开源的、高可用的分布式的键值(key-value)存储系统,它被设计用于可靠地存储关键性数据,并保证快速的访问速度。我们运维之道的etcd常被用于Kubernetes集群中存储配置信息和状态数据。
# 执行 etcdctl snapshot save 命令来创建备份
ETCDCTL_API=3 etcdctl snapshot save /path/to/backup.db \
--endpoints=https://127.0.0.1:2379 \ # etcd 节点地址
--cacert=/path/to/ca.crt \ # CA 证书
--cert=/path/to/server.crt \ # 客户端证书
--key=/path/to/server.key # 客户端密钥
/path/to/backup.db
和证书路径为你的实际文件路径。# 使用 etcdctl snapshot restore 命令从备份恢复数据
ETCDCTL_API=3 etcdctl snapshot restore /path/to/backup.db \
--data-dir=/var/lib/etcd-from-backup \ # 指定新的数据目录
--name m1 \ # 此etcd成员的名称
--initial-cluster m1=http://host1:2380 \ # 整个集群的初始配置信息
--initial-cluster-token etcd-cluster-1 \ # 新集群的唯一标识
--initial-advertise-peer-urls http://host1:2380 # 此etcd成员通告给其他成员的URL
# 清理(压缩)命令可以移除所有被覆盖、删除的键值对以节省空间
ETCDCTL_API=3 etcdctl compact <revision> \ # 指定要压缩的历史修订版本号
--endpoints=https://127.0.0.1:2379 \ # etcd 节点地址
--cacert=/path/to/ca.crt \ # CA 证书
--cert=/path/to/server.crt \ # 客户端证书
--key=/path/to/server.key # 客户端密钥
<revision>
应该替换为您希望压缩历史的具体修订版本号。您可以通过etcdctl get
命令查看修订版本。要查看etcd数据库使用了多大空间,您可以使用etcdctl
命令行工具来查询其存储的统计信息。以下是如何进行检查的示例命令:
ETCDCTL_API=3 etcdctl --endpoints=<etcd-endpoint> \
--cacert="/path/to/ca.crt" --cert="/path/to/cert.crt" --key="/path/to/key.key" \
endpoint status --write-out=table
请将<etcd-endpoint>
及后面的路径替换为您的etcd服务的实际访问地址和证书路径。这个命令的输出将会以表格的形式展示每个endpoint的状态信息,包括其数据库的大小。
而对于检查etcd数据库的健康状况,可以使用如下etcdctl
命令:
ETCDCTL_API=3 etcdctl --endpoints=<etcd-endpoint> \
--cacert="/path/to/ca.crt" --cert="/path/to/cert.crt" --key="/path/to/key.key" \
endpoint health
这条命令会输出etcd成员的健康状况。如果etcd成员正常运行,您将看到<etcd-endpoint> is healthy
的信息。
在Kubernetes环境中,etcd的健康状况至关重要,因为它存储了所有Kubernetes对象的状态和配置。etcd的问题可能会影响整个集群的稳定性和性能。因此,定期检查etcd的健康状况和存储空间使用情况是Kubernetes集群维护的重要组成部分。
顺便分享一个一键安装脚本:
ETCD_VER=v3.5 # 设置etcd的版本为v3.5
rm -rf tmp/etcd/${ETCD_VER} # 删除旧的etcd版本目录
mkdir -p tmp/etcd/${ETCD_VER} # 创建新的目录用于存放下载的文件
cd tmp/etcd/${ETCD_VER} # 进入新创建的目录
# 使用curl命令下载etcd压缩包
echo "下载 etcd version $ETCD_VER..."
curl -L https://github.com/coreos/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz > etcd-${ETCD_VER}-linux-amd64.tar.gz
# 解压下载的压缩包
tar xzvf etcd-${ETCD_VER}-linux-amd64.tar.gz -C . --strip-components=1
# 将etcd和etcdctl二进制文件复制到/usr/local/bin目录
echo "复制etcdctl 到 /usr/local/bin..."
\cp -rf etcd /usr/local/bin/etcd
\cp -rf etcdctl /usr/local/bin/etcdctl
cd .. # 返回到上一级目录
rm -rf ${ETCD_VER} # 删除临时文件夹
etcd --version # 输出etcd版本信息
etcdctl --version # 输出etcdctl版本信息
# 设置ETCDCTL_API环境变量为3,并输出etcdctl版本信息
ETCDCTL_API=3 ./etcdctl version
# 启动etcd
echo "启动 etcd..."
/usr/local/bin/etcd
echo "etcd 安装完成!"