备份与恢复
背景
UCS本地集群安装完成后,为保证集群高可用,防止在发生集群故障时,集群内数据丢失,UCS支持对于本地集群上的3个master节点上的证书文件、加解密物料、etcd数据等信息的备份,来保证UCS本地集群在遇到故障时能根据备份的数据进行恢复。
约束与限制
无论是单master还是多master故障,节点IP须保持不变。
集群备份
本地备份
- 创建备份文件压缩包存放的目录。
- 执行备份命令:
./ucs-ctl backup 集群名 --path 备份路径 --type local
示例如下:
./ucs-ctl backup gpu-test --path /home/ggz/gpu-test --type local
执行成功后,会在指定的备份路径下产生名为:集群名-backup-时间戳.tar.gz这样一个备份压缩文件。
备份压缩文件存在ha.yaml、etcd-snapshot目录、crt目录,etcd-snapshot包含etcd备份数据,crt包含证书与加解密材料。
远端备份
- 在远端sftp主机创建备份文件压缩包存放的目录。
- 执行备份命令:
./ucs-ctl backup 集群名 --path 备份路径 --type sftp --ip 远端主机ip --user 远端主机用户名
示例如下:
./ucs-ctl backup gpu-test --path /home/ggz/gpu-test --type sftp --ip 100.95.142.93 --user root
首次进行远端备份需要输入sftp密码,在please input sftp password:提示后输入远端sftp服务器密码。
执行成功后,远端主机的指定备份路径下会产生名为:集群名-backup-时间戳.tar.gz这样一个备份压缩文件。
备份压缩文件存在ha.yaml、etcd-snapshot目录、crt目录,etcd-snapshot包含etcd备份数据,crt包含证书与加解密材料。
周期备份
执行crontab -e,通过编写crontab表达式使得备份命令周期执行。
示例如下:凌晨1点执行集群的备份。
0 0 1 * * ucs-ctl backup gpu-test --path /home/ggz/gpu-test --type sftp
周期远端备份时,在首次输入完远端sftp服务器密码后,在crontab表达式中无需指明密码。
为防止备份文件数量一直膨胀,需在备份机器上同样通过crontab周期执行备份文件老化脚本,备份文件老化参考如下:
#!/bin/bash backup_dir=${1} # 备份文件保存路径 keep_days=${2} # 保存天数 if [ ! -d ""$backup_dir"" ]; then # 检查日志目录是否存在 echo "备份文件路径不存在!" exit 1 fi find "$backup_dir" -type f -mtime +$keep_days -exec rm {} \; # 删除旧日志 echo "过期备份文件已删除!"
数据恢复
etcd数据恢复
- 准备etcd备份数据文件。
将备份数据压缩文件{clustername}-backup-{timestamp}.tar.gz发送到需要恢复的集群的各个master/etcd节点上。
- 关闭etcd服务
mv /var/paas/kubernetes/manifests/etcd*.manifest /var/paas/kubernetes/
等待服务停止。
crictl ps | grep etcd
若查询不到etcd容器,说明服务已经停止。
- 备份节点的etcd数据(可选)。
mv /var/paas/run/etcd/data /var/paas/run/etcd/data-bak mv /var/paas/run/etcd-event/data /var/paas/run/etcd-event/data-bak
- 在含有etcd的节点上执行恢复命令。
./ucs-ctl restore etcd 备份文件压缩包路径
示例如下:
./ucs-ctl restore etcd /home/ggz/gpu-test/backup-file-20230625164904.tar.gz
若回显如下命令,则etcd的节点数据恢复成功:
Restore the etcd snapshot successfully.
- 对etcd节点重启etcd服务,重启过程需要等待几分钟。
mv /var/paas/kubernetes/etcd*.manifest /var/paas/kubernetes/manifests
等待服务重新启动:
crictl ps | grep etcd
若查询到etcd容器说明服务已经重启,此时该节点的etcd数据得到恢复。
单master节点故障恢复
在执行机上执行单节点故障恢复命令
./ucs-ctl restore node 节点ip --name 集群名
其中节点ip为故障节点的ip,示例如下
./ucs-ctl restore node 192.168.0.87 --name gpu-test
若回显如下命令,则单master节点故障恢复成功:
restore node 192.168.0.87 successfully.
多master节点故障恢复
在执行机上执行集群故障恢复命令。
./ucs-ctl restore cluster 集群名 -b 备份文件压缩包路径
示例:
./ucs-ctl restore cluster gpu-test -b /home/ggz/gpu-test/backup-file-20230625164904.tar.gz
若回显如下命令,则多master节点故障恢复成功:
restore cluster successfully.
在每个节点上执行etcd数据库恢复,具体命令请参考4。