第 11 章 替换 Controller 节点
在一些情况下,高可用性集群中的 Controller 节点可能会出现故障。在这种情况下,您需要把这个节点从集群中删除,并替换为一个新的 Controller 节点。
完成本节中的步骤来替换 Controller 节点。在 Controller 节点替换过程中,需要运行 openstack overcloud deploy
命令,以使用替换 Controller 节点的请求来更新 overcloud。
以下操作过程仅适用于高可用性环境。在只使用一个 Controller 节点的情况下不要使用此过程。
11.1. 准备替换 Controller 节点 复制链接链接已复制到粘贴板!
在替换 overcloud 控制器节点前,务必要检查Red Hat OpenStack Platform 环境的当前状态;此检查有助于避免在替换控制器节点的过程中出现混乱。使用以下初步检查列表,确定是否可以安全地执行 Controller 节点替换。在 undercloud 上对这些检查运行所有命令。
步骤
在 undercloud 中检查
overcloud
栈的当前状态:source stackrc openstack overcloud status
$ source stackrc $ openstack overcloud status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 只有
overcloud
堆栈的部署状态为DEPLOY_SUCCESS
时才继续。安装数据库客户端工具:
sudo dnf -y install mariadb
$ sudo dnf -y install mariadb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置数据库的 root 用户访问权限:
sudo cp /var/lib/config-data/puppet-generated/mysql/root/.my.cnf /root/.
$ sudo cp /var/lib/config-data/puppet-generated/mysql/root/.my.cnf /root/.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对 undercloud 数据库进行备份:
mkdir /home/stack/backup sudo mysqldump --all-databases --quick --single-transaction | gzip > /home/stack/backup/dump_db_undercloud.sql.gz
$ mkdir /home/stack/backup $ sudo mysqldump --all-databases --quick --single-transaction | gzip > /home/stack/backup/dump_db_undercloud.sql.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查您的 undercloud 是否包含 10 GB 可用存储,可在置备新节点时容纳镜像缓存和转换:
df -h
$ df -h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您要为新 Controller 节点重复使用 IP 地址,请确保删除旧 Controller 使用的端口:
openstack port delete <port>
$ openstack port delete <port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在运行的 Controller 节点上检查 Pacemaker 的状态。例如,运行的 Controller 节点的 IP 地址是 192.168.0.47,使用以下命令查看 Pacemaker 的状态:
ssh tripleo-admin@192.168.0.47 'sudo pcs status'
$ ssh tripleo-admin@192.168.0.47 'sudo pcs status'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示了在现有节点上运行的所有服务,以及在故障节点上停止的服务。
检查 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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
检查 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"
$ ssh tripleo-admin@192.168.0.47 "sudo podman exec \$(sudo podman ps -f name=rabbitmq-bundle -q) rabbitmqctl cluster_status"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 show stonith-enabled"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令可禁用隔离服务:
ssh tripleo-admin@192.168.0.47 "sudo pcs property set stonith-enabled=false"
$ ssh tripleo-admin@192.168.0.47 "sudo pcs property set stonith-enabled=false"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 登录到失败的 Controller 节点,并停止运行的所有
nova
zFCP 容器:sudo systemctl stop tripleo_nova_api.service sudo systemctl stop tripleo_nova_api_cron.service sudo systemctl stop tripleo_nova_conductor.service sudo systemctl stop tripleo_nova_metadata.service sudo systemctl stop tripleo_nova_scheduler.service
$ sudo systemctl stop tripleo_nova_api.service $ sudo systemctl stop tripleo_nova_api_cron.service $ sudo systemctl stop tripleo_nova_conductor.service $ sudo systemctl stop tripleo_nova_metadata.service $ sudo systemctl stop tripleo_nova_scheduler.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您使用 Bare Metal Service (ironic)作为 virt 驱动程序,则必须在替换 Controller 节点时重复使用主机名。重复使用主机名可防止 Compute 服务(nova)数据库被破坏,并防止在重新部署裸机置备服务时重新平衡工作负载。