排查集群池故障
使用 GFS2 精简预配其共享块存储的 XenServer® 池是集群化的。这些池与使用共享文件存储或 LVM 共享块存储的池行为不同。因此,在 XenServer 集群池和 GFS2 环境中可能会出现一些特定问题。
使用以下信息排查使用此功能时可能出现的小问题。
我的所有主机都可以相互 ping 通,但我无法创建集群。为什么?
集群机制使用特定端口。如果您的主机无法在这些端口上通信(即使它们可以在其他端口上通信),您也无法为池启用集群。
确保池中的主机可以在以下端口上通信:
- TCP: 8892, 8896, 21064
- UDP: 5404, 5405 (非多播)
如果池中的主机之间有任何防火墙或类似设备,请确保这些端口已打开。
如果您之前在池中配置了 HA,请在启用集群之前禁用 HA。
当我尝试将新主机加入现有集群池时,为什么会收到错误?
当池上启用集群时,每次池成员资格更改都必须得到集群中每个成员的同意才能成功。如果集群成员无法联系,更改集群成员资格的操作(例如添加主机或删除主机)将失败。
要将新主机添加到集群池:
-
确保您的所有主机都处于联机状态且可联系。
-
确保池中的主机可以在以下端口上通信:
- TCP: 8892, 8896, 21064
- UDP: 5404, 5405 (非多播)
-
确保加入的主机在连接池集群网络的网卡上分配了 IP 地址。
-
确保集群没有在池中使用非管理 VLAN 网络。
-
确保当新主机尝试加入集群池时,池中没有主机处于离线状态。
-
如果离线主机无法恢复,请将其标记为死机以将其从集群中移除。有关更多信息,请参阅我的集群池中的主机处于离线状态且无法恢复。如何从集群中移除主机?
如果集群池中的某些成员未自动加入集群,我该怎么办?
此问题可能是由于集群池成员失去同步造成的。
要重新同步集群池的成员,请使用以下命令:
xe cluster-pool-resync cluster-uuid=<cluster_uuid>
如果问题仍然存在,您可以尝试重新附加 GFS2 SR。您可以通过 xe CLI 或 XenCenter 执行此任务。
使用 xe CLI 重新附加 GFS2 SR:
-
从池中分离 GFS2 SR。在每个主机上,运行 xe CLI 命令
xe pbd-unplug uuid=<uuid_of_pbd>。 -
使用命令
xe cluster-pool-destroy cluster-uuid=<cluster_uuid>禁用集群池如果上述命令不成功,您可以通过在池中的每个主机上运行
xe cluster-host-force-destroy uuid=<cluster_host>来强制禁用集群池。 -
使用命令
xe cluster-pool-create network-uuid=<network_uuid> [cluster-stack=cluster_stack] [token-timeout=token_timeout] [token-timeout-coefficient=token_timeout_coefficient]再次启用集群池 -
通过在每个主机上运行命令
xe pbd-plug uuid=<uuid_of_pbd>来重新连接 GFS2 SR。
或者,要使用 XenCenter 重新连接 GFS2 SR,请执行以下操作:
- 在池的 存储 选项卡中,右键单击 GFS2 SR 并选择 分离…。
- 从工具栏中,选择 池 > 属性。
- 在 群集 选项卡中,取消选择 启用群集。
- 单击 确定 以应用更改。
- 从工具栏中,选择 池 > 属性。
- 在 群集 选项卡中,选择 启用群集 并选择用于群集的网络。
- 单击 确定 以应用更改。
- 在池的 存储 选项卡中,右键单击 GFS2 SR 并选择 修复。
如何判断我的主机是否已自我隔离?
如果您的主机已自我隔离,它可能在重新启动时重新加入了群集。要查看主机是否已自我隔离并恢复,您可以检查 /var/opt/xapi-clusterd/boot-times 文件,以查看主机启动的时间。如果文件中存在您不希望看到的启动时间,则主机已自我隔离。
为什么我的主机处于脱机状态?如何恢复它?
主机脱机的原因有很多。根据原因,主机可能可以恢复,也可能无法恢复。
以下是主机脱机的一些常见原因,可以通过恢复主机来解决:
- 干净关机
- 强制关机
- 临时电源故障
- 重启
主机脱机的以下原因不太常见:
- 永久性主机硬件故障
- 永久性主机电源故障
- 网络分区
- 网络交换机故障
可以通过更换硬件或将故障主机标记为已死亡来解决这些问题。
我的集群池中的一台主机处于脱机状态,我无法恢复它。如何将主机从集群中移除?
您可以告诉集群忘记该主机。此操作将永久从集群中移除该主机,并减少仲裁所需的活动主机数量。
要移除无法恢复的主机,请使用以下命令:
xe host-forget uuid=<host_uuid>
此命令将永久从集群中移除该主机,并减少仲裁所需的活动主机数量。
注意:
如果主机未离线,此命令可能会导致数据丢失。在继续执行此命令之前,系统会要求您确认。
主机被遗忘后,无法将其重新添加到群集中。要将此主机重新添加到群集中,您必须在该主机上全新安装 XenServer。
我已修复一台被标记为“已死亡”的主机。如何将其重新添加到我的群集中?
已标记为“已死亡”的 XenServer 主机无法重新添加到群集中。要将此系统重新添加到群集中,您必须全新安装 XenServer。此全新安装在群集中显示为新主机。
如果我的群集持续失去仲裁并且其主机持续进行隔离,我该怎么办?
如果群集中的一个或多个 XenServer 主机由于持续失去仲裁而进入隔离循环,您可以使用 nocluster dom0 命令行参数启动主机。连接到主机的物理或串行控制台,并在 dom0 命令行中运行以下命令:/opt/xensource/libexec/xen-cmdline --set-dom0 nocluster。下次主机重新启动时,它不会尝试加入群集。
诊断并解决主机问题后,可以通过删除 nocluster 参数来启用群集。为此,请运行以下命令:/opt/xensource/libexec/xen-cmdline --remove-dom0 nocluster。重新启动主机以使更改生效。
有关通过串行控制台访问主机和编辑 Xen 命令行的更多信息,请参阅高级故障排除。
当群集池中的池协调器重新启动时会发生什么?
在大多数情况下,群集池中池协调器关闭或重新启动时的行为与另一个池成员关闭或重新启动时的行为相同。
主机关闭或重新启动的方式会影响群集池的仲裁。有关仲裁的更多信息,请参阅仲裁。
行为的唯一区别取决于您的池中是否启用了 HA:
- 如果启用了 HA,则会选择新的协调器并维护常规服务。
- 如果未启用 HA,则池中没有协调器。剩余主机上运行的 VM 将继续运行。在协调器重新启动之前,大多数管理操作都不可用。
群集池中的主机被强制关闭后,我的池为何消失了?
如果您正常关闭主机(而非强制关闭),它将暂时从仲裁计算中移除,直到重新开启。但是,如果您强制关闭主机或主机断电,该主机仍会计入仲裁计算。例如,如果您有一个包含 3 台主机的池,并强制关闭了其中 2 台,则剩余的主机将进行隔离,因为它不再拥有仲裁。
尝试始终干净地关闭集群池中的主机。有关更多信息,请参阅管理您的集群池。
为什么集群池中的所有主机同时重启?
当池中可联系的主机数量少于以下值时,活动集群中的所有主机都被视为已失去仲裁:
- 对于主机数量为偶数的池:n/2
- 对于主机数量为奇数的池:(n+1)/2
字母 n 表示集群池中的主机总数。有关仲裁的更多信息,请参阅仲裁。
在这种情况下,所有主机都会进行自我隔离,您会看到所有主机都在重启。
要诊断池失去仲裁的原因,以下信息可能会有所帮助:
- 在 XenCenter 中,检查通知部分,查看问题发生时是否发生了自我隔离。
- 在集群主机上,检查
/var/opt/xapi-clusterd/boot-times以查看是否在意外时间发生了重启。 - 在
Crit.log中,检查是否输出了任何自我隔离消息。 -
查看
dlm_tool status命令输出以获取隔离信息。示例
dlm_tool status输出:dlm_tool status cluster nodeid 1 quorate 1 ring seq 8 8 daemon now 4281 fence_pid 0 node 1 M add 3063 rem 0 fail 0 fence 0 at 0 0 node 2 M add 3066 rem 0 fail 0 fence 0 at 0 0 <!--NeedCopy-->
收集用于调试的日志时,请从集群中的所有主机收集诊断信息。如果单个主机已进行自我隔离,则集群中的其他主机更有可能包含有用的信息。
收集集群池中主机的完整服务器状态报告。有关详细信息,请参阅XenServer 服务器状态报告。
为什么在拥有仲裁时无法恢复集群池?
If you have a clustered pool with an even number of hosts, the number of hosts required to achieve quorum is one more than the number of hosts required to retain quorum. For more information about quorum, see Quorum.
如果您处于偶数池中并已恢复一半主机,则必须再恢复一台主机才能恢复集群。
您可以通过运行以下命令来检查集群是否具有仲裁:
xe cluster-list params=is-quorate uuid=<cluster_id>
更改集群设置时,为什么会看到 Invalid token 错误?
更新集群配置时,您可能会收到有关无效令牌 ("[[\"InternalError\",\"Invalid token\"]]") 的以下错误消息。
您可以通过完成以下步骤解决此问题:
-
(可选) 通过收集包含 xapi-clusterd 和 system logs 的服务器状态报告来备份当前集群配置。
-
使用 XenCenter 从集群池中分离 GFS2 SR。
在池的“存储”选项卡中,右键单击 GFS2 SR 并选择“分离…”。
-
在集群中的任何主机上,运行此命令以强制销毁集群:
xe cluster-pool-force-destroy cluster-uuid=<uuid> -
使用 XenCenter 重新启用池上的集群功能。
- 从工具栏中,选择“池 > 属性”。
- 在“集群”选项卡中,选择“启用集群”并选择用于集群的网络。
- 点击 确定 以应用您的更改
-
使用 XenCenter 将 GFS2 SR 重新连接到池
在池的存储选项卡中,右键单击 GFS2 SR 并选择修复。
在本文中
- 我的所有主机都可以相互 ping 通,但我无法创建集群。为什么?
- 当我尝试将新主机加入现有集群池时,为什么会收到错误?
- 如果集群池中的某些成员未自动加入集群,我该怎么办?
- 如何判断我的主机是否已自我隔离?
- 为什么我的主机处于脱机状态?如何恢复它?
- 我的集群池中的一台主机处于脱机状态,我无法恢复它。如何将主机从集群中移除?
- 我已修复一台被标记为“已死亡”的主机。如何将其重新添加到我的群集中?
- 如果我的群集持续失去仲裁并且其主机持续进行隔离,我该怎么办?
- 当群集池中的池协调器重新启动时会发生什么?
- 群集池中的主机被强制关闭后,我的池为何消失了?
- 为什么集群池中的所有主机同时重启?
- 为什么在拥有仲裁时无法恢复集群池?
- 更改集群设置时,为什么会看到 Invalid token 错误?