Rancher 单节点 docker 部署备份与恢复
1. 备份集群
-
获取 rancher server 容器名,本例为
angry_aryabhata
docker ps | grep rancher/rancher 6a27b8634c80 rancher/rancher:v2.5.14 xxx angry_aryabhata
-
停止容器
docker stop angry_aryabhata
-
创建备份容器,其中
rancher-data-06071539
建议按照日期时间命名docker create --volumes-from angry_aryabhata --name rancher-data-06071539 rancher/rancher:v2.5.14
打包容器内数据目录,此处
--volumes-from
需填写上一步的容器名称docker run --volumes-from rancher-data-06071539 -v $PWD:/backup:z \ busybox:latest tar pzcvf \ /backup/rancher-data-backup-v2.5.14-06071539.tar.gz /var/lib/rancher
-
查看当前目录下是否有备份文件
rancher-data-backup-v2.5.14-06071539.tar.gz
-
删除第 3 步创建的备份数据容器
docker rm -f rancher-data-06071539
-
重新启动 rancher server 容器即可
docker start angry_aryabhata
2. 恢复集群
-
为了对比验证,首先删除 rancher server 数据目录,此时 rancher 已完全崩溃
rm -rf /home/rancher/
-
停止 rancher server 容器
docker stop angry_aryabhata
-
从备份文件恢复
docker run --volumes-from angry_aryabhata -v $PWD:/backup \ busybox:latest sh -c "rm /var/lib/rancher/* -rf && \ tar pzxvf /backup/rancher-data-backup-v2.5.14-06071539.tar.gz"
-
重新启动 rancher server 容器
docker start angry_aryabhata
3. 备份脚本
如果不想手动执行命令,可以使用以下脚本备份,本人 shell 水平有限,如有错误或优化空间还请指正~
#!/bin/bash
# 获取 Rancher 容器名称
container_name=$(docker ps | grep rancher/rancher | awk '{print $NF}')
echo "容器名:$container_name"
echo "第一步:停止 Rancher 容器"
docker stop $container_name
echo "第二步:创建备份容器"
# 获取当前日期
current_date=$(date "+%Y%m%d")
docker create --volumes-from $container_name \
--name rancher-data-$current_date \
rancher/rancher:v2.5.14
echo "第三步:打包数据文件"
# 以日期戳命名备份文件
file_name="/backup/rancher-data-backup-v2.5.14-$current_date.tar.gz"
docker run --volumes-from rancher-data-$current_date -v $PWD:/backup:z \
busybox:latest tar pzcvf $file_name /var/lib/rancher
# 判断备份文件是否生成到当前目录下
file_name_local=$(basename "$file_name")
if [ -f "$file_name_local" ]; then
echo "备份文件已生成:$file_name_local"
else
echo "备份文件未生成,请检查!"
exit 1
fi
echo "第四步:删除备份容器"
docker rm -f rancher-data-$current_date
echo "第五步:重新启动 Rancher 容器"
docker start $container_name