计算实例的高可用性
配置计算实例的高可用性
摘要
第 1 章 概述 复制链接链接已复制到粘贴板!
本指南介绍了如何实施 实例高可用性(Instance HA)。实例 HA 允许 Red Hat OpenStack Platform 在主机 Compute 节点中断时自动在不同的 Compute 节点上重新创建实例。
当主机 Compute 节点出现故障时,实例 HA 会自动清空实例。Instance HA 触发的撤离过程与用户可以手动执行的操作类似,如 Evacuate Instances 所述。实例 HA 适用于共享存储和本地存储环境,这意味着撤离的实例将维护新的主机中的相同网络配置(静态 ip、浮动 ip 等)和特征,即使它们从头生成。
实例 HA 由三个资源代理管理:
| 代理名称 | 集群中的名称 | 角色 |
|---|---|---|
| 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
heat-admin@compute-n $ sudo crudini --get /etc/nova/nova.conf DEFAULT hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 每个 Compute 节点都应该能够访问 $OS_AUTH_URL 中设置的端点。另外,此环境变量必须设置为:
- overcloud 的身份验证服务(需要访问外部网络)或
- 内部身份验证 URL。
启用 Instance HA 时,无法升级或扩展操作。任何尝试这样做都将失败。这包括次版本和主要升级。
在升级或扩展 overcloud 之前,请先禁用 Instance HA。具体说明请查看 第 5 章 回滚(Rollback)。
第 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
overcloud-controller-0 ansible_host=overcloud-controller-0 ansible_user=heat-admin ansible_private_key_file=/home/stack/.ssh/id_rsa
第二部分在以下标题下列出每个节点(或 节点类型): 计算、undercloud、overcloud 或 controller。
创建名为 /home/stack/hosts 的清单文件。以下示例演示了此所需的语法:
要生成 undercloud 和 overcloud 中所有主机的完整清单,请运行以下命令:
stack@director $ tripleo-ansible-inventory --list
stack@director $ tripleo-ansible-inventory --list
此命令将以 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
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
这些命令将生成名为 /home/stack/ssh.config.ansible 的 SSH 参数文件,它将包含每个 overcloud 节点的特定主机连接选项。例如:
3.2. 准备 Undercloud 复制链接链接已复制到粘贴板!
创建 清单文件和 SSH 参数文件 (从 第 3.1 节 “创建 Necessary Ansible 配置文件”)后,您现在可以为实例 HA 准备 overcloud:
-
以
stack用户身份登录 undercloud。 将此 TAR 存档下载到
/home/stack/。它包含通过 Ansible 启用实例 HA 所需的 playbook、角色和其他实用程序。注意此处提供的 TAR 存档 是上游 GIT 存储库的经过测试和修改版本。要克隆这个软件仓库,请运行:
stack@director $ git clone git://github.com/redhat-openstack/tripleo-quickstart-utils
stack@director $ git clone git://github.com/redhat-openstack/tripleo-quickstart-utilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此软件仓库可以在不通知的情况下更新,因此可能与此步骤中提供的存档不同。
提取 TAR 归档:
stack@director $ tar -xvf ansible-instanceha.tar
stack@director $ tar -xvf ansible-instanceha.tarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建
/home/stack/ansible.cfg:[defaults] roles_path = /home/stack/ansible-instanceha/roles
[defaults] roles_path = /home/stack/ansible-instanceha/rolesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
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"
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 Copied! Toggle word wrap Toggle overflow -
确保 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"
stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE"
默认情况下,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
stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e instance_ha_shared_storage=false
有关实例 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”
stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e stonith_devices=”none”
要只在 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”
stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e stonith_devices=”computes”
第 4 章 测试 复制链接链接已复制到粘贴板!
以下流程涉及有意崩溃 Compute 节点。这样做会强制通过 Instance HA 自动清空实例。
在导致有问题的实例崩溃前,在 overcloud 上引导一个或多个实例:
stack@director $ . overcloudrc stack@director $ nova boot --image cirros --flavor 2 test-failover stack@director $ nova list --fields name,status,host
stack@director $ . overcloudrc stack@director $ nova boot --image cirros --flavor 2 test-failover stack@director $ nova list --fields name,status,hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 登录托管您刚才启动的实例的 Compute 节点(如
compute-n中):stack@director $ . stackrc stack@director $ ssh -lheat-admin compute-n heat-admin@compute-n $
stack@director $ . stackrc stack@director $ ssh -lheat-admin compute-n heat-admin@compute-n $Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使节点崩溃:
heat-admin@compute-n $ echo c > /proc/sysrq-trigger
heat-admin@compute-n $ echo c > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 几分钟后,验证这些实例是否在在线 Compute 节点上重启。要检查:
stack@director $ nova list --fields name,status,host stack@director $ nova service-list
stack@director $ nova list --fields name,status,host stack@director $ nova service-listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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"
stack@director $ ansible-playbook /home/stack/ansible-instanceha/playbooks/overcloud-instance-ha.yml \
-e release="RELEASE" -e instance_ha_action="uninstall"
将 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”
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”
附录 A. 自动通过实例 HA 清空 复制链接链接已复制到粘贴板!
借助实例 HA,OpenStack 会在节点出现故障时从 Compute 节点清空实例的过程。以下过程描述了在 Compute 节点失败时触发的事件序列。
-
当 Compute 节点出现故障时,
IPMI代理执行 第一级隔离,并物理重置节点以确保节点已关闭。从在线 Compute 节点清空实例可能会导致数据崩溃或多个在 overcloud 上运行的相同实例。节点关闭后,它将被视为 隔离。 在物理 IPMI 隔离后,
fence-nova代理 执行第二级隔离,并将隔离的节点标记为"evacuate=yes"集群 per-node 属性。要做到这一点,代理运行:attrd_updater -n evacuate -A name="evacuate" host="FAILEDHOST" value="yes"
$ attrd_updater -n evacuate -A name="evacuate" host="FAILEDHOST" value="yes"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 FAILEDHOST 是失败的 Compute 节点的主机名。
-
nova-evacuate代理会在后台运行,使用"evacuate=yes"属性定期检查节点的集群。当nova-evacuate检测到隔离的节点具有此属性后,代理将使用与 Evacuate Instances 中所述相同的流程开始撤离节点。 -
同时,当故障节点从 IPMI 重置引导时,
nova-compute-checkevacuate代理将在检查 nova-evacuate 完成前等待(默认为 120 秒),然后检查nova-evacuate是否已完成撤离。如果没有,它将在相同的时间间隔后再次检查。 -
当
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
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
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
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
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
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
4.在所有 Compute 节点上启用 pacemaker-remote :
heat-admin@compute-n # sudo systemctl enable pacemaker_remote heat-admin@compute-n # sudo systemctl start pacemaker_remote
heat-admin@compute-n # sudo systemctl enable pacemaker_remote
heat-admin@compute-n # sudo systemctl start pacemaker_remote
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)'
heat-admin@controller-n # sudo rpm -qa | egrep \'(pacemaker|resource-agents)'
6.为 BZ vmcore57414 应用以下约束临时解决方案。
这个问题已在 RHSA-2015:1862 中解决,且您的环境可能不需要。
7.使用 overcloudrc 文件创建 NovaEvacuate active/passive 资源,以提供 auth_url、username、tenant 和 password 值:
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 \
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
- 如果您不使用共享存储,请包含 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
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
9.在 control plane 间禁用所有 OpenStack 资源:
heat-admin@controller-1 # sudo pcs resource disable openstack-keystone --wait=540
heat-admin@controller-1 # sudo pcs resource disable openstack-keystone --wait=540
此处使用的超时(--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
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
11.使用此列表将这些节点标记为控制器,并使用 osprole=controller 属性:
heat-admin@controller-1 # for controller in ${controllers}; do sudo pcs property set --node ${controller} osprole=controller ; done
heat-admin@controller-1 # for controller in ${controllers}; do sudo pcs property set --node ${controller} osprole=controller ; done
12.构建环境中已存在的 stonith 设备列表:
heat-admin@controller-1 # stonithdevs=$(sudo pcs stonith | awk \'{print $1}')
heat-admin@controller-1 # echo $stonithdevs
heat-admin@controller-1 # stonithdevs=$(sudo pcs stonith | awk \'{print $1}')
heat-admin@controller-1 # echo $stonithdevs
13.标记 control plane 服务,以确保它们仅在上述标识的控制器上运行,并跳过列出的任何 stonith 设备:
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
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
然后,计算 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
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
然后 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
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
然后 nova-compute 资源:
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;
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;
其中:
-
n 是每个计算节点的标识号(如
ipmilan-overcloud-compute-1、ipmilan-overcloud-compute-2等)。 - IPMILANUSER 和 IPMILANPW 是 IPMI 设备的用户名和密码。
16.创建 seperate fence-nova stonith 设备:
17.使某些 Compute 节点可以在隔离后恢复:
heat-admin@controller-1 # sudo pcs property set cluster-recheck-interval=1min
heat-admin@controller-1 # sudo pcs property set cluster-recheck-interval=1min
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
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
使用每个计算节点的识别数量(如 overcloud-compute-1、overcloud-compute-2 等)替换 N。使用这些识别号与之前创建的 stonith 设备(如 overcloud-compute-1 和 ipmilan-overcloud-compute-1)匹配。
19.启用 control 和 Compute plane 服务:
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
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