第 17 章 替换 Controller 节点
在一些情况下,高可用性集群中的 Controller 节点可能会出现故障。在这种情况下,您需要把这个节点从集群中删除,并替换为一个新的 Controller 节点。
完成本节中的步骤来替换 Controller 节点。在 Controller 节点替换过程中,需要运行 openstack overcloud deploy
命令,以使用替换 Controller 节点的请求来更新 overcloud。
以下操作过程仅适用于高可用性环境。在只使用一个 Controller 节点的情况下不要使用此过程。
17.1. 准备替换 Controller 节点
在替换 overcloud 控制器节点前,务必要检查Red Hat OpenStack Platform 环境的当前状态;此检查有助于避免在替换控制器节点的过程中出现混乱。使用以下初步检查列表,确定是否可以安全地执行 Controller 节点替换。在 undercloud 上对这些检查运行所有命令。
步骤
在 undercloud 中检查
overcloud
栈的当前状态:$ source stackrc (undercloud)$ openstack stack list --nested
overcloud
栈以及它们的子栈的状态需要是CREATE_COMPLETE
或UPDATE_COMPLETE
。安装数据库客户端工具:
(undercloud)$ sudo dnf -y install mariadb
配置数据库的 root 用户访问权限:
(undercloud)$ sudo cp /var/lib/config-data/puppet-generated/mysql/root/.my.cnf /root/.
对 undercloud 数据库进行备份:
(undercloud)$ mkdir /home/stack/backup (undercloud)$ sudo mysqldump --all-databases --quick --single-transaction | gzip > /home/stack/backup/dump_db_undercloud.sql.gz
检查您的 undercloud 是否包含 10 GB 可用存储,可在置备新节点时容纳镜像缓存和转换:
(undercloud)$ df -h
如果您要为新 Controller 节点重复使用 IP 地址,请确保删除旧 Controller 使用的端口:
(undercloud)$ openstack port delete <port>
在运行的 Controller 节点上检查 Pacemaker 的状态。例如,运行的 Controller 节点的 IP 地址是 192.168.0.47,使用以下命令查看 Pacemaker 的状态:
(undercloud)$ ssh heat-admin@192.168.0.47 'sudo pcs status'
输出显示所有在现有节点上运行且在故障节点上停止的服务。
检查 overcloud 的 MariaDB 集群中各个节点的以下参数:
-
wsrep_local_state_comment: Synced
wsrep_cluster_size: 2
使用以下命令检查各个运行的 Controller 节点的这些参数。在本例中,Controller 节点 IP 地址是 192.168.0.47 和 192.168.0.46:
(undercloud)$ for i in 192.168.0.46 192.168.0.47 ; do echo "*** $i ***" ; ssh heat-admin@$i "sudo podman exec \$(sudo podman ps --filter name=galera-bundle -q) mysql -e \"SHOW STATUS LIKE 'wsrep_local_state_comment'; SHOW STATUS LIKE 'wsrep_cluster_size';\""; done
-
检查 RabbitMQ 状态。例如,运行的 Controller 节点的 IP 地址是 192.168.0.47,使用以下命令查看 RabbitMQ 的状态:
(undercloud)$ ssh heat-admin@192.168.0.47 "sudo podman exec \$(sudo podman ps -f name=rabbitmq-bundle -q) rabbitmqctl cluster_status"
running_nodes
键应该只显示两个可用的节点,而不会显示有故障的节点。如果启用了隔离服务,则将其禁用。例如,如果 192.168.0.47 是运行中 Controller 节点的 IP 地址,则使用以下命令检查隔离服务的状态:
(undercloud)$ ssh heat-admin@192.168.0.47 "sudo pcs property show stonith-enabled"
运行以下命令可禁用隔离服务:
(undercloud)$ ssh heat-admin@192.168.0.47 "sudo pcs property set stonith-enabled=false"
检查 director 节点上的 Compute 服务是否活跃:
(undercloud)$ openstack hypervisor list
以上命令的输出应该显示所有没有处于维护模式的节点的状态为
up
。确保所有 undercloud 容器都在运行:
(undercloud)$ sudo podman ps
停止在故障 Controller 节点上运行的所有
nova
the 容器:[root@controller-0 ~]$ sudo systemctl stop tripleo_nova_api.service [root@controller-0 ~]$ sudo systemctl stop tripleo_nova_api_cron.service [root@controller-0 ~]$ sudo systemctl stop tripleo_nova_compute.service [root@controller-0 ~]$ sudo systemctl stop tripleo_nova_conductor.service [root@controller-0 ~]$ sudo systemctl stop tripleo_nova_metadata.service [root@controller-0 ~]$ sudo systemctl stop tripleo_nova_placement.service [root@controller-0 ~]$ sudo systemctl stop tripleo_nova_scheduler.service
可选:如果您使用 Bare Metal Service (ironic)作为 virt 驱动程序,您必须为您要删除的实例的任何裸机实例手动更新单元数据库中的服务条目。
联系红帽支持以获得帮助。
注意当使用 Bare Metal Service (ironic)作为 virt 驱动程序时,这个单元数据库手动更新是一个临时临时解决方案,以确保节点被重新平衡,直到 BZ2017980 完成为止。