第 20 章 替换 Controller 节点
在一些情况下,高可用性集群中的 Controller 节点可能会出现故障。在这种情况下,您需要把这个节点从集群中删除,并替换为一个新的 Controller 节点。
完成本节中的步骤来替换 Controller 节点。在 Controller 节点替换过程中,需要运行 openstack overcloud deploy
命令,以使用替换 Controller 节点的请求来更新 overcloud。
以下操作过程仅适用于高可用性环境。在只使用一个 Controller 节点的情况下不要使用此过程。
20.1. 准备替换 Controller 节点
在替换 overcloud 控制器节点前,务必要检查Red Hat OpenStack Platform 环境的当前状态;此检查有助于避免在替换控制器节点的过程中出现混乱。使用以下初步检查列表,确定是否可以安全地执行 Controller 节点替换。在 undercloud 上对这些检查运行所有命令。
步骤
在 undercloud 中检查
overcloud
栈的当前状态:$ source stackrc $ openstack overcloud status
只有
overcloud
堆栈具有DEPLOY_SUCCESS
的部署状态时,才继续。安装数据库客户端工具:
$ sudo dnf -y install mariadb
配置数据库的 root 用户访问权限:
$ sudo cp /var/lib/config-data/puppet-generated/mysql/root/.my.cnf /root/.
对 undercloud 数据库进行备份:
$ mkdir /home/stack/backup $ sudo mysqldump --all-databases --quick --single-transaction | gzip > /home/stack/backup/dump_db_undercloud.sql.gz
检查您的 undercloud 是否包含 10 GB 可用存储,可在置备新节点时容纳镜像缓存和转换:
$ df -h
如果您要为新 Controller 节点重复使用 IP 地址,请确保删除旧 Controller 使用的端口:
$ openstack port delete <port>
在运行的 Controller 节点上检查 Pacemaker 的状态。例如,运行的 Controller 节点的 IP 地址是 192.168.0.47,使用以下命令查看 Pacemaker 的状态:
$ ssh tripleo-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:
$ for i in 192.168.0.46 192.168.0.47 ; do echo "*** $i ***" ; ssh tripleo-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 的状态:
$ ssh tripleo-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 地址,则使用以下命令检查隔离服务的状态:
$ ssh tripleo-admin@192.168.0.47 "sudo pcs property show stonith-enabled"
运行以下命令可禁用隔离服务:
$ ssh tripleo-admin@192.168.0.47 "sudo pcs property set stonith-enabled=false"
登录到失败的 Controller 节点,并停止所有正在运行的
nova
the 容器:$ sudo systemctl stop tripleo_nova_api.service $ sudo systemctl stop tripleo_nova_api_cron.service $ sudo systemctl stop tripleo_nova_compute.service $ sudo systemctl stop tripleo_nova_conductor.service $ sudo systemctl stop tripleo_nova_metadata.service $ sudo systemctl stop tripleo_nova_placement.service $ sudo systemctl stop tripleo_nova_scheduler.service
可选:如果您使用 Bare Metal Service (ironic)作为 virt 驱动程序,您必须为您要删除的实例的任何裸机实例手动更新单元数据库中的服务条目。
联系红帽支持以获得帮助。
注意当使用 Bare Metal Service (ironic)作为 virt 驱动程序时,这个单元数据库手动更新是一个临时临时解决方案,以确保节点被重新平衡,直到 BZ2017980 完成为止。