备份和恢复 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 凭证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source stackrc
[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$
在 undercloud 节点上,为备份节点创建一个清单文件,并将 <
ip_address
> 和 <user
> 替换为应用到您的环境的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat <<'EOF'> ~/nfs-inventory.yaml [BackupNode] <backup_node> ansible_host=<ip_address> ansible_user=<user> EOF
(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
> 替换为备份节点的主机名:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点复制到备份节点。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
(undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
将
<backup_node>
替换为备份节点的路径和名称。在 undercloud 节点上,输入以下
ansible-playbook
命令来配置备份节点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点的主机和变量:Copy to Clipboard Copied! Toggle word wrap Toggle overflow source stackrc
[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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点上执行以下步骤:
安装以下工具:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo dnf install dosfstools efibootmgr
$ 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
参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')
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 密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PASSWORD=$(sudo /bin/hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
[stack@undercloud ~]$ PASSWORD=$(sudo /bin/hiera -c /etc/puppet/hiera.yaml mysql::server::root_password)
创建 undercloud 节点的数据库备份:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec mysql bash -c "mysqldump -uroot -p$PASSWORD --opt --all-databases" | sudo tee /root/undercloud-all-databases.sql
[stack@undercloud ~]$ sudo podman exec mysql bash -c "mysqldump -uroot -p$PASSWORD --opt --all-databases" | sudo tee /root/undercloud-all-databases.sql
查找 undercloud 凭证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source stackrc
[stack@undercloud ~]$ source stackrc
在 undercloud 节点上,创建以下 Ansible playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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) [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
命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 凭证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source stackrc
[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$
在 undercloud 节点上,为备份节点创建一个清单文件,并将 <
ip_address
> 和 <user
> 替换为应用到您的环境的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat <<'EOF'> ~/nfs-inventory.yaml [BackupNode] <backup_node> ansible_host=<ip_address> ansible_user=<user> EOF
(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
> 替换为备份节点的主机名:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点复制到备份节点。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
(undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
将
<backup_node>
替换为备份节点的路径和名称。在 undercloud 节点上,输入以下
ansible-playbook
命令来配置备份节点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点上执行以下步骤:
安装以下工具:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo dnf install dosfstools efibootmgr
$ 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
参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')
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
分区:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dd if=<config_drive_partition> of=/mnt/config-drive
[root@controller-x ~]$ dd if=<config_drive_partition> of=/mnt/config-drive
在 undercloud 节点上,创建以下 Ansible playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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) [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 节点的备份:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点上,输入以下命令来创建备份脚本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
[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
脚本设置可执行权限:Copy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 755 /home/stack/execute-rear-cron.sh
[stack@undercloud ~]$ chmod 755 /home/stack/execute-rear-cron.sh
使用
crontab -e
命令编辑 crontab 文件,并使用您选择的编辑器添加以下 cron 任务。确保将更改保存到该文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow $ crontab -e
[stack@undercloud ~]# $ crontab -e #adding the following line 0 0 * * * /home/stack/execute-rear-cron.sh
/home/stack/execute-rear-cron.sh
脚本由 stack 用户在夜夜执行。要验证是否调度 cron 任务,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow crontab -l
[stack@undercloud ~]$ crontab -l
命令输出显示调度的 cron 作业:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 0 0 * * * /home/stack/execute-rear-cron.sh
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 凭证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source stackrc
[stack@undercloud ~]$ source stackrc (undercloud) [stack@undercloud ~]$
在 undercloud 节点上,为备份节点创建一个清单文件,并将 <
ip_address
> 和 <user
> 替换为应用到您的环境的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat <<'EOF'> ~/nfs-inventory.yaml [BackupNode] <backup_node> ansible_host=<ip_address> ansible_user=<user> EOF
(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
> 替换为备份节点的主机名:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点复制到备份节点。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
(undercloud) [stack@undercloud ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub <backup_node>
将
<backup_node>
替换为备份节点的路径和名称。在 undercloud 节点上,输入以下
ansible-playbook
命令来配置备份节点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点上执行以下步骤:
安装以下工具:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo dnf install dosfstools efibootmgr
$ 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
参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow NETWORKING_PREPARATION_COMMANDS=('<command_1>' '<command_2>' ...')
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
分区:Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir /mnt/config-drive dd if=<config_drive_partition> of=/mnt/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:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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) [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 集群和容器按照此流程的最后步骤返回服务。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
(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 节点上,输入以下命令来创建备份脚本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
[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
脚本设置可执行权限:Copy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 755 /home/stack/execute-rear-cron.sh
[stack@undercloud ~]$ chmod 755 /home/stack/execute-rear-cron.sh
使用
crontab -e
命令编辑 crontab 文件,并使用您选择的编辑器添加以下 cron 任务。确保将更改保存到该文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow $ crontab -e
[stack@undercloud ~]# $ crontab -e #adding the following line 0 0 * * * /home/stack/execute-rear-cron.sh
/home/stack/execute-rear-cron.sh
脚本由 stack 用户在夜夜执行。要验证是否调度 cron 任务,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow crontab -l
[stack@undercloud ~]$ crontab -l
命令输出显示调度的 cron 作业:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 0 0 * * * /home/stack/execute-rear-cron.sh
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
并添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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>
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
并添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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
用户身份登录并恢复节点:以下信息会显示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Welcome to Relax-and-Recover. Run "rear recover" to restore your system! RESCUE <undercloud_node>:~ # rear recover
Welcome to Relax-and-Recover. Run "rear recover" to restore your system! RESCUE <undercloud_node>:~ # rear recover
undercloud 节点恢复过程完成后,控制台会显示以下信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Finished recovering your system Exiting rear recover Running exit tasks
Finished recovering your system Exiting rear recover Running exit tasks
关闭节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RESCUE <undercloud_node>:~ # poweroff
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
用户身份登录并恢复节点:以下信息会显示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Welcome to Relax-and-Recover. Run "rear recover" to restore your system! RESCUE <control_plane_node>:~ # rear recover
Welcome to Relax-and-Recover. Run "rear recover" to restore your system! RESCUE <control_plane_node>:~ # rear recover
当 control plane 节点恢复过程完成后,控制台会显示以下信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Finished recovering your system Exiting rear recover Running exit tasks
Finished recovering your system Exiting rear recover Running exit tasks
当命令行控制台可用时,恢复每个 control plane 节点的
config-drive
分区:Copy to Clipboard Copied! Toggle word wrap Toggle overflow once completed, restore the config-drive partition (which is ISO9660)
# 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 节点上执行此步骤。
关闭节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RESCUE <control_plane_node>:~ # poweroff
RESCUE <control_plane_node>:~ # poweroff
- 将引导序列设置为正常的引导设备。在引导时,节点会恢复之前的状态。
为确保服务正确运行,请检查 pacemaker 的状态。以
root
用户身份登录 Controller 节点,然后输入以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow pcs status
# pcs status
- 要查看 overcloud 的状态,请使用 OpenStack Integration Test Suite (tempest)。如需更多信息,请参阅使用 Integration Test Suite (tempest)验证 OpenStack 云。
故障排除
-
运行以下命令,清除
pcs status
显示的资源警告:
pcs resource clean
# pcs resource clean
-
运行以下命令,清除
pcs status
显示的 STONITH 隔离操作错误:
pcs resource clean pcs stonith history cleanup
# pcs resource clean
# pcs stonith history cleanup
4.4. 手动恢复 Galera 集群
如果 Galera 集群没有作为恢复过程的一部分恢复,您必须手动恢复 Galera。
在此过程中,您必须在一个 Controller 节点上执行一些步骤。请确定您在与这个过程相同的 Controller 节点上执行这些步骤。
流程
在
Controller-0
上,检索 Galera 集群虚拟 IP:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo hiera -c /etc/puppet/hiera.yaml mysql_vip
$ sudo hiera -c /etc/puppet/hiera.yaml mysql_vip
通过所有 Controller 节点上的虚拟 IP 禁用数据库连接:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo iptables -I INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROP
$ sudo iptables -I INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROP
在
Controller-0
上,检索 MySQL root 密码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password
$ sudo hiera -c /etc/puppet/hiera.yaml mysql::server::root_password
在
Controller-0
上,将 Galera 资源设置为非受管
模式:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo pcs resource unmanage galera-bundle
$ sudo pcs resource unmanage galera-bundle
停止所有 Controller 节点上的 MySQL 容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman container stop $(sudo podman container ls --all --format "{{.Names}}" --filter=name=galera-bundle)
$ sudo podman container stop $(sudo podman container ls --all --format "{{.Names}}" --filter=name=galera-bundle)
在所有 Controller 节点上移动当前目录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo mv /var/lib/mysql /var/lib/mysql-save
$ sudo mv /var/lib/mysql /var/lib/mysql-save
在所有 Controller 节点上创建新目录
/var/lib/mysq
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman container start $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
$ sudo podman container start $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
在所有 Controller 节点上创建 MySQL 数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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"
$ 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 节点上启动数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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" &
$ 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 配置文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mv /root/.my.cnf /root/.my.cnf.bck"
$ 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 密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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;'"
$ 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 配置文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mv /root/.my.cnf.bck /root/.my.cnf"
$ 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
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo cp $BACKUP_FILE /var/lib/mysql sudo cp $BACKUP_GRANT_FILE /var/lib/mysql
$ sudo cp $BACKUP_FILE /var/lib/mysql $ sudo cp $BACKUP_GRANT_FILE /var/lib/mysql
注意这些文件的路径为 /home/heat-admin/。
在
Controller-0
上,恢复 MySQL 数据库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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\" "
$ 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 节点上的数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysqladmin shutdown"
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "mysqladmin shutdown"
在
Controller-0
上,启动 bootstrap 节点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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:// &
$ 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 上,检查集群的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"
确保显示以下信息:"Galera cluster node is synchronized",否则您必须重新创建该节点。
在
Controller-0
上,从配置中检索集群地址:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}'
$ 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 节点上,启动数据库并验证集群:
启动数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 &
$ 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 集群的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" \ --filter=name=galera-bundle) bash -c "clustercheck"
确保显示以下信息:"Galera cluster node is synchronized",否则您必须重新创建该节点。
停止所有 Controller 节点上的 MySQL 容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \ /usr/bin/mysqladmin -u root shutdown
$ sudo podman exec $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle) \ /usr/bin/mysqladmin -u root shutdown
在所有 Controller 节点上,删除以下防火墙规则,以允许通过虚拟 IP 地址进行数据库连接:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo iptables -D INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROP
$ sudo iptables -D INPUT -p tcp --destination-port 3306 -d $MYSQL_VIP -j DROP
在所有 Controller 节点上重启 MySQL 容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
$ sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=galera-bundle)
重启所有 Controller 节点上的
clustercheck
容器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=clustercheck)
$ sudo podman container restart $(sudo podman container ls --all --format "{{ .Names }}" --filter=name=clustercheck)
在
Controller-0
上,将 Galera 资源设置为受管
模式:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo pcs resource manage galera-bundle
$ sudo pcs resource manage galera-bundle
验证
要确保服务正确运行,请检查 pacemaker 的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo pcs status
$ sudo pcs status
- 要查看 overcloud 的状态,请使用 OpenStack Integration Test Suite (tempest)。如需更多信息,请参阅使用 Integration Test Suite (tempest)验证 OpenStack 云。
如果发现特定节点出现问题,请使用
clustercheck
检查集群的状态:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo podman exec clustercheck /usr/bin/clustercheck
$ sudo podman exec clustercheck /usr/bin/clustercheck
4.5. 手动恢复 undercloud 节点数据库
如果 undercloud 数据库没有作为 undercloud 恢复过程的一部分恢复,您可以手动恢复数据库。您只能在之前创建的独立数据库备份时恢复数据库。
先决条件
- 您已创建了 undercloud 数据库的备份。有关备份 undercloud 数据库的更多信息,请参阅 第 1.5 节 “创建 undercloud 节点的备份”。
流程
-
以
root
用户身份登录 director undercloud 节点。 停止所有 tripleo 服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl stop tripleo_*
[root@director ~]# systemctl stop tripleo_*
输入以下命令确保没有容器在服务器上运行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman ps
[root@director ~]# podman ps
如果有任何容器正在运行,请输入以下命令停止容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman stop <container_name>
[root@director ~]# podman stop <container_name>
创建当前
/var/lib/mysql
目录的备份,然后删除该目录:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp -a /var/lib/mysql /var/lib/mysql_bck rm -rf /var/lib/mysql
[root@director ~]# cp -a /var/lib/mysql /var/lib/mysql_bck [root@director ~]# rm -rf /var/lib/mysql
重新创建数据库目录并为新目录设置 SELinux 属性:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir /var/lib/mysql chown 42434:42434 /var/lib/mysql chmod 0755 /var/lib/mysql chcon -t container_file_t /var/lib/mysql chcon -r object_r /var/lib/mysql chcon -u system_u /var/lib/mysql
[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
> 替换为环境中适用的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman images | grep mariadb
[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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman tag <image_id> mariadb
[root@director ~]# podman tag <image_id> mariadb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman images | grep maria
[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
目录:Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman run --net=host -v /var/lib/mysql:/var/lib/mysql localhost/mariadb mysql_install_db --datadir=/var/lib/mysql --user=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
复制您要导入到数据库的数据库备份文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp /root/undercloud-all-databases.sql /var/lib/mysql
[root@director ~]# cp /root/undercloud-all-databases.sql /var/lib/mysql
启动数据库服务以导入数据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman run --net=host -dt -v /var/lib/mysql:/var/lib/mysql localhost/mariadb /usr/libexec/mysqld
[root@director ~]# podman run --net=host -dt -v /var/lib/mysql:/var/lib/mysql localhost/mariadb /usr/libexec/mysqld
导入数据并配置
max_allowed_packet
参数:登录到容器并配置它:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman exec -it <container_id> /bin/bash
[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
停止容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman stop <container_id>
[root@director ~]# podman stop <container_id>
检查没有容器正在运行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman ps
[root@director ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@director ~]#
重启所有 tripleo 服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl start multi-user.target
[root@director ~]# systemctl start multi-user.target