备份etcd
1.备份
创建备份目录
mkdir -p /data/etcd_backup/backup
备份etcd数据
ETCDCTL_API=3 etcdctl snapshot save /data/etcd_backup/backup/snap-etcd-backup-$(date +%F-%H-%M-%S).db \
--endpoints=https://192.168.1.64:2379 \
--cert=/data/etcd/ssl/etcd.pem \
--key=/data/etcd/ssl/etcd-key.pem \
--cacert=/data/etcd/ssl/etcd-ca.pem
解释:
• --endpoints=https://192.168.1.64:2379:指定 etcd 服务的地址
• --cert:客户端证书 etcd.pem。
• --key:客户端证书的私钥 etcd-key.pem。
• --cacert:CA 证书 etcd-ca.pem,用于验证对等方的身份。
注: 会生成一个路径为"/data/etcd_backup/backup/snap-etcd-backup-2021-11-12-15-09-38.db" 的etcd备份文件。2.恢复
在恢复时,首先需要停止 etcd 服务,然后使用备份文件来恢复数据。
systemctl stop etcd
#在恢复 etcd 集群时,只需要停止受影响节点,而不需要停止整个集群的所有节点。
#如果你恢复的是 etcd01 节点,则只需要停止 etcd01 节点的 etcd 服务。ETCDCTL_API=3 etcdctl snapshot restore /data/etcd_backup/backup/snap-etcd-backup-2025-01-18-09-06-01.db \
--data-dir /var/lib/etcd \
--name etcd01 \
--initial-cluster etcd01=https://192.168.1.64:2380 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster-state existing \
--cert=/data/etcd/ssl/etcd.pem \
--key=/data/etcd/ssl/etcd-key.pem \
--cacert=/data/etcd/ssl/etcd-ca.pem
解释:
• /path/to/backup.db:你的备份文件路径。
• /var/lib/etcd:恢复后数据存储的目录(根据你的配置调整)。
• --name:指定当前节点的名称。
• --initial-cluster:指定集群的成员及其通信地址,etcd01 可以替换为你的实际节点名称和地址。
• --initial-cluster-token:集群的唯一标识符。
• --initial-cluster-state:恢复时使用 existing,表示该集群是一个已存在的集群。确保在恢复后,重新启动 etcd 服务:
# 启动 etcd 服务
systemctl start etcd3. 其他事项
• 在恢复之前,确保当前集群的 etcd 服务已停止,以避免数据损坏。
• 定期备份可以帮助你防止因硬件故障或其他问题丢失重要数据。
4.备份脚本
[root@etcd01 backup]# vim /data/etcd_backup/etcd_backup.sh
#!/bin/bash
mkdir -p /data/etcd_backup/backup
BACKUP_FILE="/data/etcd_backup/snap-etcd-backup-$(date +%F-%H-%M-%S).db"
LOG_FILE="/data/etcd_backup/backup.log"
echo "$(date +'%F %T') - Starting backup" >> $LOG_FILE
ETCDCTL_API=3 etcdctl snapshot save $BACKUP_FILE \
--endpoints=https://192.168.1.64:2379 \
--cert=/data/etcd/ssl/etcd.pem \
--key=/data/etcd/ssl/etcd-key.pem \
--cacert=/data/etcd/ssl/etcd-ca.pem \
>> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
echo "$(date +'%F %T') - Backup successful: $BACKUP_FILE" >> $LOG_FILE
else
echo "$(date +'%F %T') - Backup failed" >> $LOG_FILE
fi每天定时执行
[root@etcd01 backup]# crontab -e
0 2 * * * /data/etcd_backup/etcd_backup.sh
















