您的位置 首页 k8s

etcd备份恢复

etcd 恢复

一键etcd快速备份与恢复脚本 - 世界哪有真情在

我长按笔记本电脑开机按钮几秒强制关机模拟服务器断电宕机,可以看到启动完 linux 后 etcd 已经死透了,此操作非常危险如果你没有备份 etcd 那你的环境就死定了。

 

cat recoveryetcd.sh

#!/bin/bash

#删除之前的,也不备份了!!!
rm -rf /var/lib/etcd

# 获取当前主机的 IP 地址
CURRENT_IP=$(hostname -I | cut -d' ' -f1)
#HOSTNAME=$(hostname)
HOSTNAME="master.cluster.local"

# 构建自动添加端口的 peer 地址
PEER_URL="https://${CURRENT_IP}:2380"

# 定义 etcd 集群的初始成员信息
INITIAL_CLUSTER="${HOSTNAME}=https://${CURRENT_IP}:2380"

# 定义 etcd 集群的初始成员令牌
INITIAL_CLUSTER_TOKEN="etcd-cluster"

# 设置恢复快照文件
BACKUP_FILE="/var/backups/kube_etcd/etcd-2025-07-12-02-00-06/snapshot.db"

# 设置 etcd 证书路径
CACERT="/etc/ssl/etcd/ssl/ca.pem"
CERT="/etc/ssl/etcd/ssl/admin-master.pem"
KEY="/etc/ssl/etcd/ssl/admin-master-key.pem"

ETCDCTL_API=3 etcdctl snapshot restore $BACKUP_FILE \
  --name $HOSTNAME \
  --cacert "$CACERT" \
  --cert "$CERT" \
  --key "$KEY" \
  --initial-cluster "$INITIAL_CLUSTER" \
  --initial-cluster-token etcd-cluster \
  --initial-advertise-peer-urls "$PEER_URL" \
  --data-dir=/var/lib/etcd

if [ $? -eq 0 ]; then
  echo "reset successful"
else
  echo "reset failed"
fi
  1. 注意,还原脚本中我写的上来直接删除 etcd 数据目录,因为实在启动不起来而且我也事先做好备份了。
  2. 脚本中的 HOSTNAME 可以在 /etc/hosts 中看到,因为我是单节点 k8s 所以只有一个,你的环境要按实际内容调整。

 

然后执行脚本:

我们再重启etcd

systemctl restart etcd

说明已经成功了

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章