第 17 章 替换 Controller 节点

在一些情况下,高可用性集群中的 Controller 节点可能会出现故障。在这种情况下,您需要把这个节点从集群中删除,并替换为一个新的 Controller 节点。

完成本节中的步骤来替换 Controller 节点。在 Controller 节点替换过程中,需要运行 openstack overcloud deploy 命令,以使用替换 Controller 节点的请求来更新 overcloud。

重要

以下操作过程仅适用于高可用性环境。在只使用一个 Controller 节点的情况下不要使用此过程。

17.1. 准备替换 Controller 节点

在替换 overcloud 控制器节点前,务必要检查Red Hat OpenStack Platform 环境的当前状态;此检查有助于避免在替换控制器节点的过程中出现混乱。使用以下初步检查列表,确定是否可以安全地执行 Controller 节点替换。在 undercloud 上对这些检查运行所有命令。

步骤

  1. 在 undercloud 中检查 overcloud 栈的当前状态:

    $ source stackrc
    (undercloud) $ openstack stack list --nested

    overcloud 栈以及它们的子栈的状态需要是 CREATE_COMPLETEUPDATE_COMPLETE

  2. 安装数据库客户端工具:

    (undercloud) $ sudo dnf -y install mariadb
  3. 配置数据库的 root 用户访问权限:

    (undercloud) $ sudo cp /var/lib/config-data/puppet-generated/mysql/root/.my.cnf /root/.
  4. 对 undercloud 数据库进行备份:

    (undercloud) $ mkdir /home/stack/backup
    (undercloud) $ sudo mysqldump --all-databases --quick --single-transaction | gzip > /home/stack/backup/dump_db_undercloud.sql.gz
  5. 检查您的 undercloud 是否包含 10 GB 可用存储,可在置备新节点时容纳镜像缓存和转换:

    (undercloud) $ df -h
  6. 在运行的 Controller 节点上检查 Pacemaker 的状态。例如,运行的 Controller 节点的 IP 地址是 192.168.0.47,使用以下命令查看 Pacemaker 的状态:

    (undercloud) $ ssh heat-admin@192.168.0.47 'sudo pcs status'

    输出显示所有在现有节点上运行且在故障节点上停止的服务。

  7. 检查 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.24.6 192.168.24.7 ; 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
  8. 检查 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 应该只显示两个可用的节点,而不会显示有故障的节点。

  9. 如果您以前使用 Open Virtual Switch (OVS) 并在不重启 OVS 代理的情况下替换了 Controller 节点,请在替换此 Controller 之前重启 compute 节点上的代理。重启 OVS 代理可确保其有完整的 RabbitMQ 连接。

    运行以下命令以重启 OVS 代理:

    [heat-admin@overcloud-compute-0 ~]$ sudo systemctl restart tripleo_neutron_ovs_agent
  10. 如果启用了隔离服务,则将其禁用。例如,如果 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"
  11. 检查 director 节点上的 Compute 服务是否活跃:

    (undercloud) $ openstack hypervisor list

    以上命令的输出应该显示所有没有处于维护模式的节点的状态为 up

  12. 确保所有 undercloud 容器都在运行:

    (undercloud) $ sudo podman ps