计算实例的高可用性


Red Hat OpenStack Platform 8

配置计算实例的高可用性

OpenStack Documentation Team

摘要

在 Red Hat OpenStack Platform 中配置计算实例的高可用性(Instance HA)的指南。本文档重点介绍通过 Ansible 启用实例 HA。

第 1 章 概述

本指南介绍了如何实施 实例高可用性(Instance HA)。实例 HA 允许 Red Hat OpenStack Platform 在主机 Compute 节点中断时自动在不同的 Compute 节点上重新创建实例。

当主机 Compute 节点出现故障时,实例 HA 会自动清空实例。Instance HA 触发的撤离过程与用户可以手动执行的操作类似,如 Evacuate Instances 所述。实例 HA 适用于共享存储和本地存储环境,这意味着撤离的实例将维护新的主机中的相同网络配置(静态 ip、浮动 ip 等)和特征,即使它们从头生成。

实例 HA 由三个资源代理管理:

Expand
代理名称集群中的名称角色

fence_compute

fence-nova

当节点不可用时,标记 Compute 节点以进行撤离

NovaEvacuate

nova-evacuate

撤离来自故障节点上的实例,并在其中一个 Controller 节点上运行

nova-compute-wait

nova-compute-checkevacuate

在实例被完全撤离到可正常工作的 Compute 主机后,重启实例上的 Compute 服务。

本指南重点介绍通过 Ansible 在 overcloud 上启用实例 HA。为简化这个过程,本指南还包含预打包的 TAR 存档,其中包含需要这样做的 playbook。

注意

有关 Instance HA 执行检测和撤离过程的简单描述,请参考 附录 A, 自动通过实例 HA 清空

第 2 章 环境要求和假设

要启用实例 HA,您的 Red Hat OpenStack Platform overcloud 必须满足以下要求:

  • 该环境使用 Red Hat OpenStack Platform director 部署。详情请参阅 Director 安装和使用
  • control plane 上已经手动启用了隔离。
  • 以下软件包安装在所有节点上:

    • fence-agents-4.0.11-66.el7_4.3 (或更高)
    • pacemaker-1.1.16-12.el7.x86_64 (或更高)
    • resource-agents-3.9.5-105.el7.x86_64 (或更高)
  • 环境可以容忍 Compute 和 Control plane 的完整中断。
  • 在环境中为临时存储和块存储启用共享存储。有关相关信息,请参阅 第 2.1 节 “共享存储的例外”
  • 消息代理(AMQP)将每个 Compute 节点的主机名识别为有效。检查 Compute 节点的主机名:

    heat-admin@compute-n $ sudo crudini --get /etc/nova/nova.conf DEFAULT host
    Copy to Clipboard Toggle word wrap
  • 每个 Compute 节点都应该能够访问 $OS_AUTH_URL 中设置的端点。另外,此环境变量必须设置为:

    • overcloud 的身份验证服务(需要访问外部网络)或
    • 内部身份验证 URL。
警告

启用 Instance HA 时,无法升级或扩展操作。任何尝试这样做都将失败。这包括次版本和主要升级。

在升级或扩展 overcloud 之前,请先禁用 Instance HA。具体说明请查看 第 5 章 回滚(Rollback)

2.1. 共享存储的例外

通常,启用实例 HA 需要共享存储。如果您尝试使用 no-shared-storage 选项,您可能在撤离过程中收到 InvalidSharedStorage 错误,实例不会在另一节点上启动。但是,如果所有实例都配置为从块存储(cinder)卷引导,那么您将不需要共享存储来存储实例的磁盘镜像;您将能够使用 no-shared-storage 选项撤离所有实例。

在撤离过程中,如果您的实例被配置为从块存储卷引导,则任何撤离的实例都可能预期从同一卷启动,但在另一个 Compute 节点上启动。因此,撤离的实例可以立即重启其作业,因为 OS 镜像和应用程序数据保留在块存储卷上。

注意

本指南中的基于 ansible 的部署过程支持使用 no-shared-storage 选项进行安装。

第 3 章 Deployment

以下流程涉及使用 Ansible 启用 Instance HA。如需有关 Ansible 的更多信息,请参阅 Ansible 文档

3.1. 创建 Necessary Ansible 配置文件

通过 Ansible 启用实例 HA 需要 清单文件和 SSH 参数文件。这两个文件都传递在 overcloud 上实施实例 HA 所需的 Ansible 变量。

清单文件

清单文件列出 ansible playbook 的不同目标主机。它分为两部分:第一部分列出了每个节点(按名称),以及 Ansible 应该用于每个 playbook 命令的主机名、用户名和私钥文件。例如:

overcloud-controller-0 ansible_host=overcloud-controller-0 ansible_user=heat-admin ansible_private_key_file=/home/stack/.ssh/id_rsa
Copy to Clipboard Toggle word wrap

第二部分在以下标题下列出每个节点(或 节点类型): 计算undercloudovercloudcontroller

创建名为 /home/stack/hosts 的清单文件。以下示例演示了此所需的语法:

undercloud ansible_host=undercloud ansible_user=stack ansible_private_key_file=/home/stack/.ssh/id_rsa
overcloud-compute-1 ansible_host=overcloud-compute-1 ansible_user=heat-admin ansible_private_key_file=/home/stack/.ssh/id_rsa
overcloud-compute-0 ansible_host=overcloud-compute-0 ansible_user=heat-admin ansible_private_key_file=/home/stack/.ssh/id_rsa
overcloud-controller-2 ansible_host=overcloud-controller-2 ansible_user=heat-admin ansible_private_key_file=/home/stack/.ssh/id_rsa
overcloud-controller-1 ansible_host=overcloud-controller-1 ansible_user=heat-admin ansible_private_key_file=/home/stack/.ssh/id_rsa
overcloud-controller-0 ansible_host=overcloud-controller-0 ansible_user=heat-admin ansible_private_key_file=/home/stack/.ssh/id_rsa

[compute]
overcloud-compute-1
overcloud-compute-0

[undercloud]
undercloud

[overcloud]
overcloud-compute-1
overcloud-compute-0
overcloud-controller-2
overcloud-controller-1
overcloud-controller-0

[controller]
overcloud-controller-2
overcloud-controller-1
overcloud-controller-0
Copy to Clipboard Toggle word wrap

要生成 undercloud 和 overcloud 中所有主机的完整清单,请运行以下命令:

stack@director $ tripleo-ansible-inventory --list
Copy to Clipboard Toggle word wrap

此命令将以 JSON 格式生成详细和更新的清单。如需了解更多详细信息,请参阅 运行 Ansible Automation

SSH 参数文件

SSH 参数文件传递 Ansible 需要的必要凭据和身份验证设置,以便在每个目标主机上运行 playbook。

使用以下命令创建 SSH 参数文件(来自 /home/stack):

stack@director $ cat /home/stack/.ssh/id_rsa.pub >> /home/stack/.ssh/authorized_keys
stack@director $ echo -e "Host undercloud\n Hostname 127.0.0.1\n IdentityFile /home/stack/.ssh/id_rsa\n User stack\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null\n" > ssh.config.ansible
stack@director $ source /home/stack/stackrc
stack@director $ openstack server list -c Name -c Networks | awk '/ctlplane/ {print $2, $4}' | sed s/ctlplane=//g | while read node; do node_name=$(echo $node | cut -f 1 -d " "); node_ip=$(echo $node | cut -f 2 -d " "); echo -e "Host $node_name\n Hostname $node_ip\n IdentityFile /home/stack/.ssh/id_rsa\n User heat-admin\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null\n"; done >> ssh.config.ansible
Copy to Clipboard Toggle word wrap

这些命令将生成名为 /home/stack/ssh.config.ansible 的 SSH 参数文件,它将包含每个 overcloud 节点的特定主机连接选项。例如:

Host overcloud-controller-0
    Hostname 192.168.24.11
    IdentityFile /home/stack/.ssh/id_rsa
    User heat-admin
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
Copy to Clipboard Toggle word wrap

3.2. 准备 Undercloud

创建 清单文件和 SSH 参数文件 (从 第 3.1 节 “创建 Necessary Ansible 配置文件”)后,您现在可以为实例 HA 准备 overcloud:

  1. stack 用户身份登录 undercloud。
  2. 将此 TAR 存档下载到 /home/stack/。它包含通过 Ansible 启用实例 HA 所需的 playbook、角色和其他实用程序。

    注意

    此处提供的 TAR 存档 是上游 GIT 存储库的经过测试和修改版本。要克隆这个软件仓库,请运行:

    stack@director $ git clone git://github.com/redhat-openstack/tripleo-quickstart-utils
    Copy to Clipboard Toggle word wrap

    此软件仓库可以在不通知的情况下更新,因此可能与此步骤中提供的存档不同。

  3. 提取 TAR 归档:

    stack@director $ tar -xvf ansible-instanceha.tar
    Copy to Clipboard Toggle word wrap
  4. 使用以下内容创建 /home/stack/ansible.cfg

    [defaults]
    roles_path = /home/stack/ansible-instanceha/roles
    Copy to Clipboard Toggle word wrap
  5. ansible.cfg、主机(清单文件)和 ssh.config.ansible (SSH 参数文件)导出到以下环境变量:

    stack@director $ export ANSIBLE_CONFIG="/home/stack/ansible.cfg"
    stack@director $ export ANSIBLE_INVENTORY="/home/stack/hosts"
    stack@director $ export ANSIBLE_SSH_ARGS="-F /home/stack/ssh.config.ansible"
    Copy to Clipboard Toggle word wrap
  6. 确保 overcloud 的节点定义模板(默认为 instackenv.json)位于 /home/stack/ 中。有关节点定义模板的更多信息,请参阅为 Overcloud 注册节点

3.3. 启用实例 HA

undercloud 完全准备好后,您现在可以运行您下载并提取至 第 3.2 节 “准备 Undercloud” 中的规定的 playbook。这些 playbook 允许您启用带有或不为 Controller 和 Compute 节点配置 STONITH 的 Instance HA。有关 STONITH 的更多信息,请参阅 隔离控制器节点

在以下每个命令中,将 RELEASE 替换为您的 Red Hat OpenStack Platform swig-HEKETInamely 的对应代码,即 rhos-8

为 Controller 和 Compute 节点启用实例 HA 并配置 STONITH:

stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE"
Copy to Clipboard Toggle word wrap

默认情况下,playbook 将安装启用了共享存储的 instance-ha 解决方案。如果您的 overcloud 没有使用共享存储,请使用 instance_ha_shared_storage=false 选项:

stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e instance_ha_shared_storage=false
Copy to Clipboard Toggle word wrap
注意

有关实例 HA 中的共享存储的更多信息,请参阅 第 2.1 节 “共享存储的例外”

在不为 Controller 和 Compute 节点配置 STONITH 的情况下启用 实例 HA:

stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e stonith_devices=”none”
Copy to Clipboard Toggle word wrap

要只在 Compute 节点上启用实例 HA 并在 Compute 节点上配置 STONITH (例如,如果在 Controller 节点上配置了 STONITH):

stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e stonith_devices=”computes”
Copy to Clipboard Toggle word wrap

第 4 章 测试

警告

以下流程涉及有意崩溃 Compute 节点。这样做会强制通过 Instance HA 自动清空实例。

  1. 在导致有问题的实例崩溃前,在 overcloud 上引导一个或多个实例:

    stack@director $ . overcloudrc
    stack@director $ nova boot --image cirros --flavor 2 test-failover
    stack@director $ nova list --fields name,status,host
    Copy to Clipboard Toggle word wrap
  2. 登录托管您刚才启动的实例的 Compute 节点(如 compute-n中):

    stack@director $ . stackrc
    stack@director $ ssh -lheat-admin compute-n
    heat-admin@compute-n $
    Copy to Clipboard Toggle word wrap
  3. 使节点崩溃:

    heat-admin@compute-n $ echo c > /proc/sysrq-trigger
    Copy to Clipboard Toggle word wrap
  4. 几分钟后,验证这些实例是否在在线 Compute 节点上重启。要检查:

    stack@director $ nova list --fields name,status,host
    stack@director $ nova service-list
    Copy to Clipboard Toggle word wrap

第 5 章 回滚(Rollback)

启用 Instance HA 时,无法升级或扩展操作。任何尝试这样做都将失败。这包括次版本和主要升级。在升级或扩展 overcloud 之前,请先禁用 Instance HA。

要禁用实例 HA,以 stack 用户身份在 undercloud 上运行以下命令:

stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e instance_ha_action="uninstall"
Copy to Clipboard Toggle word wrap

RELEASE 替换为您的 Red Hat OpenStack Platform swig-wagonnamely 的对应代码,即 rhos-8

如果您在启用 Instance HA 时使用了 stonith_devices 选项,则需要在回滚期间指定相同的选项。例如:如果您的 Instance HA 配置禁用了 STONITH (如 第 3.3 节 “启用实例 HA”),请使用:

stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e instance_ha_action="uninstall"  -e stonith_devices=”none”
Copy to Clipboard Toggle word wrap

附录 A. 自动通过实例 HA 清空

借助实例 HA,OpenStack 会在节点出现故障时从 Compute 节点清空实例的过程。以下过程描述了在 Compute 节点失败时触发的事件序列。

  1. 当 Compute 节点出现故障时,IPMI 代理执行 第一级隔离,并物理重置节点以确保节点已关闭。从在线 Compute 节点清空实例可能会导致数据崩溃或多个在 overcloud 上运行的相同实例。节点关闭后,它将被视为 隔离
  2. 在物理 IPMI 隔离后,fence-nova 代理 执行第二级隔离,并将隔离的节点标记为 "evacuate=yes" 集群 per-node 属性。要做到这一点,代理运行:

    $ attrd_updater -n evacuate -A name="evacuate" host="FAILEDHOST" value="yes"
    Copy to Clipboard Toggle word wrap

    其中 FAILEDHOST 是失败的 Compute 节点的主机名。

  3. nova-evacuate 代理会在后台运行,使用 "evacuate=yes" 属性定期检查节点的集群。当 nova-evacuate 检测到隔离的节点具有此属性后,代理将使用与 Evacuate Instances 中所述相同的流程开始撤离节点。
  4. 同时,当故障节点从 IPMI 重置引导时,nova-compute-checkevacuate 代理将在检查 nova-evacuate 完成前等待(默认为 120 秒),然后检查 nova-evacuate 是否已完成撤离。如果没有,它将在相同的时间间隔后再次检查。
  5. nova-compute-checkevacuate 验证实例是否已完全撤离后,它会触发另一个进程,使隔离的节点重新可用于托管实例。

附录 B. Ansible Playbook 自动化的手动过程

本文档提供的基于 Ansible 的解决方案旨在以受支持的方式自动化配置实例 HA 的手动过程。为了便于参考,本附录提供了解决方案自动化的步骤。

1.首先禁用 Compute 节点上的 libvirtd 和所有 OpenStack 服务:

heat-admin@compute-n # sudo openstack-service stop
heat-admin@compute-n # sudo openstack-service disable
heat-admin@compute-n # sudo systemctl stop libvirtd
heat-admin@compute-n # sudo systemctl disable libvirtd
Copy to Clipboard Toggle word wrap

2.创建用于 pacemaker-remote 的身份验证密钥。
在其中一个 Compute 节点上执行此步骤:

heat-admin@compute-1 # sudo mkdir -p /etc/pacemaker/
heat-admin@compute-1 # sudo dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
heat-admin@compute-1 # sudo cp /etc/pacemaker/authkey ./
heat-admin@compute-1 # sudo chown heat-admin:heat-admin authkey
Copy to Clipboard Toggle word wrap

3.将此密钥复制到 director 节点,然后复制到剩余的 Compute 和 Controller 节点:

stack@director # scp authkey heat-admin@node-n:~/
heat-admin@node-n # sudo mkdir -p --mode=0750 /etc/pacemaker
heat-admin@node-n # sudo chgrp haclient /etc/pacemaker
heat-admin@node-n # sudo chown root:haclient /etc/pacemaker/authkey
Copy to Clipboard Toggle word wrap

4.在所有 Compute 节点上启用 pacemaker-remote

heat-admin@compute-n # sudo systemctl enable pacemaker_remote
heat-admin@compute-n # sudo systemctl start pacemaker_remote
Copy to Clipboard Toggle word wrap

5.确认在控制器和 Compute 节点上安装了 pacemaker (1.1.12-22.el7_1.4.x86_64)和 resource-agents (3.9.5-40.el7_1.5.x86_64)软件包所需的版本:

heat-admin@controller-n # sudo rpm -qa | egrep \'(pacemaker|resource-agents)'
Copy to Clipboard Toggle word wrap

6.BZ vmcore57414 应用以下约束临时解决方案。

注意

这个问题已在 RHSA-2015:1862 中解决,且您的环境可能不需要。

heat-admin@controller-1 # sudo pcs constraint order start openstack-nova-novncproxy-clone then openstack-nova-api-clone
heat-admin@controller-1 # sudo pcs constraint order start rabbitmq-clone then openstack-keystone-clone
heat-admin@controller-1 # sudo pcs constraint order promote galera-master then openstack-keystone-clone
heat-admin@controller-1 # sudo pcs constraint order start haproxy-clone then openstack-keystone-clone
heat-admin@controller-1 # sudo pcs constraint order start memcached-clone then openstack-keystone-clone
heat-admin@controller-1 # sudo pcs constraint order promote redis-master then start openstack-ceilometer-central-clone require-all=false
heat-admin@controller-1 # sudo pcs resource defaults resource-stickiness=INFINITY
Copy to Clipboard Toggle word wrap

7.使用 overcloudrc 文件创建 NovaEvacuate active/passive 资源,以提供 auth_urlusernametenantpassword 值:

stack@director # scp overcloudrc heat-admin@controller-1:~/
heat-admin@controller-1 # . ~/overcloudrc
heat-admin@controller-1 # sudo pcs resource create nova-evacuate ocf:openstack:NovaEvacuate auth_url=$OS_AUTH_URL username=$OS_USERNAME password=$OS_PASSWORD tenant_name=$OS_TENANT_NAME \ 
1
Copy to Clipboard Toggle word wrap
1
如果您不使用共享存储,请包含 no_shared_storage=1 选项。请参阅 第 2.1 节 “共享存储的例外” 了解更多信息。

8.确认 nova-evacuate 在浮动 IP 资源和镜像服务(glance)、OpenStack Networking (neutron)、计算(nova)服务之后启动:

heat-admin@controller-1 # for i in $(sudo pcs status | grep IP | awk \'{ print $1 }\'); do sudo pcs constraint order start $i then nova-evacuate ; done
heat-admin@controller-1 # for i in openstack-glance-api-clone neutron-metadata-agent-clone openstack-nova-conductor-clone; do sudo pcs constraint order start $i then nova-evacuate require-all=false ; done
Copy to Clipboard Toggle word wrap

9.在 control plane 间禁用所有 OpenStack 资源:

heat-admin@controller-1 # sudo pcs resource disable openstack-keystone --wait=540
Copy to Clipboard Toggle word wrap

此处使用的超时(--wait=540)仅用作示例。根据停止 Identity Service (以及硬件电源)所需的时间,您可以考虑增加超时时间。

10.使用 cibadmin 数据创建当前控制器的列表:

heat-admin@controller-1 # controllers=$(sudo cibadmin -Q -o nodes | grep uname | sed s/.*uname..// | awk -F\" \'{print $1}')
heat-admin@controller-1 # echo $controllers
Copy to Clipboard Toggle word wrap

11.使用此列表将这些节点标记为控制器,并使用 osprole=controller 属性:

heat-admin@controller-1 # for controller in ${controllers}; do sudo pcs property set --node ${controller} osprole=controller ; done
Copy to Clipboard Toggle word wrap

12.构建环境中已存在的 stonith 设备列表:

heat-admin@controller-1 # stonithdevs=$(sudo pcs stonith | awk \'{print $1}')
heat-admin@controller-1 # echo $stonithdevs
Copy to Clipboard Toggle word wrap

13.标记 control plane 服务,以确保它们仅在上述标识的控制器上运行,并跳过列出的任何 stonith 设备:

heat-admin@controller-1 # for i in $(sudo cibadmin -Q --xpath //primitive --node-path | tr ' ' \'\n' | awk -F "id=\'" '{print $2}' | awk -F "\'" '{print $1}' | uniq); do
    found=0
    if [ -n "$stonithdevs" ]; then
        for x in $stonithdevs; do
            if [ $x = $i ]; then
                found=1
            fi
	    done
    fi
    if [ $found = 0 ]; then
        sudo pcs constraint location $i rule resource-discovery=exclusive score=0 osprole eq controller
    fi
done
Copy to Clipboard Toggle word wrap

14.开始在 pacemaker 中填充 Compute 节点资源,从 neutron-openvswitch-agent 开始:

heat-admin@controller-1 # sudo pcs resource create neutron-openvswitch-agent-compute systemd:neutron-openvswitch-agent op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location neutron-openvswitch-agent-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start neutron-server-clone then neutron-openvswitch-agent-compute-clone require-all=false
Copy to Clipboard Toggle word wrap

然后,计算 libvirtd 资源:

heat-admin@controller-1 # sudo pcs resource create libvirtd-compute systemd:libvirtd op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location libvirtd-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start neutron-openvswitch-agent-compute-clone then libvirtd-compute-clone
heat-admin@controller-1 # sudo pcs constraint colocation add libvirtd-compute-clone with neutron-openvswitch-agent-compute-clone
Copy to Clipboard Toggle word wrap

然后 openstack-ceilometer-compute 资源:

heat-admin@controller-1 # sudo pcs resource create ceilometer-compute systemd:openstack-ceilometer-compute op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location ceilometer-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start openstack-ceilometer-notification-clone then ceilometer-compute-clone require-all=false
heat-admin@controller-1 # sudo pcs constraint order start libvirtd-compute-clone then ceilometer-compute-clone
heat-admin@controller-1 # sudo pcs constraint colocation add ceilometer-compute-clone with libvirtd-compute-clone
Copy to Clipboard Toggle word wrap

然后 nova-compute 资源:

heat-admin@controller-1 # . /home/heat-admin/overcloudrc
heat-admin@controller-1 # sudo pcs resource create nova-compute-checkevacuate ocf:openstack:nova-compute-wait auth_url=$OS_AUTH_URL username=$OS_USERNAME password=$OS_PASSWORD tenant_name=$OS_TENANT_NAME domain=localdomain op start timeout=300 --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location nova-compute-checkevacuate-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start openstack-nova-conductor-clone then nova-compute-checkevacuate-clone require-all=false
heat-admin@controller-1 # sudo pcs resource create nova-compute systemd:openstack-nova-compute --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location nova-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start nova-compute-checkevacuate-clone then nova-compute-clone require-all=true
heat-admin@controller-1 # sudo pcs constraint order start nova-compute-clone then nova-evacuate require-all=false
heat-admin@controller-1 # sudo pcs constraint order start libvirtd-compute-clone then nova-compute-clone
heat-admin@controller-1 # sudo pcs constraint colocation add nova-compute-clone with libvirtd-compute-clone
Copy to Clipboard Toggle word wrap

15.为 Compute 节点添加 stonith 设备。为每个 Compute 节点运行以下命令:

heat-admin@controller-1 # sudo pcs stonith create ipmilan-overcloud-compute-N  fence_ipmilan pcmk_host_list=overcloud-compute-0 ipaddr=10.35.160.78 login=IPMILANUSER passwd=IPMILANPW lanplus=1 cipher=1 op monitor interval=60s;
Copy to Clipboard Toggle word wrap

其中:

  • n 是每个计算节点的标识号(如 ipmilan-overcloud-compute-1ipmilan-overcloud-compute-2 等)。
  • IPMILANUSERIPMILANPW 是 IPMI 设备的用户名和密码。

16.创建 seperate fence-nova stonith 设备:

heat-admin@controller-1 # . overcloudrc
heat-admin@controller-1 # sudo pcs stonith create fence-nova fence_compute \
                                    auth-url=$OS_AUTH_URL \
                                    login=$OS_USERNAME \
                                    passwd=$OS_PASSWORD \
                                    tenant-name=$OS_TENANT_NAME \
                                    record-only=1 --force
Copy to Clipboard Toggle word wrap

17.使某些 Compute 节点可以在隔离后恢复:

heat-admin@controller-1 # sudo pcs property set cluster-recheck-interval=1min
Copy to Clipboard Toggle word wrap

18.创建 Compute 节点资源,并将 stonith 级别 1 设置为包含节点的物理隔离设备和 fence-nova。为每个 Compute 节点运行以下命令:

heat-admin@controller-1 # sudo pcs resource create overcloud-compute-N ocf:pacemaker:remote reconnect_interval=60 op monitor interval=20
heat-admin@controller-1 # sudo pcs property set --node overcloud-compute-N osprole=compute
heat-admin@controller-1 # sudo pcs stonith level add 1 overcloud-compute-N ipmilan-overcloud-compute-N,fence-nova
heat-admin@controller-1 # sudo pcs stonith
Copy to Clipboard Toggle word wrap

使用每个计算节点的识别数量(如 overcloud-compute-1overcloud-compute-2 等)替换 N。使用这些识别号与之前创建的 stonith 设备(如 overcloud-compute-1ipmilan-overcloud-compute-1)匹配。

19.启用 control 和 Compute plane 服务:

heat-admin@controller-1 # sudo pcs resource enable openstack-keystone
heat-admin@controller-1 # sudo pcs resource enable neutron-openvswitch-agent-compute
heat-admin@controller-1 # sudo pcs resource enable libvirtd-compute
heat-admin@controller-1 # sudo pcs resource enable ceilometer-compute
heat-admin@controller-1 # sudo pcs resource enable nova-compute-checkevacuate
heat-admin@controller-1 # sudo pcs resource enable nova-compute
Copy to Clipboard Toggle word wrap

20.在清理任何失败的资源前,等待一些时间进行环境设置:

heat-admin@controller-1 # sleep 60
heat-admin@controller-1 # sudo pcs resource cleanup
heat-admin@controller-1 # sudo pcs status
heat-admin@controller-1 # sudo pcs property set stonith-enabled=true
Copy to Clipboard Toggle word wrap

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat