备份和恢复 undercloud 和 control plane 节点

Red Hat OpenStack Platform 16.2

创建并恢复 undercloud 和 overcloud control plane 节点的备份

摘要

本指南介绍了如何创建和恢复 undercloud 和 control plane 节点的备份,以及如何对备份和恢复问题进行故障排除。升级或更新 Red Hat OpenStack Platform 时需要备份。您还可以选择创建环境的定期备份,以便在出现问题时最小化停机时间。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。

在 JIRA 中提供文档反馈

使用 Create Issue 表单对文档提供反馈。JIRA 问题将在 Red Hat OpenStack Platform Jira 项目中创建,您可以在其中跟踪您的反馈进度。

  1. 确保您已登录到 JIRA。如果您没有 JIRA 帐户,请创建一个帐户来提交反馈。
  2. 点击以下链接打开 Create Issue 页面: Create Issue
  3. 完成 SummaryDescription 字段。在 Description 字段中,包含文档 URL、章节或章节号以及问题的详细描述。不要修改表单中的任何其他字段。
  4. Create

第 1 章 备份 undercloud 节点

要备份 undercloud 节点,请配置备份节点,在 undercloud 节点上安装 Relax-and-Recover 工具,并创建备份镜像。您可以将备份创建作为常规环境维护的一部分。

另外,您必须在执行更新或升级前备份 undercloud 节点。如果在更新或升级过程中出现错误,您可以使用备份将 undercloud 节点恢复到之前的状态。

1.1. 支持的备份格式和协议

undercloud 和备份和恢复过程使用开源工具 Relax-and-Recover (ReaR)来创建和恢复可引导的备份镜像。ReaR 使用 Bash 编写,支持多种镜像格式和多个传输协议。

以下列表显示 Red Hat OpenStack Platform 在使用 ReaR 备份和恢复 undercloud 和 control plane 时支持的备份格式和协议。

可引导介质格式
  • ISO
文件传输协议
  • SFTP
  • NFS

1.2. 配置备份存储位置

在创建 control plane 节点的备份前,在 bar-vars.yaml 环境文件中配置备份存储位置。此文件存储您要传递给备份执行的 key-value 参数。

流程

  • bar-vars.yaml 文件中,配置备份存储位置。遵循 NFS 服务器或 SFTP 服务器的适当步骤。

    • 如果使用 NFS 服务器,请在 bar-vars.yaml 文件中添加以下参数:

      tripleo_backup_and_restore_server: <ip_address>
      tripleo_backup_and_restore_shared_storage_folder: <backup_server_dir_path>
      tripleo_backup_and_restore_output_url: "nfs://{{ tripleo_backup_and_restore_server }}{{ tripleo_backup_and_restore_shared_storage_folder }}"
      tripleo_backup_and_restore_backup_url: "nfs://{{ tripleo_backup_and_restore_server }}{{ tripleo_backup_and_restore_shared_storage_folder }}"

      替换 & lt;ip_address&gt; 和 <backup_server_dir_path>tripleo_backup_and_restore_server 参数值的默认值为 192.168.24.1

    • 如果您使用 SFTP 服务器,请添加 tripleo_backup_and_restore_output_url 参数并设置 SFTP 服务器的 URL 和凭证的值:

      tripleo_backup_and_restore_output_url: sftp://<user>:<password>@<backup_node>/
      tripleo_backup_and_restore_backup_url: iso:///backup/

      将 & lt;user& gt ;、<password & gt; 和 <backup_node > 替换为备份节点 URL 和凭证。

1.3. 在备份节点上安装并配置 NFS 服务器

您可以安装和配置新的 NFS 服务器来存储备份文件。要在备份节点上安装和配置 NFS 服务器,请创建一个清单文件,创建 SSH 密钥,并使用 NFS 服务器选项运行 openstack undercloud backup 命令。

重要
  • 如果您之前安装并配置了 NFS 或 SFTP 服务器,则不需要完成此流程。当您在您要备份的节点上设置 ReaR 时,您可以输入服务器信息。
  • 默认情况下,NFS 服务器的 Relax 和 Recover (ReaR) IP 地址参数为 192.168.24.1。您必须添加参数 tripleo_backup_and_restore_server 来设置与您的环境匹配的 IP 地址值。

流程

  1. 在 undercloud 节点上,提供 undercloud 凭证:

    [stack@undercloud ~]$ source stackrc
    (undercloud) [stack@undercloud ~]$
  2. 在 undercloud 节点上,为备份节点创建一个清单文件:

    (undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml
    [BackupNode]
    <backup_node> ansible_host=<ip_address> ansible_user=<user>
    EOF

    <ip_address &gt ; 和 <user > 替换为应用到您的环境的值。

  3. 将公共 SSH 密钥从 undercloud 节点复制到备份节点。

    (undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>

    <backup_node> 替换为备份节点的路径和名称。

  4. 在备份节点上配置 NFS 服务器:

    (undercloud) [stack@undercloud ~]$ openstack undercloud backup --setup-nfs --extra-vars /home/stack/bar-vars.yaml --inventory /home/stack/nfs-inventory.yaml

1.4. 在 undercloud 节点上安装 ReaR

在创建 undercloud 节点的备份前,在 undercloud 上安装和配置 Relax 和 Recover (ReaR)。

先决条件

流程

  1. 在 undercloud 节点上,提供 undercloud 凭证:

    [stack@undercloud ~]$ source stackrc

    如果使用自定义堆栈名称,请在 tripleo-ansible-inventory 命令中添加 --stack <stack_name > 选项。

  2. 如果您还没有在之前这样做,请创建一个清单文件,并使用 tripleo-ansible-inventory 命令为所有 overcloud 节点生成包含主机和变量的静态清单文件:

    (undercloud) [stack@undercloud ~]$ tripleo-ansible-inventory \
    --ansible_ssh_user heat-admin \
    --static-yaml-inventory /home/stack/tripleo-inventory.yaml
  3. 在 undercloud 节点上安装 ReaR:

    (undercloud) [stack@undercloud ~]$ openstack undercloud backup --setup-rear --extra-vars /home/stack/bar-vars.yaml --inventory /home/stack/tripleo-inventory.yaml
  4. 如果您的系统使用 UEFI 引导装载程序,请在 undercloud 节点上执行以下步骤:

    1. 安装以下工具:

      $ sudo dnf install dosfstools efibootmgr
    2. 通过将 USING_UEFI_BOOTLOADER 参数值 0 替换为值 1,在 /etc/rear/local.conf 中的 ReaR 配置文件中启用 UEFI 备份。

1.5. 创建 undercloud 节点的独立数据库备份

如果要将 Red Hat OpenStack Platform 环境从 13 升级到 16.2,则必须在执行 undercloud 升级后创建独立数据库备份,并在 undercloud 节点上执行 Leapp 升级过程前创建独立数据库备份。

您可以选择在常规备份调度中包含独立 undercloud 数据库备份,以提供额外的数据安全性。undercloud 节点的完整备份包括 undercloud 节点的数据库备份。但是,如果完整的 undercloud 恢复失败,您可能会丢失对完整 undercloud 备份的数据库部分的访问。在这种情况下,您可以从独立的 undercloud 数据库备份中恢复数据库。

流程

  • 创建 undercloud 节点的数据库备份:

    openstack undercloud backup --db-only

    db 备份文件存储在 /home/stack 中,名称为 openstack-backup-mysql-<timestamp>.sql

1.6. 为备份配置 Open vSwitch (OVS)接口

如果环境中使用 Open vSwitch (OVS)网桥,则必须手动配置 OVS 接口,然后才能创建 undercloud 或 control plane 节点的备份。恢复过程使用此信息来恢复网络接口。

流程

  • /etc/rear/local.conf 文件中,使用以下格式添加 NETWORKING_PREPARATION_COMMANDS 参数:

    NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')

    <command_1& gt ; 和 <command_2 > 替换为配置网络接口名称或 IP 地址的命令。例如,您可以添加 ip link add br-ctlplane type bridge 命令来配置 control plane 网桥名称,或添加 ip link set eth0 up 命令来设置接口名称。您可以根据网络配置在参数中添加更多命令。

1.7. 创建 undercloud 节点的备份

要创建 undercloud 节点的备份,请使用 openstack undercloud backup 命令。然后,当节点损坏或无法访问时,您可以使用备份将 undercloud 节点恢复到之前的状态。undercloud 节点的备份包括 undercloud 节点上运行的数据库备份。

如果要将 Red Hat OpenStack Platform 环境从 13 升级到 16.2,则必须在执行 undercloud 升级后创建单独的数据库备份,并在 overcloud 节点上执行 Leapp 升级过程前创建单独的数据库备份。更多信息请参阅 第 1.5 节 “创建 undercloud 节点的独立数据库备份”

先决条件

步骤

  1. stack 用户的身份登录 undercloud。
  2. 检索 MySQL root 密码:

    [stack@undercloud ~]$ PASSWORD=$(sudo /bin/hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
  3. 创建 undercloud 节点的数据库备份:

    [stack@undercloud ~]$ sudo podman exec mysql bash -c "mysqldump -uroot -p$PASSWORD --opt --all-databases" | sudo tee /root/undercloud-all-databases.sql
  4. 查找 undercloud 凭证:

    [stack@undercloud ~]$ source stackrc
  5. 如果您还没有在之前这样做,请创建一个清单文件,并使用 tripleo-ansible-inventory 命令为所有 overcloud 节点生成包含主机和变量的静态清单文件:

    (undercloud) [stack@undercloud ~]$ tripleo-ansible-inventory \
    --ansible_ssh_user heat-admin \
    --static-yaml-inventory /home/stack/tripleo-inventory.yaml
  6. 创建 undercloud 节点的备份:

    (undercloud) [stack@undercloud ~]$ openstack undercloud backup --inventory /home/stack/tripleo-inventory.yaml

1.8. 使用 cron 调度 undercloud 节点备份

您可以使用 Ansible backup-and-restore 角色使用 ReaR 调度 undercloud 节点的备份。您可以在 /var/log/rear-cron 目录中查看日志。

先决条件

流程

  1. 要调度 control plane 节点的备份,请运行以下命令。默认调度为 Sundays at midnight:

    openstack undercloud backup --cron
  2. 可选: 根据您的部署自定义调度的备份:

    • 要更改默认备份计划,请在 tripleo_backup_and_restore_cron 参数中传递不同的 cron 调度:

      openstack undercloud backup --cron --extra-vars
      '{"tripleo_backup_and_restore_cron": "0 0 * * 0"}'
    • 要定义在 cron 运行调度的备份时添加到 backup 命令中的其他参数,请将 tripleo_backup_and_restore_cron_extra 参数传递给 backup 命令,如下例所示:

      openstack undercloud backup --cron --extra-vars '{"tripleo_backup_and_restore_cron_extra":"--extra-vars bar-vars.yaml --inventory /home/stack/tripleo-inventory.yaml"}'
    • 要更改执行备份的默认用户,请将 tripleo_backup_and_restore_cron_user 参数传给 backup 命令,如下例所示:

      openstack undercloud backup --cron --extra-vars '{"tripleo_backup_and_restore_cron_user": "root"}

第 2 章 备份 control plane 节点

要备份 control plane 节点,请配置备份节点,在 control plane 节点上安装 Relax-and-Recover 工具,并创建备份镜像。您可以将备份创建作为常规环境维护的一部分。

另外,您必须在执行更新或升级前备份 control plane 节点。如果在更新或升级过程中出现错误,您可以使用备份将 control plane 节点恢复到之前的状态。

2.1. 支持的备份格式和协议

undercloud 和备份和恢复过程使用开源工具 Relax-and-Recover (ReaR)来创建和恢复可引导的备份镜像。ReaR 使用 Bash 编写,支持多种镜像格式和多个传输协议。

以下列表显示 Red Hat OpenStack Platform 在使用 ReaR 备份和恢复 undercloud 和 control plane 时支持的备份格式和协议。

可引导介质格式
  • ISO
文件传输协议
  • SFTP
  • NFS

2.2. 在备份节点上安装并配置 NFS 服务器

您可以安装和配置新的 NFS 服务器来存储备份文件。要在备份节点上安装和配置 NFS 服务器,请创建一个清单文件,创建 SSH 密钥,并使用 NFS 服务器选项运行 openstack undercloud backup 命令。

重要
  • 如果您之前安装并配置了 NFS 或 SFTP 服务器,则不需要完成此流程。当您在您要备份的节点上设置 ReaR 时,您可以输入服务器信息。
  • 默认情况下,NFS 服务器的 Relax 和 Recover (ReaR) IP 地址参数为 192.168.24.1。您必须添加参数 tripleo_backup_and_restore_server 来设置与您的环境匹配的 IP 地址值。

流程

  1. 在 undercloud 节点上,提供 undercloud 凭证:

    [stack@undercloud ~]$ source stackrc
    (undercloud) [stack@undercloud ~]$
  2. 在 undercloud 节点上,为备份节点创建一个清单文件:

    (undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml
    [BackupNode]
    <backup_node> ansible_host=<ip_address> ansible_user=<user>
    EOF

    <ip_address &gt ; 和 <user > 替换为应用到您的环境的值。

  3. 将公共 SSH 密钥从 undercloud 节点复制到备份节点。

    (undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>

    <backup_node> 替换为备份节点的路径和名称。

  4. 在备份节点上配置 NFS 服务器:

    (undercloud) [stack@undercloud ~]$ openstack undercloud backup --setup-nfs --extra-vars /home/stack/bar-vars.yaml --inventory /home/stack/nfs-inventory.yaml

2.3. 在 control plane 节点上安装 ReaR

在创建 overcloud control plane 备份前,在每个 control plane 节点上安装和配置 Relax 和 Recover (ReaR)。

重要

由于一个已知问题,即使 Controller 节点停机,overcloud 节点的 ReaR 备份也会继续。在运行 ReaR 备份前,请确保您的所有 Controller 节点都在运行 ReaR 备份前运行。计划在以后的 Red Hat OpenStack Platform (RHOSP)发行版本中修复。有关更多信息,请参阅 BZ ctlplane335 - 即使一个控制器无法访问,也会保留 overcloud ctlplane

先决条件

流程

  1. 在 undercloud 节点上,提供 undercloud 凭证:

    [stack@undercloud ~]$ source stackrc
  2. 如果您还没有在之前这样做,请创建一个清单文件,并使用 tripleo-ansible-inventory 命令为所有 overcloud 节点生成包含主机和变量的静态清单文件:

    (undercloud) [stack@undercloud ~]$ tripleo-ansible-inventory \
    --ansible_ssh_user heat-admin \
    --static-yaml-inventory /home/stack/tripleo-inventory.yaml
  3. bar-vars.yaml 文件中,配置备份存储位置。遵循 NFS 服务器或 SFTP 服务器的适当步骤。

    1. 如果使用 NFS 服务器,请在 bar-vars.yaml 文件中添加以下参数:

      tripleo_backup_and_restore_server: <ip_address>
      tripleo_backup_and_restore_shared_storage_folder: <backup_server_dir_path>
      tripleo_backup_and_restore_output_url: "nfs://{{ tripleo_backup_and_restore_server }}{{ tripleo_backup_and_restore_shared_storage_folder }}"
      tripleo_backup_and_restore_backup_url: "nfs://{{ tripleo_backup_and_restore_server }}{{ tripleo_backup_and_restore_shared_storage_folder }}"

      替换 & lt;ip_address>'and '<backup_server_dir_path>tripleo_backup_and_restore_server 参数值的默认值为 192.168.24.1

    2. 如果您使用 SFTP 服务器,请添加 tripleo_backup_and_restore_output_url 参数并设置 SFTP 服务器的 URL 和凭证的值:

      tripleo_backup_and_restore_output_url: sftp://<user>:<password>@<backup_node>/
      tripleo_backup_and_restore_backup_url: iso:///backup/

      将 & lt;user& gt ;、<password & gt; 和 <backup_node > 替换为备份节点 URL 和凭证。

  4. 在 control plane 节点上安装 ReaR:

    (undercloud) [stack@undercloud ~]$ openstack overcloud backup --setup-rear --extra-vars /home/stack/bar-vars.yaml --inventory /home/stack/tripleo-inventory.yaml
  5. 如果您的系统使用 UEFI 引导装载程序,请在 control plane 节点上执行以下步骤:

    1. 安装以下工具:

      $ sudo dnf install dosfstools efibootmgr
    2. 通过将 USING_UEFI_BOOTLOADER 参数值 0 替换为值 1,在 /etc/rear/local.conf 中的 ReaR 配置文件中启用 UEFI 备份。

2.4. 为备份配置 Open vSwitch (OVS)接口

如果环境中使用 Open vSwitch (OVS)网桥,则必须手动配置 OVS 接口,然后才能创建 undercloud 或 control plane 节点的备份。恢复过程使用此信息来恢复网络接口。

流程

  • /etc/rear/local.conf 文件中,使用以下格式添加 NETWORKING_PREPARATION_COMMANDS 参数:

    NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')

    <command_1& gt ; 和 <command_2 > 替换为配置网络接口名称或 IP 地址的命令。例如,您可以添加 ip link add br-ctlplane type bridge 命令来配置 control plane 网桥名称,或添加 ip link set eth0 up 命令来设置接口名称。您可以根据网络配置在参数中添加更多命令。

2.5. 创建 control plane 节点的备份

要创建 control plane 节点的备份,请使用 openstack overcloud backup 命令。然后,当节点损坏或无法访问时,您可以使用备份将 control plane 节点恢复到之前的状态。control plane 节点的备份包括在 control plane 节点上运行的数据库备份。

先决条件

流程

  1. 在每个 control plane 节点上找到 config-drive 分区:

    [stack@undercloud ~]$ lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vda    253:0    0   55G  0 disk
    ├─vda1 253:1    0    1M  0 part            1
    ├─vda2 253:2    0  100M  0 part /boot/efi
    └─vda3 253:3    0 54.9G  0 part /
    1
    config-drive 分区是未挂载的 1M 分区。
  2. 在每个 control plane 节点上,以 root 用户身份备份每个节点的 config-drive 分区:

    [root@controller-x ~]# dd if=<config_drive_partition> of=/mnt/config-drive

    <config_drive_partition > 替换为您在第 1 步中的 config-drive 分区的名称。

  3. 在 undercloud 节点上,提供 undercloud 凭证:

    [stack@undercloud ~]$ source stackrc
  4. 如果您还没有在之前这样做,请使用 tripleo-ansible-inventory 命令生成一个静态清单文件,其中包含所有 overcloud 节点的主机和变量:

    (undercloud) [stack@undercloud ~]$ tripleo-ansible-inventory \
    --ansible_ssh_user heat-admin \
    --static-yaml-inventory /home/stack/tripleo-inventory.yaml
  5. 创建 control plane 节点的备份:

    (undercloud) [stack@undercloud ~]$ openstack overcloud backup --inventory /home/stack/tripleo-inventory.yaml

    备份过程在每个 control plane 节点上运行,而不会将服务中断到您的环境。

2.6. 使用 cron 调度 control plane 节点备份

您可以使用 Ansible backup-and-restore 角色使用 ReaR 调度 control plane 节点的备份。您可以在 /var/log/rear-cron 目录中查看日志。

先决条件

流程

  1. 要调度 control plane 节点的备份,请运行以下命令。默认调度为 Sundays at midnight:

    openstack overcloud backup --cron
  2. 可选: 根据您的部署自定义调度的备份:

    • 要更改默认备份计划,请在 tripleo_backup_and_restore_cron 参数中传递不同的 cron 调度:

      openstack overcloud backup --cron --extra-vars
      '{"tripleo_backup_and_restore_cron": "0 0 * * 0"}'
    • 要定义在 cron 运行调度的备份时添加到 backup 命令中的其他参数,请将 tripleo_backup_and_restore_cron_extra 参数传递给 backup 命令,如下例所示:

      openstack overcloud backup --cron --extra-vars '{"tripleo_backup_and_restore_cron_extra":"--extra-vars bar-vars.yaml --inventory /home/stack/tripleo-inventory.yaml"}'
    • 要更改执行备份的默认用户,请将 tripleo_backup_and_restore_cron_user 参数传给 backup 命令,如下例所示:

      openstack overcloud backup --cron --extra-vars '{"tripleo_backup_and_restore_cron_user": "root"}

第 3 章 恢复 undercloud 和 control plane 节点

如果 undercloud 或 control plane 节点损坏,或者在更新或升级过程中出现错误,您可以将 undercloud 或 overcloud control plane 节点从备份恢复到之前的状态。如果恢复过程无法自动恢复具有并置 Ceph 监视器的 Galera 集群或节点,您可以手动恢复这些组件。

3.1. 为恢复过程准备带有 colocated Ceph 监视器的 control plane

在使用并置 Ceph 监视器恢复 control plane 节点前,先创建一个脚本,它将 Ceph 监控备份文件挂载到节点文件系统,以及 ReaR 用来定位备份文件的另一个脚本。

重要

如果您无法备份 /var/lib/ceph 目录,您必须联系红帽技术支持团队来重建 ceph-mon 索引。如需更多信息,请联系红帽技术支持团队

先决条件

流程

  1. 在您要恢复的每个节点中,创建脚本 /usr/share/rear/setup/default/011_backup_ceph.sh 并添加以下内容:

    mount -t <file_type> <device_disk> /mnt/local
    cd /mnt/local
    [ -d "var/lib/ceph" ] && tar cvfz /tmp/ceph.tar.gz var/lib/ceph --xattrs --xattrs-include='.' --acls
    cd /
    umount <device_disk>

    <file_type & gt; 和 <device_disk > 替换为备份文件的类型和位置。通常,文件类型是 xfs,位置为 /dev/vda2

  2. 在同一节点上,创建脚本 /usr/share/rear/wrapup/default/501_restore_ceph.sh 并添加以下内容:

    if [ -f "/tmp/ceph.tar.gz" ]; then
      rm -rf /mnt/local/var/lib/ceph/*
      tar xvC /mnt/local -f /tmp/ceph.tar.gz var/lib/ceph --xattrs --xattrs-include='.'
    fi

3.2. 恢复 undercloud 节点

您可以使用 ReaR 创建的备份 ISO 镜像将 undercloud 节点恢复到之前的状态。您可以在备份节点上找到备份 ISO 镜像。将可引导 ISO 镜像刻录到 DVD,或通过 Integrated Lights-Out (iLO)远程访问将其下载到 undercloud 节点。

先决条件

流程

  1. 关闭 undercloud 节点。在继续操作前,请确保完全关闭 undercloud 节点。
  2. 使用备份 ISO 镜像引导 undercloud 节点。
  3. Relax-and-Recover 引导菜单显示时,选择 Recover <undercloud_node>。将 <undercloud_node > 替换为 undercloud 节点的名称。

    注意

    如果您的系统使用 UEFI,请选择 Relax-and-Recover (no Secure Boot) 选项。

  4. root 用户身份登录并恢复节点:

    以下信息会显示:

    Welcome to Relax-and-Recover. Run "rear recover" to restore your system!
    RESCUE <undercloud_node>:~ # rear recover

    undercloud 节点恢复过程完成后,控制台会显示以下信息:

    Finished recovering your system
    Exiting rear recover
    Running exit tasks
  5. 关闭节点:

    RESCUE <undercloud_node>:~ #  poweroff

    在引导时,节点会恢复之前的状态。

3.3. 恢复 control plane 节点

如果在更新或升级过程中出现错误,您可以使用 ReaR 创建的备份 ISO 镜像将 control plane 节点恢复到之前的状态。

要恢复 control plane,您必须恢复所有 control plane 节点,以确保状态一致性。

您可以在备份节点上找到备份 ISO 镜像。将可引导 ISO 镜像刻录到 DVD,或通过 Integrated Lights-Out (iLO)远程访问将其下载到 undercloud 节点。

注意

红帽支持使用原生 SDN (如 Open vSwitch (OVS)和默认的 Open Virtual Network (OVN))备份 Red Hat OpenStack Platform。有关第三方 SDN 的详情,请参考第三方 SDN 文档。

先决条件

流程

  1. 关闭每个 control plane 节点。在继续操作前,请确保完全关闭 control plane 节点。
  2. 使用对应的备份 ISO 镜像引导每个 control plane 节点。
  3. Relax-and-Recover 引导菜单显示时,在每个 control plane 节点上选择 Recover <control_plane_node>。将 <control_plane_node > 替换为对应的 control plane 节点的名称。

    注意

    如果您的系统使用 UEFI,请选择 Relax-and-Recover (no Secure Boot) 选项。

  4. 在每个 control plane 节点上,以 root 用户身份登录并恢复节点:

    以下信息会显示:

    Welcome to Relax-and-Recover. Run "rear recover" to restore your system!
    RESCUE <control_plane_node>:~ # rear recover

    当 control plane 节点恢复过程完成后,控制台会显示以下信息:

    Finished recovering your system
    Exiting rear recover
    Running exit tasks
  5. 当命令行控制台可用时,恢复每个 control plane 节点的 config-drive 分区:

    # once completed, restore the config-drive partition (which is ISO9660)
    RESCUE <control_plane_node>:~ $ dd if=/mnt/local/mnt/config-drive of=<config_drive_partition>
  6. 关闭节点:

    RESCUE <control_plane_node>:~ #  poweroff
  7. 将引导序列设置为正常的引导设备。在引导时,节点会恢复之前的状态。
  8. 为确保服务正确运行,请检查 pacemaker 的状态。以 root 用户身份登录 Controller 节点,然后输入以下命令:

    # pcs status
  9. 要查看 overcloud 的状态,请使用 OpenStack Integration Test Suite (tempest)。如需更多信息,请参阅使用 Integration Test Suite (tempest)验证 OpenStack 云

故障排除

  • 运行以下命令,清除 pcs status 显示的资源警告:
 # pcs resource clean
  • 运行以下命令,清除 pcs status 显示的 STONITH 隔离操作错误:
# pcs resource clean
# pcs stonith history cleanup

3.4. 手动恢复 Galera 集群

如果 Galera 集群没有作为恢复过程的一部分恢复,您必须手动恢复 Galera。

注意

在此过程中,您必须在一个 Controller 节点上执行一些步骤。请确定您在与这个过程相同的 Controller 节点上执行这些步骤。

流程

  1. Controller-0 上,检索 Galera 集群虚拟 IP:

    $ sudo hiera -c /etc/puppet/hiera.yaml mysql_vip
  2. 通过所有 Controller 节点上的虚拟 IP 禁用数据库连接:

    $ sudo iptables -I INPUT  -p tcp --destination-port 3306 -d $MYSQL_VIP  -j DROP
  3. Controller-0 上,检索 MySQL root 密码:

    $ sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password
  4. Controller-0 上,将 Galera 资源设置为 非受管 模式:

    $ sudo pcs resource unmanage galera-bundle
  5. 停止所有 Controller 节点上的 MySQL 容器:

    $ sudo podman container stop $(sudo podman container ls --all --format "{{.Names}}" --filter=name=galera-bundle)
  6. 在所有 Controller 节点上移动当前目录:

    $ sudo mv /var/lib/mysql /var/lib/mysql-save
  7. 在所有 Controller 节点上创建新目录 /var/lib/mysq

    $ sudo mkdir /var/lib/mysql
    $ sudo chown 42434:42434 /var/lib/mysql
    $ sudo chcon -t container_file_t /var/lib/mysql
    $ sudo chmod 0755 /var/lib/mysql
    $ sudo chcon -r object_r /var/lib/mysql
    $ sudo chcon -u system_u /var/lib/mysql
  8. 启动所有 Controller 节点上的 MySQL 容器:

    $ sudo podman container start $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
  9. 在所有 Controller 节点上创建 MySQL 数据库:

    $ sudo podman exec -i $(sudo podman container ls --all --format "{{ .Names }}" \
          --filter=name=galera-bundle) bash -c "mysql_install_db --datadir=/var/lib/mysql --user=mysql --log_error=/var/log/mysql/mysql_init.log"
  10. 在所有 Controller 节点上启动数据库:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
          --filter=name=galera-bundle) bash -c "mysqld_safe --skip-networking --wsrep-on=OFF --log-error=/var/log/mysql/mysql_safe.log" &
  11. 在所有 Controller 节点上移动 .my.cnf Galera 配置文件:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
          --filter=name=galera-bundle) bash -c "mv /root/.my.cnf /root/.my.cnf.bck"
  12. 重置所有 Controller 节点上的 Galera root 密码:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"  \
          --filter=name=galera-bundle) bash -c "mysql -uroot -e'use mysql;update user set password=PASSWORD(\"$ROOTPASSWORD\")where User=\"root\";flush privileges;'"
  13. 在所有 Controller 节点上恢复 Galera 容器中的 .my.cnf Galera 配置文件:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"   \
          --filter=name=galera-bundle) bash -c "mv /root/.my.cnf.bck /root/.my.cnf"
  14. Controller-0 上,将备份数据库文件复制到 /var/lib/MySQL

    $ sudo cp $BACKUP_FILE /var/lib/mysql
    $ sudo cp $BACKUP_GRANT_FILE /var/lib/mysql
    注意

    这些文件的路径为 /home/heat-admin/。

  15. Controller-0 上,恢复 MySQL 数据库:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"    \
    --filter=name=galera-bundle) bash -c "mysql -u root -p$ROOT_PASSWORD < \"/var/lib/mysql/$BACKUP_FILE\"  "
    
    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"    \
    --filter=name=galera-bundle) bash -c "mysql -u root -p$ROOT_PASSWORD < \"/var/lib/mysql/$BACKUP_GRANT_FILE\"  "
  16. 关闭所有 Controller 节点上的数据库:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"    \
          --filter=name=galera-bundle) bash -c "mysqladmin shutdown"
  17. Controller-0 上,启动 bootstrap 节点:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}"  --filter=name=galera-bundle) \
            /usr/bin/mysqld_safe --pid-file=/var/run/mysql/mysqld.pid --socket=/var/lib/mysql/mysql.sock --datadir=/var/lib/mysql \
            --log-error=/var/log/mysql/mysql_cluster.log  --user=mysql --open-files-limit=16384 \
            --wsrep-cluster-address=gcomm:// &
  18. 验证 :在 Controller-0 上,检查集群的状态:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
             --filter=name=galera-bundle) bash -c "clustercheck"

    确保显示以下信息:"Galera cluster node is synchronized",否则您必须重新创建该节点。

  19. Controller-0 上,从配置中检索集群地址:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
    --filter=name=galera-bundle) bash -c "grep wsrep_cluster_address /etc/my.cnf.d/galera.cnf" | awk '{print $3}'
  20. 在每个剩余的 Controller 节点上,启动数据库并验证集群:

    1. 启动数据库:

      $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
            --filter=name=galera-bundle) /usr/bin/mysqld_safe --pid-file=/var/run/mysql/mysqld.pid --socket=/var/lib/mysql/mysql.sock \
            --datadir=/var/lib/mysql --log-error=/var/log/mysql/mysql_cluster.log  --user=mysql --open-files-limit=16384 \
            --wsrep-cluster-address=$CLUSTER_ADDRESS &
    2. 检查 MYSQL 集群的状态:

      $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \
               --filter=name=galera-bundle) bash -c "clustercheck"

      确保显示以下信息:"Galera cluster node is synchronized",否则您必须重新创建该节点。

  21. 停止所有 Controller 节点上的 MySQL 容器:

    $ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \
            /usr/bin/mysqladmin -u root shutdown
  22. 在所有 Controller 节点上,删除以下防火墙规则,以允许通过虚拟 IP 地址进行数据库连接:

    $ sudo iptables -D  INPUT  -p tcp --destination-port 3306 -d $MYSQL_VIP  -j DROP
  23. 在所有 Controller 节点上重启 MySQL 容器:

    $ sudo podman container restart $(sudo podman container ls --all --format  "{{ .Names }}" --filter=name=galera-bundle)
  24. 重启所有 Controller 节点上的 clustercheck 容器:

    $ sudo podman container restart $(sudo podman container ls --all --format  "{{ .Names }}" --filter=name=clustercheck)
  25. Controller-0 上,将 Galera 资源设置为 受管 模式:

    $ sudo pcs resource manage galera-bundle

验证

  1. 要确保服务正确运行,请检查 pacemaker 的状态:

    $ sudo pcs status
  2. 要查看 overcloud 的状态,请使用 OpenStack Integration Test Suite (tempest)。如需更多信息,请参阅使用 Integration Test Suite (tempest)验证 OpenStack 云
  3. 如果发现特定节点出现问题,请使用 clustercheck 检查集群的状态:

    $ sudo podman exec clustercheck /usr/bin/clustercheck

3.5. 手动恢复 undercloud 节点数据库

如果 undercloud 数据库没有作为 undercloud 恢复过程的一部分恢复,您可以手动恢复数据库。您只能在之前创建的独立数据库备份时恢复数据库。

先决条件

流程

  1. root 用户身份登录 director undercloud 节点。
  2. 停止所有 tripleo 服务:

    [root@director ~]# systemctl  stop  tripleo_*
  3. 输入以下命令确保没有容器在服务器上运行:

    [root@director ~]# podman ps

    如果有任何容器正在运行,请输入以下命令停止容器:

    [root@director ~]# podman stop <container_name>
  4. 创建当前 /var/lib/mysql 目录的备份,然后删除该目录:

    [root@director ~]# cp -a /var/lib/mysql /var/lib/mysql_bck
    [root@director ~]# rm -rf /var/lib/mysql
  5. 重新创建数据库目录并为新目录设置 SELinux 属性:

    [root@director ~]# mkdir /var/lib/mysql
    [root@director ~]# chown 42434:42434 /var/lib/mysql
    [root@director ~]# chmod 0755 /var/lib/mysql
    [root@director ~]# chcon -t container_file_t /var/lib/mysql
    [root@director ~]# chcon -r object_r /var/lib/mysql
    [root@director ~]# chcon -u system_u /var/lib/mysql
  6. mariadb 镜像创建本地标签。将 <image_id &gt ; 和 <undercloud.ctlplane.example.com > 替换为环境中适用的值:

    [root@director ~]# podman images | grep mariadb
    <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.2_20210322.1   <image_id>   3 weeks ago   718 MB
    [root@director ~]# podman tag <image_id> mariadb
    [root@director ~]# podman images | grep maria
    localhost/mariadb                                                                         	latest        	<image_id>   3 weeks ago   718 MB
    <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.2_20210322.1   <image_id>   3 weeks ago   718 MB
  7. 使用容器初始化 /var/lib/mysql 目录:

    [root@director ~]# podman run --net=host -v /var/lib/mysql:/var/lib/mysql localhost/mariadb mysql_install_db --datadir=/var/lib/mysql --user=mysql
  8. 复制您要导入到数据库的数据库备份文件:

    [root@director ~]# cp /root/undercloud-all-databases.sql /var/lib/mysql
  9. 启动数据库服务以导入数据:

    [root@director ~]# podman run --net=host -dt -v /var/lib/mysql:/var/lib/mysql  localhost/mariadb  /usr/libexec/mysqld
  10. 导入数据并配置 max_allowed_packet 参数:

    1. 登录到容器并配置它:

      [root@director ~]# podman exec -it <container_id> /bin/bash
          ()[mysql@5a4e429c6f40 /]$ mysql -u root -e "set global max_allowed_packet = 1073741824;"
          ()[mysql@5a4e429c6f40 /]$ mysql -u root < /var/lib/mysql/undercloud-all-databases.sql
          ()[mysql@5a4e429c6f40 /]$ mysql -u root -e 'flush privileges'
          ()[mysql@5a4e429c6f40 /]$ exit
          exit
    2. 停止容器:

      [root@director ~]# podman stop <container_id>
    3. 检查没有容器正在运行:

      [root@director ~]# podman ps
      CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
      [root@director ~]#
  11. 重启所有 tripleo 服务:

    [root@director ~]# systemctl start multi-user.target

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.