4.16. 回滚 control plane 采用


如果您遇到问题,且无法完成 Red Hat OpenStack Platform (RHOSP) control plane 服务的使用,您可以回滚 control plane。

重要

如果您以任何方式更改 data plane 节点,则不要尝试回滚。只有在更改 control plane 时,您只能回滚 control plane 的采用。

在 control plane 采用过程中,RHOSP control plane 上的服务会停止但不被删除。在采用过程中,RHOSP control plane 上的数据库不会被编辑。control plane 上的 Red Hat OpenStack Services (RHOSO) control plane 接收原始 control plane 数据库的副本。回滚过程假定 data plane 尚未由采用过程修改,它仍然连接到 RHOSP control plane。

回滚过程由以下步骤组成:

  • 恢复 RHOSP control plane 的功能。
  • 删除部分或完全部署的 RHOSO control plane。

流程

  1. 要将源云恢复到工作状态,请启动之前在采用过程中停止的 RHOSP control plane 服务:

    ServicesToStart=("tripleo_horizon.service"
                     "tripleo_keystone.service"
                     "tripleo_barbican_api.service"
                     "tripleo_barbican_worker.service"
                     "tripleo_barbican_keystone_listener.service"
                     "tripleo_cinder_api.service"
                     "tripleo_cinder_api_cron.service"
                     "tripleo_cinder_scheduler.service"
                     "tripleo_cinder_volume.service"
                     "tripleo_cinder_backup.service"
                     "tripleo_glance_api.service"
                     "tripleo_manila_api.service"
                     "tripleo_manila_api_cron.service"
                     "tripleo_manila_scheduler.service"
                     "tripleo_neutron_api.service"
                     "tripleo_placement_api.service"
                     "tripleo_nova_api_cron.service"
                     "tripleo_nova_api.service"
                     "tripleo_nova_conductor.service"
                     "tripleo_nova_metadata.service"
                     "tripleo_nova_scheduler.service"
                     "tripleo_nova_vnc_proxy.service"
                     "tripleo_aodh_api.service"
                     "tripleo_aodh_api_cron.service"
                     "tripleo_aodh_evaluator.service"
                     "tripleo_aodh_listener.service"
                     "tripleo_aodh_notifier.service"
                     "tripleo_ceilometer_agent_central.service"
                     "tripleo_ceilometer_agent_compute.service"
                     "tripleo_ceilometer_agent_ipmi.service"
                     "tripleo_ceilometer_agent_notification.service"
                     "tripleo_ovn_cluster_north_db_server.service"
                     "tripleo_ovn_cluster_south_db_server.service"
                     "tripleo_ovn_cluster_northd.service"
                     "tripleo_octavia_api.service"
                     "tripleo_octavia_health_manager.service"
                     "tripleo_octavia_rsyslog.service"
                     "tripleo_octavia_driver_agent.service"
                     "tripleo_octavia_housekeeping.service"
                     "tripleo_octavia_worker.service")
    
    PacemakerResourcesToStart=("galera-bundle"
                               "haproxy-bundle"
                               "rabbitmq-bundle"
                               "openstack-cinder-volume"
                               "openstack-cinder-backup"
                               "openstack-manila-share")
    
    echo "Starting systemd OpenStack services"
    for service in ${ServicesToStart[*]}; do
        for i in {1..3}; do
            SSH_CMD=CONTROLLER${i}_SSH
            if [ ! -z "${!SSH_CMD}" ]; then
                if ${!SSH_CMD} sudo systemctl is-enabled $service &> /dev/null; then
                    echo "Starting the $service in controller $i"
                    ${!SSH_CMD} sudo systemctl start $service
                fi
            fi
        done
    done
    
    echo "Checking systemd OpenStack services"
    for service in ${ServicesToStart[*]}; do
        for i in {1..3}; do
            SSH_CMD=CONTROLLER${i}_SSH
            if [ ! -z "${!SSH_CMD}" ]; then
                if ${!SSH_CMD} sudo systemctl is-enabled $service &> /dev/null; then
                    if ! ${!SSH_CMD} systemctl show $service | grep ActiveState=active >/dev/null; then
                        echo "ERROR: Service $service is not running on controller $i"
                    else
                        echo "OK: Service $service is running in controller $i"
                    fi
                fi
            fi
        done
    done
    
    echo "Starting pacemaker OpenStack services"
    for i in {1..3}; do
        SSH_CMD=CONTROLLER${i}_SSH
        if [ ! -z "${!SSH_CMD}" ]; then
            echo "Using controller $i to run pacemaker commands"
            for resource in ${PacemakerResourcesToStart[*]}; do
                if ${!SSH_CMD} sudo pcs resource config $resource &>/dev/null; then
                    echo "Starting $resource"
                    ${!SSH_CMD} sudo pcs resource enable $resource
                else
                    echo "Service $resource not present"
                fi
            done
            break
        fi
    done
    
    echo "Checking pacemaker OpenStack services"
    for i in {1..3}; do
        SSH_CMD=CONTROLLER${i}_SSH
        if [ ! -z "${!SSH_CMD}" ]; then
            echo "Using controller $i to run pacemaker commands"
            for resource in ${PacemakerResourcesToStop[*]}; do
                if ${!SSH_CMD} sudo pcs resource config $resource &>/dev/null; then
                    if ${!SSH_CMD} sudo pcs resource status $resource | grep Started >/dev/null; then
                        echo "OK: Service $resource is started"
                    else
                        echo "ERROR: Service $resource is stopped"
                    fi
                fi
            done
            break
        fi
    done
    Copy to Clipboard Toggle word wrap
  2. 如果 Ceph NFS 服务在作为共享文件系统服务(manila)后端部署上运行,您必须为 openstack-manila-share 服务恢复 Pacemaker 顺序和 colocation 约束:

    $ sudo pcs constraint order start ceph-nfs then openstack-manila-share kind=Optional id=order-ceph-nfs-openstack-manila-share-Optional
    $ sudo pcs constraint colocation add openstack-manila-share with ceph-nfs score=INFINITY id=colocation-openstack-manila-share-ceph-nfs-INFINITY
    Copy to Clipboard Toggle word wrap
  3. 验证源云是否可再次运行,例如,您可以运行 openstack CLI 命令,如 openstack server list,或检查您可以访问 Dashboard 服务(horizon)。
  4. 删除部分或完全部署的 control plane,以便以后可以再次尝试采用:

    $ oc delete --ignore-not-found=true --wait=false openstackcontrolplane/openstack
    $ oc patch openstackcontrolplane openstack --type=merge --patch '
    metadata:
      finalizers: []
    ' || true
    
    while oc get pod | grep rabbitmq-server-0; do
        sleep 2
    done
    while oc get pod | grep openstack-galera-0; do
        sleep 2
    done
    
    $ oc delete --ignore-not-found=true --wait=false pod mariadb-copy-data
    $ oc delete --ignore-not-found=true --wait=false pvc mariadb-data
    $ oc delete --ignore-not-found=true --wait=false pod ovn-copy-data
    $ oc delete --ignore-not-found=true secret osp-secret
    Copy to Clipboard Toggle word wrap

后续步骤

恢复 RHOSP control plane 服务后,其内部状态可能会改变。在重试采用过程前,请验证所有 control plane 资源是否已移除,并且没有影响以下采用过程尝试的保留。您不能在另一个采用尝试中使用之前创建的数据库内容副本。您必须生成原始源数据库内容最新状态的新副本。有关生成数据库新副本的更多信息,请参阅将 数据库迁移到 control plane

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat