20.3. 为 Controller 节点替换准备集群
在替换该节点前,请确保 Pacemaker 没有在该节点上运行,然后从 Pacemaker 集群中删除该节点。
流程
要查看 Controller 节点的 IP 地址列表,请运行以下命令:
(undercloud)$ metalsmith -c Hostname -c "IP Addresses" list +------------------------+-----------------------+ | Hostname | IP Addresses | +------------------------+-----------------------+ | overcloud-compute-0 | ctlplane=192.168.0.44 | | overcloud-controller-0 | ctlplane=192.168.0.47 | | overcloud-controller-1 | ctlplane=192.168.0.45 | | overcloud-controller-2 | ctlplane=192.168.0.46 | +------------------------+-----------------------+
登录节点,并确认 pacemaker 状态。如果 pacemaker 正在运行,请使用
pcs cluster
命令来停止 pacemaker。本例在overcloud-controller-0
上停止 pacemaker:(undercloud) $ ssh tripleo-admin@192.168.0.45 "sudo pcs status | grep -w Online | grep -w overcloud-controller-0" (undercloud) $ ssh tripleo-admin@192.168.0.45 "sudo pcs cluster stop overcloud-controller-0"
注意如果节点物理不可用或停止,则不需要执行前面的操作,因为 pacemaker 已在该节点上停止。
在节点上停止 Pacemaker 后,从 pacemaker 集群中删除该节点。以下示例登录到
overcloud-controller-1
,以删除overcloud-controller-0
:(undercloud) $ ssh tripleo-admin@192.168.0.45 "sudo pcs cluster node remove overcloud-controller-0"
如果要替换的节点无法访问(例如,由于硬件故障),请运行
pcs
命令并使用附加--skip-offline
和--force
选项从集群中强制删除该节点:(undercloud) $ ssh tripleo-admin@192.168.0.45 "sudo pcs cluster node remove overcloud-controller-0 --skip-offline --force"
从 pacemaker 集群中删除节点后,从 pacemaker 中的已知主机列表中删除该节点:
(undercloud) $ ssh tripleo-admin@192.168.0.45 "sudo pcs host deauth overcloud-controller-0"
无论节点是否可访问,都可运行该命令。
要确保新 Controller 节点在替换后使用正确的 STONITH 隔离设备,请输入以下命令从节点中删除设备:
(undercloud) $ ssh tripleo-admin@192.168.0.45 "sudo pcs stonith delete <stonith_resource_name>"
-
将
<stonith_resource_name
> 替换为与节点对应的 STONITH 资源的名称。资源名称使用<resource_agent>-<host_mac>
格式。您可以在fence.yaml
文件的FencingConfig
部分查找资源代理和主机 MAC 地址。
-
将
overcloud 数据库必须在替换过程中继续运行。为了确保 Pacemaker 不会在此过程中停止 Galera,可选择一个运行中的 Controller 节点,然后使用该 Controller 节点的 IP 地址在 undercloud 上运行以下命令:
(undercloud) $ ssh tripleo-admin@192.168.0.45 "sudo pcs resource unmanage galera-bundle"
从集群中删除替换 Controller 节点的 OVN 北向数据库服务器:
获取要替换的 OVN 北向数据库服务器的服务器 ID:
$ ssh tripleo-admin@<controller_ip> sudo podman exec ovn_cluster_north_db_server ovs-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/status OVN_Northbound 2>/dev/null|grep -A4 Servers:
将
<controller_ip
> 替换为任何活跃 Controller 节点的 IP 地址。您应该看到类似如下的输出:
Servers: 96da (96da at tcp:172.17.1.55:6643) (self) next_index=26063 match_index=26063 466b (466b at tcp:172.17.1.51:6643) next_index=26064 match_index=26063 last msg 2936 ms ago ba77 (ba77 at tcp:172.17.1.52:6643) next_index=26064 match_index=26063 last msg 2936 ms ago
在本例中,
172.17.1.55
是被替换的 Controller 节点的内部 IP 地址,因此北向数据库服务器 ID 为96da
。使用您在上一步中获得的服务器 ID,运行以下命令来删除 OVN 北向数据库服务器:
$ ssh tripleo-admin@172.17.1.52 sudo podman exec ovn_cluster_north_db_server ovs-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/kick OVN_Northbound 96da
在本例中,您要将
172.17.1.52
替换为任何活跃的 Controller 节点的 IP 地址,并将96da
替换为 OVN 北向数据库服务器的服务器 ID。
从集群中移除替换 Controller 节点的 OVN 南向数据库服务器:
获取要替换的 OVN 南向数据库服务器的服务器 ID:
$ ssh tripleo-admin@<controller_ip> sudo podman exec ovn_cluster_north_db_server ovs-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/status OVN_Southbound 2>/dev/null|grep -A4 Servers:
将
<controller_ip
> 替换为任何活跃 Controller 节点的 IP 地址。您应该看到类似如下的输出:
Servers: e544 (e544 at tcp:172.17.1.55:6644) last msg 42802690 ms ago 17ca (17ca at tcp:172.17.1.51:6644) last msg 5281 ms ago 6e52 (6e52 at tcp:172.17.1.52:6644) (self)
在本例中,
172.17.1.55
是要替换的 Controller 节点的内部 IP 地址,因此南向数据库服务器 ID 为e544
。使用您在上一步中获得的服务器 ID,运行以下命令来删除 OVN 南向数据库服务器:
$ ssh tripleo-admin@172.17.1.52 sudo podman exec ovn_cluster_south_db_server ovs-appctl -t /var/run/ovn/ovnsb_db.ctl cluster/kick OVN_Southbound e544
在本例中,您要将
172.17.1.52
替换为任何活跃的 Controller 节点的 IP 地址,并将e544
替换为 OVN 南向数据库服务器的服务器 ID。
运行以下清理命令以防止重新加入集群。
将
<replaced_controller_ip
> 替换为您要替换的 Controller 节点的 IP 地址:$ ssh tripleo-admin@<replaced_controller_ip> sudo systemctl disable --now tripleo_ovn_cluster_south_db_server.service tripleo_ovn_cluster_north_db_server.service $ ssh tripleo-admin@<replaced_controller_ip> sudo rm -rfv /var/lib/openvswitch/ovn/.ovn* /var/lib/openvswitch/ovn/ovn*.db