更新时间:2024-03-04 GMT+08:00
分享

备份与恢复

背景

UCS本地集群安装完成后,为保证集群高可用,防止在发生集群故障时,集群内数据丢失,UCS支持对于本地集群上的3个master节点上的证书文件、加解密物料、etcd数据等信息的备份,来保证UCS本地集群在遇到故障时能根据备份的数据进行恢复。

约束与限制

无论是单master还是多master故障,节点IP须保持不变。

集群备份

本地备份

  1. 创建备份文件压缩包存放的目录。
  2. 执行备份命令:
    ./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包含证书与加解密材料。

远端备份

  1. 在远端sftp主机创建备份文件压缩包存放的目录。
  2. 执行备份命令:
    ./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数据恢复

  1. 准备etcd备份数据文件。

    将备份数据压缩文件{clustername}-backup-{timestamp}.tar.gz发送到需要恢复的集群的各个master/etcd节点上。

  2. 关闭etcd服务

    在节点上执行:

    mv /var/paas/kubernetes/manifests/etcd*.manifest /var/paas/kubernetes/

    等待服务停止。

    crictl ps | grep etcd

    若查询不到etcd容器,说明服务已经停止。

  3. 备份节点的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
  4. 在含有etcd的节点上执行恢复命令。
    ./ucs-ctl restore etcd 备份文件压缩包路径

    示例如下:

    ./ucs-ctl restore etcd /home/ggz/gpu-test/backup-file-20230625164904.tar.gz

    若回显如下命令,则etcd的节点数据恢复成功:

    Restore the etcd snapshot successfully.
  5. 对etcd节点重启etcd服务,重启过程需要等待几分钟。
    mv /var/paas/kubernetes/etcd*.manifest /var/paas/kubernetes/manifests

    等待服务重新启动:

    crictl ps | grep etcd

    若查询到etcd容器说明服务已经重启,此时该节点的etcd数据得到恢复。

    etcd数据恢复需要每个含有etcd的节点上单独执行1-5步骤。

单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

分享:

    相关文档

    相关产品