附录 B. 恢复 overcloud


B.1. 恢复 overcloud control plane 服务

以下流程恢复 overcloud 数据库和配置的备份。在这种情况下,建议在所有三个 Controller 节点上同时打开三个终端窗口。另外,建议您选择 Controller 节点来执行高可用性操作。此流程将这个 Controller 节点称为 bootstrap Controller 节点

重要

此流程只恢复 control plane 服务。它不包括在 Ceph Storage 节点上恢复 Compute 节点工作负载或数据。

注意

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

流程

  1. 停止 Pacemaker 并删除所有容器化服务。

    1. 登录到 bootstrap Controller 节点并停止 pacemaker 集群:

      # sudo pcs cluster stop --all
      Copy to Clipboard Toggle word wrap
    2. 等待集群完全关闭:

      # sudo pcs status
      Copy to Clipboard Toggle word wrap
    3. 在所有 Controller 节点上,删除所有 OpenStack 服务的容器:

      # docker stop $(docker ps -a -q)
      # docker rm $(docker ps -a -q)
      Copy to Clipboard Toggle word wrap
  2. 如果您要从失败的主发行版本升级中恢复,您可能需要反转所有节点上的 yum 事务。这包括每个节点中的以下内容:

    1. 为之前的版本启用软件仓库。例如:

      # sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-openstack-11-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-openstack-12-rpms
      Copy to Clipboard Toggle word wrap
    2. 启用以下 Ceph 软件仓库:

      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-tools-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-2-mon-rpms
      Copy to Clipboard Toggle word wrap
    3. 检查 yum 历史记录:

      # sudo yum history list all
      Copy to Clipboard Toggle word wrap

      识别升级过程中发生的事务。这些操作在其中一个 Controller 节点上发生(在升级过程中选择为 bootstrap 节点的 Controller 节点)。如果您需要查看特定的事务,使用 history info 子命令查看它:

      # sudo yum history info 25
      Copy to Clipboard Toggle word wrap
      注意

      要强制 yum history list all 显示从每个事务运行的命令,请在 yum.conf 文件中设置 history_list_view=commands

    4. 恢复升级后发生的任何 yum 事务。例如:

      # sudo yum history undo 25
      # sudo yum history undo 24
      # sudo yum history undo 23
      ...
      Copy to Clipboard Toggle word wrap

      确保从最后一个事务开始,再按降序排列。您还可以使用回滚选项在一个执行时恢复多个事务。例如,以下命令将最后事务中的事务回滚至 23:

      # sudo yum history rollback 23
      Copy to Clipboard Toggle word wrap
      重要

      建议对每个事务使用 撤消 而不是 回滚,以便您可以验证每个事务的逆转。

    5. 相关的 yum 事务被反向后,在所有节点上仅启用原始 OpenStack Platform 存储库。例如:

      # sudo subscription-manager repos --disable=rhel-7-server-openstack-*-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-openstack-10-rpms
      Copy to Clipboard Toggle word wrap
    6. 禁用以下 Ceph 软件仓库:

      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
      # sudo subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-rpms
      Copy to Clipboard Toggle word wrap
  3. 恢复数据库:

    1. 将数据库备份复制到 bootstrap Controller 节点。
    2. 停止到所有 Controller 节点上的数据库端口的外部连接:

      # MYSQLIP=$(hiera -c /etc/puppet/hiera.yaml mysql_bind_host)
      # sudo /sbin/iptables -I INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
      Copy to Clipboard Toggle word wrap

      这会隔离到节点的所有数据库流量。

    3. 暂时禁用数据库复制。在所有 Controller 节点上编辑 /etc/my.cnf.d/galera.cnf 文件。

      # vi /etc/my.cnf.d/galera.cnf
      Copy to Clipboard Toggle word wrap

      进行以下更改:

      • 注释掉 wsrep_cluster_address 参数。
      • wsrep_provider 设置为 none
    4. 保存 /etc/my.cnf.d/galera.cnf 文件。
    5. 确保所有 Controller 节点上都禁用 MariaDB 数据库。在升级到 OpenStack Platform 13 时,MariaDB 服务移至您之前禁用的容器化服务。确保服务没有作为主机上的进程运行:

      # mysqladmin -u root shutdown
      Copy to Clipboard Toggle word wrap
      注意

      您可以从禁用数据库的 HAProxy 收到警告。

    6. 移动现有的 MariaDB 数据目录,并在所有 Controller 节点上准备新数据目录,

      # mv /var/lib/mysql/ /var/lib/mysql.old
      # mkdir /var/lib/mysql
      # chown mysql:mysql /var/lib/mysql
      # chmod 0755 /var/lib/mysql
      # mysql_install_db --datadir=/var/lib/mysql --user=mysql
      # chown -R mysql:mysql /var/lib/mysql/
      # restorecon -R /var/lib/mysql
      Copy to Clipboard Toggle word wrap
    7. 在所有 Controller 节点上手动启动数据库:

      # mysqld_safe --skip-grant-tables --skip-networking --wsrep-on=OFF &
      Copy to Clipboard Toggle word wrap
    8. 在所有 Controller 节点上获取旧的密码重置数据库密码:

      # OLDPASSWORD=$(sudo cat .my.cnf | grep -m1 password | cut -d'=' -f2 | tr -d "'")
      # mysql -uroot -e"use mysql;update user set password=PASSWORD($OLDPASSWORD)"
      Copy to Clipboard Toggle word wrap
    9. 停止所有 Controller 节点上的数据库:

      # /usr/bin/mysqladmin -u root shutdown
      Copy to Clipboard Toggle word wrap
    10. 在 bootstrap Controller 节点上手动启动数据库,无需 --skip-grant-tables 选项:

      # mysqld_safe --skip-networking --wsrep-on=OFF &
      Copy to Clipboard Toggle word wrap
    11. 在 bootstrap Controller 节点上,恢复 OpenStack 数据库。这会稍后复制到其他 Controller 节点:

      # mysql -u root < openstack_database.sql
      Copy to Clipboard Toggle word wrap
    12. 在 bootstrap 控制器节点上,恢复用户和权限:

      # mysql -u root < grants.sql
      Copy to Clipboard Toggle word wrap
    13. 使用以下命令关闭 bootstrap Controller 节点:

      # mysqladmin shutdown
      Copy to Clipboard Toggle word wrap
    14. 启用数据库复制。在所有 Controller 节点上编辑 /etc/my.cnf.d/galera.cnf 文件。

      # vi /etc/my.cnf.d/galera.cnf
      Copy to Clipboard Toggle word wrap

      进行以下更改:

      • 取消注释 wsrep_cluster_address 参数。
      • wsrep_provider 设置为 /usr/lib64/galera/libgalera_smm.so
    15. 保存 /etc/my.cnf.d/galera.cnf 文件。
    16. 在 bootstrap 节点上运行数据库:

      # /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_cluster.log --user=mysql --open-files-limit=16384 --wsrep-cluster-address=gcomm:// &
      Copy to Clipboard Toggle word wrap

      --wsrep-cluster-address 选项中没有节点会强制 Galera 创建新集群,并使 bootstrap 节点成为 master 节点。

    17. 检查节点的状态:

      # clustercheck
      Copy to Clipboard Toggle word wrap

      此命令应该报告 Galera 集群节点已同步。检查 /var/log/mysql_cluster.log 文件中的错误。

    18. 在剩余的 Controller 节点上,启动数据库:

      $ /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_cluster.log  --user=mysql --open-files-limit=16384 --wsrep-cluster-address=gcomm://overcloud-controller-0,overcloud-controller-1,overcloud-controller-2 &
      Copy to Clipboard Toggle word wrap

      --wsrep-cluster-address 选项中包含节点会将节点添加到新集群中,并从 master 同步内容。

    19. 定期检查每个节点的状态:

      # clustercheck
      Copy to Clipboard Toggle word wrap

      当所有节点都完成其同步操作时,这个命令应该 为每个节点报告 Galera 集群节点

    20. 停止所有节点上的数据库:

      $ mysqladmin shutdown
      Copy to Clipboard Toggle word wrap
    21. 从用于恢复对数据库的访问的服务从每个节点中删除防火墙规则:

      # sudo /sbin/iptables -D INPUT -d $MYSQLIP -p tcp --dport 3306 -j DROP
      Copy to Clipboard Toggle word wrap
  4. 恢复 Pacemaker 配置:

    1. 将 Pacemaker 归档复制到 bootstrap 节点。
    2. 登录到 bootstrap 节点。
    3. 运行配置恢复命令:

      # pcs config restore pacemaker_controller_backup.tar.bz2
      Copy to Clipboard Toggle word wrap
  5. 恢复文件系统:

    1. 将每个 Controller 节点的 backup tar 文件复制到一个临时目录中,并解压缩所有数据:

      # mkdir /var/tmp/filesystem_backup/
      # cd /var/tmp/filesystem_backup/
      # mv <backup_file>.tar.gz .
      # tar --xattrs --xattrs-include='*.*' -xvzf <backup_file>.tar.gz
      Copy to Clipboard Toggle word wrap
      注意

      不要直接提取到 / 目录。这会覆盖您当前的文件系统。建议将 文件提取到临时目录中。

    2. 恢复 os-*-config 文件并重启 os-collect-config

      # cp -rf /var/tmp/filesystem_backup/var/lib/os-collect-config/* /var/lib/os-collect-config/.
      # cp -rf /var/tmp/filesystem_backup/usr/libexec/os-apply-config/* /usr/libexec/os-apply-config/.
      # cp -rf /var/tmp/filesystem_backup/usr/libexec/os-refresh-config/* /usr/libexec/os-refresh-config/.
      # systemctl restart os-collect-config
      Copy to Clipboard Toggle word wrap
    3. 恢复 Puppet hieradata 文件:

      # cp -r /var/tmp/filesystem_backup/etc/puppet/hieradata /etc/puppet/hieradata
      # cp -r /var/tmp/filesystem_backup/etc/puppet/hiera.yaml /etc/puppet/hiera.yaml
      Copy to Clipboard Toggle word wrap
    4. 保存这个目录,以防需要任何配置文件。
  6. 恢复 redis 资源:

    1. 将 Redis 转储复制到每个 Controller 节点。
    2. 将 Redis 转储移动到每个 Controller 上的原始位置:

      # mv dump.rdb /var/lib/redis/dump.rdb
      Copy to Clipboard Toggle word wrap
    3. 恢复 Redis 目录的权限:

      # chown -R redis: /var/lib/redis
      Copy to Clipboard Toggle word wrap
  7. 删除以下任何目录的内容:

    # rm -rf /var/lib/config-data/puppet-generated/*
    # rm /root/.ffu_workaround
    Copy to Clipboard Toggle word wrap
  8. 恢复 OpenStack Object Storage (swift)服务的权限:

    # chown -R swift: /srv/node
    # chown -R swift: /var/lib/swift
    # chown -R swift: /var/cache/swift
    Copy to Clipboard Toggle word wrap
  9. 登录 undercloud,并从 OpenStack Platform 10 部署中运行原始 openstack overcloud deploy 命令。确保包含与原始部署相关的所有环境文件。
  10. 等待部署完成。
  11. 恢复 overcloud control plane 数据后,检查每个相关服务是否已启用并在正确运行:

    1. 对于控制器节点上的高可用性服务:

      # pcs resource enable [SERVICE]
      # pcs resource cleanup [SERVICE]
      Copy to Clipboard Toggle word wrap
    2. 对于控制器和计算节点上的系统服务:

      # systemctl start [SERVICE]
      # systemctl enable [SERVICE]
      Copy to Clipboard Toggle word wrap

下面几节提供了应启用的服务参考。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat