1.5. 停止 OpenStack 服务


在开始采用前,您必须停止 OpenStack 服务。

这是一个重要的步骤,可以避免为数据平面采用流程迁移的数据不一致,因为 DB 复制到新部署后资源变化。

有些服务很容易停止,因为它们只执行简短的异步操作,但其他服务会比较复杂,因为它们执行同步或长时间运行的操作,而不是中止它们。

由于正常停止所有服务不是本指南范围之外的内容,因此以下步骤使用 force 方法,并提供有关如何检查服务某些内容的建议。

请注意,您不应该停止基础架构管理服务,如数据库、RabbitMQ 和 HAProxy Load Balancer,也不应停止 Nova 计算服务和容器化模块化 libvirt 守护进程。

1.5.1. 变量

定义以下步骤中使用的 shell 变量。这些值是图示的,并引用单个节点独立 director 部署。使用适合您环境的值:

CONTROLLER1_SSH="ssh -i ~/install_yamls/out/edpm/ansibleee-ssh-key-id_rsa root@192.168.122.100"
CONTROLLER2_SSH=""
CONTROLLER3_SSH=""
Copy to Clipboard Toggle word wrap

本示例将 ssh 变量与 ssh 命令而不是 ansible 一起使用,以创建独立于其运行位置的指令。但是,如果您位于正确的主机中,您可以使用 ansible 命令实现相同的结果。例如,要停止服务:

. stackrc ansible -i $(which tripleo-ansible-inventory) Controller -m shell -a "sudo systemctl stop tripleo_horizon.service" -b
Copy to Clipboard Toggle word wrap

1.5.2. pre-checks

您随时可以停止 OpenStack 服务,但可能会使您的环境处于不必要的状态。但是,您应该确认没有需要其他服务的长时间运行的操作。

确保没有持续的实例实时迁移、卷迁移(在线或离线)、卷创建、备份恢复、附加、分离等。

openstack server list --all-projects -c ID -c Status |grep -E '\| .+ing \|'
openstack volume list --all-projects -c ID -c Status |grep -E '\| .+ing \|'| grep -vi error
openstack volume backup list --all-projects -c ID -c Status |grep -E '\| .+ing \|' | grep -vi error
openstack share list --all-projects -c ID -c Status |grep -E '\| .+ing \|'| grep -vi error
openstack image list -c ID -c Status |grep -E '\| .+ing \|'
Copy to Clipboard Toggle word wrap

另外,在停止收集它所需的服务前,收集特定于服务拓扑的配置。稍后,您将需要它与 post-adoption 值进行比较。

1.5.3. 停止 control plane 服务

您随时可以停止 OpenStack 服务,但可能会使您的环境处于不必要的状态。您应该确认没有持续的操作。

1- 连接到所有控制器节点。2 停止 control plane 服务。3- 验证 control plane 服务是否已停止。

OSP 17.1 上的 cinder-backup 服务可以作为 pacemaker 或 Active-Active 下的 Active-Passive 运行,因此您必须检查它如何运行并停止它。

可以使用依赖于之前定义的环境变量和功能的简单脚本自动执行这些步骤:

# Update the services list to be stopped
ServicesToStop=("tripleo_horizon.service"
                "tripleo_keystone.service"
                "tripleo_cinder_api.service"
                "tripleo_cinder_api_cron.service"
                "tripleo_cinder_scheduler.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_nova_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_northd.service")

PacemakerResourcesToStop=("openstack-cinder-volume"
                          "openstack-cinder-backup"
                          "openstack-manila-share")

echo "Stopping systemd OpenStack services"
for service in ${ServicesToStop[*]}; do
    for i in {1..3}; do
        SSH_CMD=CONTROLLER${i}_SSH
        if [ ! -z "${!SSH_CMD}" ]; then
            echo "Stopping the $service in controller $i"
            if ${!SSH_CMD} sudo systemctl is-active $service; then
                ${!SSH_CMD} sudo systemctl stop $service
            fi
        fi
    done
done

echo "Checking systemd OpenStack services"
for service in ${ServicesToStop[*]}; do
    for i in {1..3}; do
        SSH_CMD=CONTROLLER${i}_SSH
        if [ ! -z "${!SSH_CMD}" ]; then
            echo "Checking status of $service in controller $i"
            if ! ${!SSH_CMD} systemctl show $service | grep ActiveState=inactive >/dev/null; then
                echo "ERROR: Service $service still running on controller $i"
            fi
        fi
    done
done

echo "Stopping 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; then
                ${!SSH_CMD} sudo pcs resource disable $resource
            fi
        done
        break
    fi
done
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat