故障排除 GFS2 集群池
使用 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 和系统日志的服务器状态报告来备份当前集群配置。
-
使用 XenCenter 从集群池中分离 GFS2 SR。
在池的存储选项卡中,右键单击 GFS2 SR 并选择分离…。
-
在集群中的任何主机上,运行此命令以强制销毁集群:
xe cluster-pool-force-destroy cluster-uuid=<uuid> -
使用 XenCenter 在您的池上重新启用集群。
- 从工具栏中,选择池 > 属性。
- 在集群选项卡中,选择启用集群并选择用于集群的网络。
- 点击 确定 以应用您的更改
-
使用 XenCenter 将 GFS2 SR 重新附加到池
在池的 存储 选项卡中,右键单击 GFS2 SR 并选择 修复。
在本文中
- 我的所有主机都可以相互 ping 通,但我无法创建集群。为什么?
- 当我尝试将新主机加入现有集群池时,为什么我会收到错误?
- 如果集群池中的某些成员未自动加入集群,我该怎么办?
- 如何判断我的主机是否已自我隔离?
- 主机脱机原因及恢复方法?
- 集群池中脱机主机无法恢复:如何移除?
- 我已修复一台被标记为“死机”的主机。如何将其重新添加到我的群集中?
- 如果我的群集持续失去仲裁并且其主机持续隔离,我该怎么办?
- 当群集池中的池协调器重新启动时会发生什么?
- 群集池中的主机被强制关闭后,我的池为何消失?
- 为什么群集池中的所有主机同时重新启动?
- 为什么在拥有仲裁时无法恢复我的集群池?
- 更改集群设置时,为什么会看到 Invalid token 错误?