Show Table of Contents
9.4. 替换 Controller 节点
重要
这个过程当前正在进行复审,请不要在当前地状态下使用它。详细信息,请参阅 BZ#1326507。
在一些情况下,高可用性集群中的 Controller 节点可能会出现故障。在这种情况下,您需要把这个节点从集群中删除,并使用一个新 Controller 节点替换它。另外,还要保证节点可以和集群中的其它节点进行连接。
本节介绍了如果替换 Controller 节点。这个过程包括运行
openstack overcloud deploy 命令来更新需要替换 controller 节点的 Overcloud。请注意,这个过程不是完全自动的,在 Overcloud 栈更新过程中,openstack overcloud deploy 命令会在某个阶段报告一个错误,Overcloud 栈更新的过程会随之停止。这时,需要一些人工的干预后,openstack overcloud deploy 进程才会继续。
首先,找到要被删除节点的索引。节点索引是
nova list 输出中的实例名的一个后缀。
[stack@director ~]$ nova list +--------------------------------------+------------------------+ | ID | Name | +--------------------------------------+------------------------+ | 861408be-4027-4f53-87a6-cd3cf206ba7a | overcloud-compute-0 | | 0966e9ae-f553-447a-9929-c4232432f718 | overcloud-compute-1 | | 9c08fa65-b38c-4b2e-bd47-33870bff06c7 | overcloud-compute-2 | | a7f0f5e1-e7ce-4513-ad2b-81146bc8c5af | overcloud-controller-0 | | cfefaf60-8311-4bc3-9416-6a824a40a9ae | overcloud-controller-1 | | 97a055d4-aefd-481c-82b7-4a5f384036d2 | overcloud-controller-2 | +--------------------------------------+------------------------+
在这个示例中,您需要删除
overcloud-controller-1 节点,并使用 overcloud-controller-3 替换它。首先,把节点设置为维护模式,从而使 director 不再关心故障节点。把 nova list 中的实例 ID 与 ironic node-list 中的节点 ID 相关联
[stack@director ~]$ ironic node-list +--------------------------------------+------+--------------------------------------+ | UUID | Name | Instance UUID | +--------------------------------------+------+--------------------------------------+ | 36404147-7c8a-41e6-8c72-a6e90afc7584 | None | 7bee57cf-4a58-4eaf-b851-2a8bf6620e48 | | 91eb9ac5-7d52-453c-a017-c0e3d823efd0 | None | None | | 75b25e9a-948d-424a-9b3b-f0ef70a6eacf | None | None | | 038727da-6a5c-425f-bd45-fda2f4bd145b | None | 763bfec2-9354-466a-ae65-2401c13e07e5 | | dc2292e6-4056-46e0-8848-d6e96df1f55d | None | 2017b481-706f-44e1-852a-2ee857c303c4 | | c7eadcea-e377-4392-9fc3-cf2b02b7ec29 | None | 5f73c7d7-4826-49a5-b6be-8bfd558f3b41 | | da3a8d19-8a59-4e9d-923a-6a336fe10284 | None | cfefaf60-8311-4bc3-9416-6a824a40a9ae | | 807cb6ce-6b94-4cd1-9969-5c47560c2eee | None | c07c13e6-a845-4791-9628-260110829c3a | +--------------------------------------+------+--------------------------------------+
把节点设为维护模式:
[stack@director ~]$ ironic node-set-maintenance da3a8d19-8a59-4e9d-923a-6a336fe10284 true
使用
control 配置集标记新节点。
[stack@director ~]$ ironic node-update 75b25e9a-948d-424a-9b3b-f0ef70a6eacf add properties/capabilities='profile:control,boot_option:local'
创建一个 YAML 文件(
~/templates/remove-node.yaml),它定义了要被删除的节点索引:
parameters:
ControllerRemovalPolicies:
[{'resource_list': ['1']}]
重要
如果使用索引为 0 的节点进行替换,在开始替换前,编辑 heat 模板,修改 bootstrap 节点的索引。打开 Heat 模板集合的根目录下的
overcloud-without-mergepy.yaml 文件:
bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
修改为:
bootstrap_nodeid: {get_attr: [Controller, resource.1.hostname]}
bootstrap_nodeid_ip: {get_attr: [Controller, resource.1.ip_address]}
在指定节点索引后,重新部署 Overcloud,包括
remove-node.yaml 环境文件:
[stack@director ~]$ openstack overcloud deploy --templates --control-scale 3 -e ~/remove-node.yaml
重要
如果您在创建 Overcloud 时传递了额外的环境变量,使用
-e 或 --environment-file 选项再次传递它们来避免对 Overcloud 的不必要的手工改变。
请注意,
remove-node.yaml 在这个实例中只需要一次。
director 会删除旧节点、创建一个新节点并更新 Overcloud 栈。您可以使用以下命令检查 Overcloud 栈的状态:
[stack@director ~]$ heat stack-list --show-nested
在配置过程中,Overcloud 栈更新会停止并报告一个
UPDATE_FAILED 错误。这是因为一些 Puppet 模块不支持节点替换。此时,需要一些人工的干预。您需要执行以下操作:
- 以
heat-admin的身份登录到其它节点中的一个。director 的stack用户有一个访问heat-admin用户的 SSH 密钥。 - 从集群中删除故障节点:
[heat-admin@overcloud-controller-0 ~]$ sudo crm_node -R overcloud-controller-1 --force
- 从 RabbitMQ 集群中删除故障节点:
[heat-admin@overcloud-controller-0 ~]$ sudo rabbitmqctl forget_cluster_node rabbit@overcloud-controller-1
- 从 MongoDB 中删除故障节点。首先,从其它任何节点上连接到 MongoDB:
[heat-admin@overcloud-controller-0 ~]$ mongo --host 192.168.0.23 MongoDB shell version: 2.6.9 connecting to: 192.168.0.23:27017/test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user tripleo:SECONDARY>
检查 MongoDB 集群的状态:tripleo:SECONDARY> rs.status()
删除故障节点并退出:tripleo:SECONDARY> rs.remove('192.168.0.23:27017') tripleo:SECONDARY> exit - 在 Galera 集群中更新节点列表:
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource update galera wsrep_cluster_address=gcomm://overcloud-controller-0,overcloud-controller-3,overcloud-controller-2
- 登录到每个 Controller 节点,从
/etc/corosync/corosync.conf中删除故障节点并重启 Corosync。例如,从 Controller 节点 0 的配置中删除故障节点:[heat-admin@overcloud-controller-0 ~]$ sudo vi /etc/corosync/corosync.conf
删除包括故障节点(节点 1)的部分:node { ring0_addr: overcloud-controller-1 nodeid: 2 }重新启动 Corosync:[heat-admin@overcloud-controller-0 ~]$ sudo systemctl restart corosync
在每个节点上完成这个操作。 - 在新节点上启动 Pacemaker 和 Corosync:
[heat-admin@overcloud-controller-0 ~]$ sudo pcs cluster node add overcloud-controller-3 [heat-admin@overcloud-controller-0 ~]$ sudo pcs cluster start overcloud-controller-3
- 在新节点上启动 keystone 服务。从其它节点上把
/etc/keystone目录复制到 director 主机:[heat-admin@overcloud-controller-0 ~]$ sudo -i [root@overcloud-controller-0 ~]$ scp -r /etc/keystone stack@192.168.0.1:~/.
然后登录到新的 Controller 节点。从新节点中删除/etc/keystone目录,从 director 主机上复制keystone文件:[heat-admin@overcloud-controller-3 ~]$ sudo -i [root@overcloud-controller-3 ~]$ rm -rf /etc/keystone [root@overcloud-controller-3 ~]$ scp -r stack@192.168.0.1:~/keystone /etc/. [root@overcloud-controller-3 ~]$ chown -R keystone: /etc/keystone [root@overcloud-controller-3 ~]$ chown root /etc/keystone/logging.conf /etc/keystone/default_catalog.templates
编辑/etc/keystone/keystone.conf,把admin_bind_host和public_bind_host参数设置为新 Controller 节点的 IP 地址。通过 Pacemaker 启用并重启 keystone 服务:[heat-admin@overcloud-controller-3 ~]$ sudo pcs resource enable openstack-keystone-clone overcloud-controller-3 [heat-admin@overcloud-controller-3 ~]$ sudo pcs resource cleanup openstack-keystone-clone overcloud-controller-3
手工配置已完成。重新运行 Overcloud 部署命令来继续栈的更新:
[stack@director ~]$ openstack overcloud deploy --templates --control-scale 3 -e [ENVIRONMENT_FILE]
重要
如果您在创建 Overcloud 时传递了额外的环境变量,使用
-e 或 --environment-file 选项再次传递它们来避免对 Overcloud 的不必要的手工改变。
请注意,
remove-node.yaml 不再需要。
如果 Overcloud 栈更新失败,这可能是由 keystone 服务的一个问题造成的。登录到新的节点,再次重启 keystone 服务:
[heat-admin@overcloud-controller-3 ~]$ sudo pcs resource enable openstack-keystone-clone overcloud-controller-3 [heat-admin@overcloud-controller-3 ~]$ sudo pcs resource cleanup openstack-keystone-clone overcloud-controller-3
在 Overcloud 栈更新完成后,还需要以下最终的配置。登录到一个 Controller 节点,使用 Pacemaker 刷新以下服务:
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup neutron-server-clone [heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-nova-api-clone [heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-nova-consoleauth-clone [heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-heat-engine-clone [heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-cinder-api-clone [heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-glance-registry-clone [heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup httpd-clone
执行最后的状态检查来确保服务在正确运行:
[heat-admin@overcloud-controller-0 ~]$ sudo pcs status
故障节点现在已被一个新节点替换。
注意
如果故障节点仍然出现在
pcs status 的输出中,使用以下命令把它删除:
[heat-admin@overcloud-controller-0 ~]$ sudo crm_node -R overcloud-controller-1 --force

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.