备份和恢复 undercloud 和 control plane 节点
创建并恢复 undercloud 和 overcloud control plane 节点的备份
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
使用直接文档反馈(DDF)功能
使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。
- 以 Multi-page HTML 格式查看文档。
- 请确定您看到文档右上角的 反馈 按钮。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点 添加反馈。
- 在添加反馈项中输入您的意见。
- 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
- 点 Submit。
第 1 章 备份 undercloud 节点
要备份 undercloud 节点,请配置备份节点,在 undercloud 节点上安装 Relax-and-Recover 工具,并创建备份镜像。您可以将备份创建作为常规环境维护的一部分。
另外,您必须在执行更新或升级前备份 undercloud 节点。如果在更新或升级过程中出现错误,您可以使用备份将 undercloud 节点恢复到之前的状态。
1.1. 支持的备份格式和协议
undercloud 和备份和恢复过程使用开源工具 Relax-and-Recover (ReaR)来创建和恢复可引导的备份镜像。ReaR 使用 Bash 编写,支持多种镜像格式和多个传输协议。
以下列表显示了 Red Hat OpenStack Platform 支持的备份格式和协议。
- 可引导介质格式
- ISO
- 文件传输协议
- SFTP
- NFS
1.2. 在备份节点上安装并配置 NFS 服务器
您可以安装和配置新的 NFS 服务器来存储备份文件。要在备份节点上安装和配置 NFS 服务器,请创建一个清单文件,设置 SSH 密钥,并使用 NFS 服务器选项运行 openstack undercloud backup
命令。
- 如果您之前安装并配置了 NFS 或 SFTP 服务器,则不需要完成此流程。当您在您要备份的节点上设置 ReaR 时,您可以输入服务器信息。
-
默认情况下,Relax 和 Recover (ReaR)配置假设 NFS 服务器的 IP 地址为
192.168.24.1
。如果您的 NFS 服务器具有不同的 IP 地址,请将参数tripleo_backup_and_restore_server
添加到 setup ReaR 命令中。
流程
在 undercloud 节点上,提供 undercloud 凭证:
[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$
在 undercloud 节点上,为备份节点创建一个清单文件,并将 <
ip_address
> 和 <user
> 替换为应用到您的环境的值:(undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml [BackupNode] <backup_node> ansible_host=<ip_address> ansible_user=<user> EOF
在 undercloud 节点上,创建以下 Ansible playbook,并将 &
lt;backup_node
> 替换为备份节点的主机名:(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_nfs_setup.yaml # Playbook # Substitute <backup_node> with the host name of your backup node. - become: true hosts: <backup_node> name: Setup NFS server for ReaR roles: - role: backup-and-restore EOF
将公共 SSH 密钥从 undercloud 节点复制到备份节点。
(undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
将
<backup_node>
替换为备份节点的路径和名称。在 undercloud 节点上,输入以下
ansible-playbook
命令来配置备份节点:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/nfs-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_setup_nfs_server \ ~/bar_nfs_setup.yaml
1.3. 在 undercloud 节点上安装 ReaR
在创建 undercloud 节点的备份前,在 undercloud 上安装和配置 Relax 和 Recover (ReaR)。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 1.2 节 “在备份节点上安装并配置 NFS 服务器”。
流程
在 undercloud 节点上,提供 undercloud 凭证,并使用
tripleo-ansible-inventory
命令生成一个静态清单文件,其中包含所有 overcloud 节点的主机和变量:[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$ tripleo-ansible-inventory \ --ansible_ssh_user heat-admin \ --static-yaml-inventory /home/stack/tripleo-inventory.yaml
如果使用自定义堆栈名称,请在
tripleo-ansible-inventory
命令中添加--stack <stack_name
> 选项。在 undercloud 节点上,创建以下 Ansible playbook:
(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_setup-undercloud.yaml # Playbook # Installing and configuring ReaR on the undercloud node - become: true hosts: undercloud name: Install ReaR roles: - role: backup-and-restore EOF
选择以下选项之一:
如果使用 NFS,请输入以下 Ansible 命令在 undercloud 节点上安装 ReaR:
(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ -e tripleo_backup_and_restore_server=<nfs-ip> \ --tags bar_setup_rear \ ~/bar_rear_setup-undercloud.yaml
如果使用 SFTP,请输入以下 Ansible 命令在 undercloud 节点上安装 ReaR:
(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ -e tripleo_backup_and_restore_output_url=sftp://<user>:<password>@<backup_node_ip>/ \ -e tripleo_backup_and_restore_backup_url=iso:///backup/ \ --tags bar_setup_rear \ ~/bar_rear_setup-undercloud.yaml
如果您的系统使用 UEFI 引导装载程序,请在 undercloud 节点上执行以下步骤:
安装以下工具:
$ sudo dnf install dosfstools efibootmgr
-
通过将
USING_UEFI_BOOTLOADER
参数值0
替换为值1
,在/etc/rear/local.conf
中的 ReaR 配置文件中启用 UEFI 备份。
1.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
命令来设置接口名称。您可以根据网络配置在参数中添加更多命令。
1.5. 创建 undercloud 节点的备份
要创建 undercloud 节点的备份,请使用 backup-and-restore
Ansible 角色。然后,当节点损坏或无法访问时,您可以使用备份将 undercloud 节点恢复到之前的状态。undercloud 节点的备份包括 undercloud 节点上运行的数据库备份。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 1.2 节 “在备份节点上安装并配置 NFS 服务器”。
- 您已在 undercloud 节点上安装了 ReaR。更多信息请参阅 第 1.3 节 “在 undercloud 节点上安装 ReaR”。
- 如果您的网络接口使用了 OVS 网桥,则已配置了 OVS 接口。更多信息请参阅 第 1.4 节 “为备份配置 Open vSwitch (OVS)接口”。
步骤
-
以
stack
用户的身份登录 undercloud。 检索 MySQL root 密码:
[stack@undercloud ~]$ PASSWORD=$(sudo /bin/hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
创建 undercloud 节点的数据库备份:
[stack@undercloud ~]$ sudo podman exec mysql bash -c "mysqldump -uroot -p$PASSWORD --opt --all-databases" | sudo tee /root/undercloud-all-databases.sql
查找 undercloud 凭证:
[stack@undercloud ~]$ source stackrc
在 undercloud 节点上,创建以下 Ansible playbook:
(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_create_restore_images-undercloud.yaml # Playbook # Using ReaR on the undercloud node. - become: true hosts: undercloud name: Create the recovery images for the undercloud roles: - role: backup-and-restore EOF
要创建 undercloud 节点的备份,请输入以下
ansible-playbook
命令:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_create_recover_image \ ~/bar_rear_create_restore_images-undercloud.yaml
第 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 支持的备份格式和协议。
- 可引导介质格式
- ISO
- 文件传输协议
- SFTP
- NFS
2.2. 在备份节点上安装并配置 NFS 服务器
您可以安装和配置新的 NFS 服务器来存储备份文件。要在备份节点上安装和配置 NFS 服务器,请创建一个清单文件,设置 SSH 密钥,并使用 NFS 服务器选项运行 openstack undercloud backup
命令。
- 如果您之前安装并配置了 NFS 或 SFTP 服务器,则不需要完成此流程。当您在您要备份的节点上设置 ReaR 时,您可以输入服务器信息。
-
默认情况下,Relax 和 Recover (ReaR)配置假设 NFS 服务器的 IP 地址为
192.168.24.1
。如果您的 NFS 服务器具有不同的 IP 地址,请将参数tripleo_backup_and_restore_server
添加到 setup ReaR 命令中。
流程
在 undercloud 节点上,提供 undercloud 凭证:
[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$
在 undercloud 节点上,为备份节点创建一个清单文件,并将 <
ip_address
> 和 <user
> 替换为应用到您的环境的值:(undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml [BackupNode] <backup_node> ansible_host=<ip_address> ansible_user=<user> EOF
在 undercloud 节点上,创建以下 Ansible playbook,并将 &
lt;backup_node
> 替换为备份节点的主机名:(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_nfs_setup.yaml # Playbook # Substitute <backup_node> with the host name of your backup node. - become: true hosts: <backup_node> name: Setup NFS server for ReaR roles: - role: backup-and-restore EOF
将公共 SSH 密钥从 undercloud 节点复制到备份节点。
(undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
将
<backup_node>
替换为备份节点的路径和名称。在 undercloud 节点上,输入以下
ansible-playbook
命令来配置备份节点:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/nfs-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_setup_nfs_server \ ~/bar_nfs_setup.yaml
2.3. 在 control plane 节点上安装 ReaR
在创建 control plane 节点的备份前,在每个 control plane 节点上安装和配置 Relax 和 Recover (ReaR)。
由于一个已知问题,即使 Controller 节点停机,overcloud 节点的 ReaR 备份也会继续。在运行 ReaR 备份前,请确保您的所有 Controller 节点都在运行 ReaR 备份前运行。计划在以后的 Red Hat OpenStack Platform (RHOSP)发行版本中修复。有关更多信息,请参阅 BZ#2077335 - 即使一个控制器无法访问,也会保留 overcloud ctlplane。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 2.2 节 “在备份节点上安装并配置 NFS 服务器”。
流程
在 undercloud 节点上,创建以下 Ansible playbook:
(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_setup-controller.yaml # Playbook # Install and configuring ReaR on the control plane nodes - become: true hosts: Controller name: Install ReaR roles: - role: backup-and-restore EOF
注意如果您使用可组合角色部署 control plane 节点,请将主机类型
Controller
替换为 control plane 中的节点类型。例如,如果您在单独的节点上部署了数据库、消息传递和网络,请输入ControllerOpenstack、Database、Messaging、Networker
。选择以下选项之一:
如果您使用 NFS 和 NFS 服务器的 IP 地址,在 undercloud 节点上是默认值
192.168.24.1
,请输入以下 Ansible 命令在 control plane 节点上安装 ReaR:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_setup_rear \ ~/bar_rear_setup-controller.yaml
如果您使用 SFTP 和 NFS 服务器的 IP 地址不是默认值
192.168.24.1
,请输入以下 Ansible 命令在 control plane 节点上安装 ReaR:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ -e tripleo_backup_and_restore_server=<nfs_ip> \ --tags bar_setup_rear \ ~/bar_rear_setup-controller.yaml
将
<nfs_ip
> 替换为 NFS 服务器的 IP 地址。如果使用 SFTP,请输入以下 Ansible 命令在 control plane 节点上安装 ReaR:
(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ -e tripleo_backup_and_restore_output_url=sftp://<user>:<password>@<backup_node_ip>/ \ -e tripleo_backup_and_restore_backup_url=iso:///backup/ \ --tags bar_setup_rear \ ~/bar_rear_setup-undercloud.yaml
如果您的系统使用 UEFI 引导装载程序,请在 control plane 节点上执行以下步骤:
安装以下工具:
$ sudo dnf install dosfstools efibootmgr
-
通过将
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 节点的备份,请使用 backup-and-restore
Ansible 角色。然后,当节点损坏或无法访问时,您可以使用备份将 control plane 节点恢复到之前的状态。control plane 节点的备份包括在 control plane 节点上运行的数据库备份。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 2.2 节 “在备份节点上安装并配置 NFS 服务器”。
- 您已在 control plane 节点上安装了 ReaR。更多信息请参阅 第 2.3 节 “在 control plane 节点上安装 ReaR”。
- 如果您的网络接口使用了 OVS 网桥,则已配置了 OVS 接口。更多信息请参阅 第 2.4 节 “为备份配置 Open vSwitch (OVS)接口”。
流程
在每个 control plane 节点上,以
root
用户身份备份每个节点的config-drive
分区:[root@controller-x ~]$ dd if=<config_drive_partition> of=/mnt/config-drive
在 undercloud 节点上,创建以下 Ansible playbook:
(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_create_restore_images-controller.yaml # Playbook # Using ReaR on the control plane nodes. - become: true hosts: ceph_mon name: Backup ceph authentication tasks: - name: Backup ceph authentication role include_role: name: backup-and-restore tasks_from: ceph_authentication tags: - bar_create_recover_image - become: true hosts: Controller name: Create the recovery images for the control plane roles: - role: backup-and-restore EOF
在 undercloud 节点上,输入以下
ansible-playbook
命令来创建 control plane 节点的备份:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_create_recover_image \ ~/bar_rear_create_restore_images-controller.yaml
2.6. 使用 cron 调度 control plane 节点备份
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
您可以使用 Ansible backup-and-restore
角色,配置 cron 作业,以使用 ReaR 创建 control plane 节点的备份。您可以在 /var/log/rear-cron
目录中查看日志。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 1.2 节 “在备份节点上安装并配置 NFS 服务器”。
- 您已在 undercloud 和 control plane 节点上安装了 ReaR。更多信息请参阅 第 2.3 节 “在 control plane 节点上安装 ReaR”。
- 在备份位置有足够的可用磁盘空间来存储备份。
流程
在 undercloud 节点上,输入以下命令来创建备份脚本:
[stack@undercloud ~]$ cat <<'EOF' > /home/stack/execute-rear-cron.sh #!/bin/bash OWNER="stack" TODAY=`date +%Y%m%d` FILE="/var/log/rear-cron.${TODAY}" sudo touch ${FILE} sudo chown ${OWNER}:${OWNER} ${FILE} CURRENTTIME=`date` echo "[$CURRENTTIME] rear start" >> ${FILE} source /home/stack/stackrc && /usr/bin/openstack overcloud backup 2>&1 >> ${FILE} CURRENTTIME=`date` echo "[$CURRENTTIME] rear end" >> ${FILE} EOF
为
/home/stack/execute-rear-cron.sh
脚本设置可执行权限:[stack@undercloud ~]$ chmod 755 /home/stack/execute-rear-cron.sh
使用
crontab -e
命令编辑 crontab 文件,并使用您选择的编辑器添加以下 cron 任务。确保将更改保存到该文件:[stack@undercloud ~]# $ crontab -e #adding the following line 0 0 * * * /home/stack/execute-rear-cron.sh
/home/stack/execute-rear-cron.sh
脚本由 stack 用户在夜夜执行。要验证是否调度 cron 任务,请输入以下命令:
[stack@undercloud ~]$ crontab -l
命令输出显示调度的 cron 作业:
0 0 * * * /home/stack/execute-rear-cron.sh
第 3 章 备份使用可组合角色的 control plane 节点
如果您使用可组合角色(也称为自定义角色)部署 control plane,请将备份过程配置为根据可组合角色配置捕获每种节点类型。要备份 control plane 节点,请配置备份节点,在 control plane 节点上安装 Relax-and-Recover 工具,并创建备份镜像。
在执行更新或升级前,您必须备份 control plane 节点。如果在更新或升级过程中出现错误,您可以使用备份将 control plane 节点恢复到之前的状态。您还可以作为常规环境维护的一部分创建备份。
3.1. 支持的备份格式和协议
undercloud 和备份和恢复过程使用开源工具 Relax-and-Recover (ReaR)来创建和恢复可引导的备份镜像。ReaR 使用 Bash 编写,支持多种镜像格式和多个传输协议。
以下列表显示了 Red Hat OpenStack Platform 支持的备份格式和协议。
- 可引导介质格式
- ISO
- 文件传输协议
- SFTP
- NFS
3.2. 在备份节点上安装并配置 NFS 服务器
您可以安装和配置新的 NFS 服务器来存储备份文件。要在备份节点上安装和配置 NFS 服务器,请创建一个清单文件,设置 SSH 密钥,并使用 NFS 服务器选项运行 openstack undercloud backup
命令。
- 如果您之前安装并配置了 NFS 或 SFTP 服务器,则不需要完成此流程。当您在您要备份的节点上设置 ReaR 时,您可以输入服务器信息。
-
默认情况下,Relax 和 Recover (ReaR)配置假设 NFS 服务器的 IP 地址为
192.168.24.1
。如果您的 NFS 服务器具有不同的 IP 地址,请将参数tripleo_backup_and_restore_server
添加到 setup ReaR 命令中。
流程
在 undercloud 节点上,提供 undercloud 凭证:
[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$
在 undercloud 节点上,为备份节点创建一个清单文件,并将 <
ip_address
> 和 <user
> 替换为应用到您的环境的值:(undercloud) [stack@undercloud ~]$ cat <<'EOF'> ~/nfs-inventory.yaml [BackupNode] <backup_node> ansible_host=<ip_address> ansible_user=<user> EOF
在 undercloud 节点上,创建以下 Ansible playbook,并将 &
lt;backup_node
> 替换为备份节点的主机名:(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_nfs_setup.yaml # Playbook # Substitute <backup_node> with the host name of your backup node. - become: true hosts: <backup_node> name: Setup NFS server for ReaR roles: - role: backup-and-restore EOF
将公共 SSH 密钥从 undercloud 节点复制到备份节点。
(undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
将
<backup_node>
替换为备份节点的路径和名称。在 undercloud 节点上,输入以下
ansible-playbook
命令来配置备份节点:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/nfs-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_setup_nfs_server \ ~/bar_nfs_setup.yaml
3.3. 在 control plane 节点上安装 ReaR
在创建 control plane 节点的备份前,在每个 control plane 节点上安装和配置 Relax 和 Recover (ReaR)。
由于一个已知问题,即使 Controller 节点停机,overcloud 节点的 ReaR 备份也会继续。在运行 ReaR 备份前,请确保您的所有 Controller 节点都在运行 ReaR 备份前运行。计划在以后的 Red Hat OpenStack Platform (RHOSP)发行版本中修复。有关更多信息,请参阅 BZ#2077335 - 即使一个控制器无法访问,也会保留 overcloud ctlplane。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 3.2 节 “在备份节点上安装并配置 NFS 服务器”。
流程
在 undercloud 节点上,创建以下 Ansible playbook:
(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_setup-controller.yaml # Playbook # Install and configuring ReaR on the control plane nodes - become: true hosts: Controller name: Install ReaR roles: - role: backup-and-restore EOF
注意如果您使用可组合角色部署 control plane 节点,请将主机类型
Controller
替换为 control plane 中的节点类型。例如,如果您在单独的节点上部署了数据库、消息传递和网络,请输入ControllerOpenstack、Database、Messaging、Networker
。选择以下选项之一:
如果您使用 NFS 和 NFS 服务器的 IP 地址,在 undercloud 节点上是默认值
192.168.24.1
,请输入以下 Ansible 命令在 control plane 节点上安装 ReaR:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_setup_rear \ ~/bar_rear_setup-controller.yaml
如果您使用 SFTP 和 NFS 服务器的 IP 地址不是默认值
192.168.24.1
,请输入以下 Ansible 命令在 control plane 节点上安装 ReaR:(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ -e tripleo_backup_and_restore_server=<nfs_ip> \ --tags bar_setup_rear \ ~/bar_rear_setup-controller.yaml
将
<nfs_ip
> 替换为 NFS 服务器的 IP 地址。如果使用 SFTP,请输入以下 Ansible 命令在 control plane 节点上安装 ReaR:
(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ -e tripleo_backup_and_restore_output_url=sftp://<user>:<password>@<backup_node_ip>/ \ -e tripleo_backup_and_restore_backup_url=iso:///backup/ \ --tags bar_setup_rear \ ~/bar_rear_setup-undercloud.yaml
如果您的系统使用 UEFI 引导装载程序,请在 control plane 节点上执行以下步骤:
安装以下工具:
$ sudo dnf install dosfstools efibootmgr
-
通过将
USING_UEFI_BOOTLOADER
参数值0
替换为值1
,在/etc/rear/local.conf
中的 ReaR 配置文件中启用 UEFI 备份。
3.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
命令来设置接口名称。您可以根据网络配置在参数中添加更多命令。
3.5. 创建使用可组合角色的 control plane 节点的备份
要创建使用可组合角色的 control plane 节点的备份,请使用 backup-and-restore
Ansible 角色。然后,当节点损坏或无法访问时,您可以使用备份将 control plane 节点恢复到之前的状态。control plane 节点的备份包括在 control plane 节点上运行的数据库备份。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 3.2 节 “在备份节点上安装并配置 NFS 服务器”。
- 您已在 control plane 节点上安装了 ReaR。更多信息请参阅 第 3.3 节 “在 control plane 节点上安装 ReaR”。
- 如果您的网络接口使用了 OVS 网桥,则已配置了 OVS 接口。更多信息请参阅 第 3.4 节 “为备份配置 Open vSwitch (OVS)接口”。
流程
在每个 Controller 节点上,备份每个节点的
config-drive
分区:[heat-admin@controller-x ~]$ mkdir /mnt/config-drive [heat-admin@controller-x ~]$ dd if=<config_drive_partition> of=/mnt/config-drive
注意您只需要在 Controller 节点上执行此步骤。
在 undercloud 节点上,创建以下 Ansible playbook:
(undercloud) [stack@undercloud ~]$ cat <<'EOF' > ~/bar_rear_create_restore_images-controller.yaml # Playbook # Using ReaR on the Contorl-Plane - Composable Roles - become: true hosts: ControllerOpenstack,Database,Messaging,Networker name: Stop service management tasks: - include_role: name: backup-and-restore tasks_from: ../backup/tasks/service_manager_pause when: - tripleo_backup_and_restore_service_manager - become: true hosts: Database name: Database Backup tasks: - include_role: name: backup-and-restore tasks_from: ../backup/tasks/db_backup - become: true hosts: pacemaker name: Backup pacemaker configuration tasks: - include_role: name: backup-and-restore tasks_from: pacemaker_backup - become: true hosts: ControllerOpenstack,Database,Messaging,Networker name: Create recovery images with ReaR tasks: - include_role: name: backup-and-restore tasks_from: ../backup/tasks/main - become: true hosts: pacemaker name: Enabled pacemaker tasks: - name: Enable pacemaker command: pcs cluster start --all when: enabled_galera run_once: true tags: - bar_create_recover_image - become: true hosts: Database name: Restart galera tasks: - name: unPause database container command: "{{ tripleo_container_cli }} unpause {{ tripleo_backup_and_restore_mysql_container }}" when: - tripleo_container_cli is defined - not enabled_galera - tripleo_backup_and_restore_mysql_container is defined tags: - bar_create_recover_image - become: true hosts: ControllerOpenstack,Database,Messaging,Networker name: Unpause everything tasks: - name: Gather Container Service Name shell: | set -o pipefail /usr/bin/{{ tripleo_container_cli }} ps -a --filter='status=paused' --format '{{ '{{' }}.Names {{ '}}' }} ' register: container_services changed_when: container_services.stdout is defined tags: - bar_create_recover_image - name: Unpause containers for database backup. command: "{{ tripleo_container_cli }} unpause {{ item }}" with_items: "{{ container_services.stdout_lines }}" when: tripleo_container_cli is defined tags: - bar_create_recover_image
在 undercloud 节点上,输入以下
ansible-playbook
命令来创建 control plane 节点的备份:重要不要操作堆栈。当您停止 pacemaker 集群和容器时,这会导致 control plane 服务临时中断到 Compute 节点。网络连接、Ceph 和 NFS 或 SFTP 数据平面服务也会中断。您无法创建实例、迁移实例、验证请求或监控集群的健康状况,直到 pacemaker 集群和容器按照此流程的最后步骤返回服务。
(undercloud) [stack@undercloud ~]$ ansible-playbook \ -v -i ~/tripleo-inventory.yaml \ --extra="ansible_ssh_common_args='-o StrictHostKeyChecking=no'" \ --become \ --become-user root \ --tags bar_create_recover_image \ ~/bar_rear_create_restore_images-controller.yaml
3.6. 使用 cron 调度 control plane 节点备份
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
您可以使用 Ansible backup-and-restore
角色,配置 cron 作业,以使用 ReaR 创建 control plane 节点的备份。您可以在 /var/log/rear-cron
目录中查看日志。
先决条件
- 您已在备份节点上安装和配置了 NFS 或 SFTP 服务器。有关创建新 NFS 服务器的详情请参考 第 1.2 节 “在备份节点上安装并配置 NFS 服务器”。
- 您已在 undercloud 和 control plane 节点上安装了 ReaR。更多信息请参阅 第 2.3 节 “在 control plane 节点上安装 ReaR”。
- 在备份位置有足够的可用磁盘空间来存储备份。
流程
在 undercloud 节点上,输入以下命令来创建备份脚本:
[stack@undercloud ~]$ cat <<'EOF' > /home/stack/execute-rear-cron.sh #!/bin/bash OWNER="stack" TODAY=`date +%Y%m%d` FILE="/var/log/rear-cron.${TODAY}" sudo touch ${FILE} sudo chown ${OWNER}:${OWNER} ${FILE} CURRENTTIME=`date` echo "[$CURRENTTIME] rear start" >> ${FILE} source /home/stack/stackrc && /usr/bin/openstack overcloud backup 2>&1 >> ${FILE} CURRENTTIME=`date` echo "[$CURRENTTIME] rear end" >> ${FILE} EOF
为
/home/stack/execute-rear-cron.sh
脚本设置可执行权限:[stack@undercloud ~]$ chmod 755 /home/stack/execute-rear-cron.sh
使用
crontab -e
命令编辑 crontab 文件,并使用您选择的编辑器添加以下 cron 任务。确保将更改保存到该文件:[stack@undercloud ~]# $ crontab -e #adding the following line 0 0 * * * /home/stack/execute-rear-cron.sh
/home/stack/execute-rear-cron.sh
脚本由 stack 用户在夜夜执行。要验证是否调度 cron 任务,请输入以下命令:
[stack@undercloud ~]$ crontab -l
命令输出显示调度的 cron 作业:
0 0 * * * /home/stack/execute-rear-cron.sh
3.7. 其他资源
第 4 章 恢复 undercloud 和 control plane 节点
如果 undercloud 或 control plane 节点损坏,或者在更新或升级过程中出现错误,您可以将 undercloud 或 overcloud control plane 节点从备份恢复到之前的状态。如果恢复过程无法自动恢复具有并置 Ceph 监视器的 Galera 集群或节点,您可以手动恢复这些组件。
4.1. 为恢复过程准备带有 colocated Ceph 监视器的 control plane
在使用 colocated Ceph 监视器恢复 control plane 之前,先创建一个脚本,它将 Ceph 监控备份文件挂载到节点文件系统,以及 ReaR 用来定位备份文件的另一个脚本。
如果您无法备份 /var/lib/ceph
目录,您必须联系红帽技术支持团队来重建 ceph-mon
索引。如需更多信息,请联系红帽技术支持团队。
先决条件
- 您已创建了 undercloud 节点的备份。更多信息请参阅 第 1.5 节 “创建 undercloud 节点的备份”。
- 您已创建了 control plane 节点的备份。更多信息请参阅 第 2.5 节 “创建 control plane 节点的备份”。
- 您可以访问备份节点。
-
如果您的网络接口使用 OVS 网桥,您可以访问您在
NETWORKING_PREPARATION_COMMANDS
参数中设置的网络配置信息。如需更多信息,请参阅 第 1.4 节 “为备份配置 Open vSwitch (OVS)接口”。
流程
在您要恢复的每个节点中,创建脚本
/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
> 和 <device_disk
> 替换为备份文件的类型和位置。通常,文件类型是xfs
,位置为/dev/vda2
。在同一节点上,创建脚本
/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
4.2. 恢复 undercloud 节点
您可以使用 ReaR 创建的备份 ISO 镜像将 undercloud 节点恢复到之前的状态。您可以在备份节点上找到备份 ISO 镜像。将可引导 ISO 镜像刻录到 DVD,或通过 Integrated Lights-Out (iLO)远程访问将其下载到 undercloud 节点。
先决条件
- 您已创建了 undercloud 节点的备份。更多信息请参阅 第 2.5 节 “创建 control plane 节点的备份”。
- 您可以访问备份节点。
-
如果您的网络接口使用 OVS 网桥,您可以访问您在
NETWORKING_PREPARATION_COMMANDS
参数中设置的网络配置信息。如需更多信息,请参阅 第 1.4 节 “为备份配置 Open vSwitch (OVS)接口”。
流程
- 关闭 undercloud 节点。在继续操作前,请确保完全关闭 undercloud 节点。
- 使用备份 ISO 镜像引导 undercloud 节点。
当
Relax-and-Recover
引导菜单显示时,选择Recover <undercloud_node>
。将<undercloud_node
> 替换为 undercloud 节点的名称。注意如果您的系统使用 UEFI,请选择
Relax-and-Recover (no Secure Boot)
选项。以
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
关闭节点:
RESCUE <undercloud_node>:~ # poweroff
在引导时,节点会恢复之前的状态。
4.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 文档。
前提条件
选择以下选项之一:
- 您已创建了没有可组合角色的 control plane 节点的备份。更多信息请参阅 第 2.5 节 “创建 control plane 节点的备份”。
- 您已创建了使用可组合角色的 control plane 节点的备份。更多信息请参阅 第 3.5 节 “创建使用可组合角色的 control plane 节点的备份”。
- 您可以访问备份节点。
-
如果您的网络接口使用 OVS 网桥,您可以访问您在
NETWORKING_PREPARATION_COMMANDS
参数中设置的网络配置信息。如需更多信息,请参阅 第 2.4 节 “为备份配置 Open vSwitch (OVS)接口”。
流程
- 关闭每个 control plane 节点。在继续操作前,请确保完全关闭 control plane 节点。
- 使用对应的备份 ISO 镜像引导每个 control plane 节点。
当
Relax-and-Recover
引导菜单显示时,在每个 control plane 节点上选择Recover <control_plane_node>
。将<control_plane_node
> 替换为对应的 control plane 节点的名称。注意如果您的系统使用 UEFI,请选择
Relax-and-Recover (no Secure Boot)
选项。在每个 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
当命令行控制台可用时,恢复每个 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>
注意如果您使用可组合角色部署 control plane,则仅在 Controller 节点上执行此步骤。
关闭节点:
RESCUE <control_plane_node>:~ # poweroff
- 将引导序列设置为正常的引导设备。在引导时,节点会恢复之前的状态。
为确保服务正确运行,请检查 pacemaker 的状态。以
root
用户身份登录 Controller 节点,然后输入以下命令:# pcs status
- 要查看 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
4.4. 手动恢复 Galera 集群
如果 Galera 集群没有作为恢复过程的一部分恢复,您必须手动恢复 Galera。
在此过程中,您必须在一个 Controller 节点上执行一些步骤。请确定您在与这个过程相同的 Controller 节点上执行这些步骤。
流程
在
Controller-0
上,检索 Galera 集群虚拟 IP:$ sudo hiera -c /etc/puppet/hiera.yaml mysql_vip
通过所有 Controller 节点上的虚拟 IP 禁用数据库连接:
$ sudo iptables -I INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROP
在
Controller-0
上,检索 MySQL root 密码:$ sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password
在
Controller-0
上,将 Galera 资源设置为非受管
模式:$ sudo pcs resource unmanage galera-bundle
停止所有 Controller 节点上的 MySQL 容器:
$ sudo podman container stop $(sudo podman container ls --all --format "{{.Names}}" --filter=name=galera-bundle)
在所有 Controller 节点上移动当前目录:
$ sudo mv /var/lib/mysql /var/lib/mysql-save
在所有 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
启动所有 Controller 节点上的 MySQL 容器:
$ sudo podman container start $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
在所有 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"
在所有 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" &
在所有 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"
重置所有 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;'"
在所有 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"
在
Controller-0
上,将备份数据库文件复制到/var/lib/MySQL
:$ sudo cp $BACKUP_FILE /var/lib/mysql $ sudo cp $BACKUP_GRANT_FILE /var/lib/mysql
注意这些文件的路径为 /home/heat-admin/。
在
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\" "
关闭所有 Controller 节点上的数据库:
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysqladmin shutdown"
在
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:// &
验证 :在 Controller-0 上,检查集群的状态:
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"
确保显示以下信息:"Galera cluster node is synchronized",否则您必须重新创建该节点。
在
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}'
在每个剩余的 Controller 节点上,启动数据库并验证集群:
启动数据库:
$ 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 &
检查 MYSQL 集群的状态:
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"
确保显示以下信息:"Galera cluster node is synchronized",否则您必须重新创建该节点。
停止所有 Controller 节点上的 MySQL 容器:
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \ /usr/bin/mysqladmin -u root shutdown
在所有 Controller 节点上,删除以下防火墙规则,以允许通过虚拟 IP 地址进行数据库连接:
$ sudo iptables -D INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROP
在所有 Controller 节点上重启 MySQL 容器:
$ sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
重启所有 Controller 节点上的
clustercheck
容器:$ sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=clustercheck)
在
Controller-0
上,将 Galera 资源设置为受管
模式:$ sudo pcs resource manage galera-bundle
验证
要确保服务正确运行,请检查 pacemaker 的状态:
$ sudo pcs status
- 要查看 overcloud 的状态,请使用 OpenStack Integration Test Suite (tempest)。如需更多信息,请参阅使用 Integration Test Suite (tempest)验证 OpenStack 云。
如果发现特定节点出现问题,请使用
clustercheck
检查集群的状态:$ sudo podman exec clustercheck /usr/bin/clustercheck
4.5. 手动恢复 undercloud 节点数据库
如果 undercloud 数据库没有作为 undercloud 恢复过程的一部分恢复,您可以手动恢复数据库。您只能在之前创建的独立数据库备份时恢复数据库。
先决条件
- 您已创建了 undercloud 数据库的备份。有关备份 undercloud 数据库的更多信息,请参阅 第 1.5 节 “创建 undercloud 节点的备份”。
流程
-
以
root
用户身份登录 director undercloud 节点。 停止所有 tripleo 服务:
[root@director ~]# systemctl stop tripleo_*
输入以下命令确保没有容器在服务器上运行:
[root@director ~]# podman ps
如果有任何容器正在运行,请输入以下命令停止容器:
[root@director ~]# podman stop <container_name>
创建当前
/var/lib/mysql
目录的备份,然后删除该目录:[root@director ~]# cp -a /var/lib/mysql /var/lib/mysql_bck [root@director ~]# rm -rf /var/lib/mysql
重新创建数据库目录并为新目录设置 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
为
mariadb
镜像创建本地标签。将<image_id
> 和 <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
使用容器初始化
/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
复制您要导入到数据库的数据库备份文件:
[root@director ~]# cp /root/undercloud-all-databases.sql /var/lib/mysql
启动数据库服务以导入数据:
[root@director ~]# podman run --net=host -dt -v /var/lib/mysql:/var/lib/mysql localhost/mariadb /usr/libexec/mysqld
导入数据并配置
max_allowed_packet
参数:登录到容器并配置它:
[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
停止容器:
[root@director ~]# podman stop <container_id>
检查没有容器正在运行:
[root@director ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@director ~]#
重启所有 tripleo 服务:
[root@director ~]# systemctl start multi-user.target