Citrix Hypervisor

对群集池进行故障排除

使用 GFS2 对其共享块存储进行精简预配的 Citrix Hypervisor 池属于群集池。这些池的行为与使用基于文件的共享存储的池或带有共享块存储的 LVM 的池不同。因此,在 Citrix Hypervisor 群集池和 GFS2 环境中可能会出现一些特定问题。

请使用以下信息来解决使用此功能时可能会出现的小问题。

我的所有主机都可以 ping 通对方,但我无法创建群集。为什么?

群集机制使用特定的端口。如果您的主机无法在这些端口上通信(即使它们可以在其他端口上通信),则无法为池启用群集。

请确保池中的主机可以通过以下端口进行通信:

  • TCP:8892、8896、21064
  • UDP:5404、5405(非多播)

如果池中的两台主机之间存在任何防火墙或类似的对象,请确保这些端口处于打开状态。

如果您之前在池中配置了高可用性,请在启用群集之前禁用高可用性。

当我尝试将新主机加入到现有群集池中时,为什么会出现错误?

在池上启用了群集时,每次更改池成员身份都必须得到群集中每个成员的同意才能成功。如果群集成员不可访问, 更改群集成员身份的操作(例如添加主机或删除主机)将失败。

要将您的新主机添加到群集池中,请:

  1. 确保您的所有主机都联机并且可访问。

  2. 请确保池中的主机可以通过以下端口进行通信:

    • TCP:8892、8896、21064
    • UDP:5404、5405(非多播)
  3. 确保加入的主机在加入池的群集网络的 NIC 上分配了 IP 地址。

  4. 确保新主机尝试加入群集池时池中所有主机都未处于脱机状态。

  5. 如果无法恢复脱机主机,请将其标记为死机以将其从群集中删除。有关详细信息,请参阅我的群集池中的主机处于脱机状态,我无法恢复。我如何从我的群集中删除主机?

如果群集池的某些成员未自动加入群集,我该怎么做?

此问题可能是由群集池的成员失去同步引起的。

要重新同步群集池的成员,请使用以下命令:

xe cluster-pool-resync cluster-uuid=<cluster_uuid>

如果问题仍然存在,您可以尝试重新连接 GFS2 SR。可以使用 xe CLI 或者通过 XenCenter 来完成此任务。

使用 xe CLI 重新连接 GFS2 SR:

  1. 将 GFS2 SR 从池中分离。在每台主机上,运行 xe CLI 命令 xe pbd-unplug uuid=<uuid_of_pbd>

  2. 使用命令 xe cluster-pool-destroy cluster-uuid=<cluster_uuid> 禁用群集池

    如果前面的命令不成功,您可以通过在池中的每台主机上运行 xe cluster-host-force-destroy uuid=<cluster_host> 来强制禁用群集池。

  3. 使用命令 xe cluster-pool-create network-uuid=<network_uuid> [cluster-stack=cluster_stack] [token-timeout=token_timeout] [token-timeout-coefficient=token_timeout_coefficient] 重新启用群集池

  4. 通过在每台主机上运行命令 xe pbd-plug uuid=<uuid_of_pbd> 来重新连接 GFS2 SR。

或者,要使用 XenCenter 重新连接 GFS2 SR,请执行以下操作:

  1. 在池的存储选项卡中,右键单击 GFS2 SR 并选择分离…
  2. 在工具栏中,选择池 > 属性
  3. 群集选项卡中,取消选择启用群集
  4. 单击确定以应用您的更改。
  5. 在工具栏中,选择池 > 属性
  6. 群集选项卡中,选择启用群集,然后选择用于群集操作的网络。
  7. 单击确定以应用您的更改。
  8. 在池的存储选项卡中,右键单击 GFS2 SR 并选择修复

我如何知道我的主机是否已进行自主防护?

如果您的主机已进行自主防护,则在重新启动时可能已重新加入群集。要查看主机是否已进行自主防护和恢复,您可以检查 /var/opt/xapi-clusterd/boot-times 文件以查看主机的启动时间。如果文件中有您未预期看到的开始时间,则表示主机已进行自主防护。

为什么我的主机已脱机?我如何才能将其恢复?

主机脱机的原因可能有很多。主机可以恢复,也可以不恢复,具体取决于原因。

主机处于脱机状态的以下原因更为常见,可以通过恢复主机来解决:

  • 干净关闭
  • 强制关机
  • 临时电源故障
  • 重新启动

主机脱机的以下原因不太常见:

  • 主机硬件永久故障
  • 主机电源永久故障
  • 网络分区
  • 网络交换机故障

这些问题可以通过更换硬件或者将故障主机标记为死机来解决。

我的群集池中的主机处于脱机状态,我无法恢复。我如何从我的群集中删除主机?

您可以告知群集遗忘该主机。此操作会将主机从群集中永久删除,并且减少仲裁功能所需的实时主机数量。

要删除无法恢复的主机,请使用以下命令:

xe host-forget uuid=<host_uuid>

此命令会将主机从群集中永久删除,并且减少仲裁功能所需的实时主机数量。

注意:

如果主机未脱机,此命令可能会导致数据丢失。在继续执行命令之前,系统会要求您确认是否确定。

主机被标记为死机后,无法将其重新添加到群集中。必须在主机上全新安装 Citrix Hypervisor,才能将此主机重新添加到群集中。

我已经修复了一台标记为死机的主机。我如何将其重新添加到我的群集中?

无法将已标记为死机的 Citrix Hypervisor 主机重新添加到群集中。要将此系统重新添加到群集中,必须全新安装 XenServer。此全新安装在群集中显示为新主机。

如果我的群集不断失去仲裁功能,而其主机继续进行防护,我该怎么做?

如果群集中的一台或多台 Citrix Hypervisor 主机由于持续丢失和获得仲裁功能而进入防护循环,则可以使用 nocluster 内核命令行参数启动该主机。连接到主机的物理控制台或串行控制台,然后在 grub 中编辑引导参数。

示例:

/boot/grub/grub.cfg
menuentry 'XenServer' {
        search --label --set root root-oyftuj
        multiboot2 /boot/xen.gz dom0_mem=4096M,max:4096M watchdog ucode=scan dom0_max_vcpus=1-16 crashkernel=192M,below=4G console=vga vga=mode-0x0311
        module2 /boot/vmlinuz-4.4-xen root=LABEL=root-oyftuj ro nolvm hpet=disable xencons=hvc console=hvc0 console=tty0 quiet vga=785 splash plymouth.ignore-serial-consoles nocluster
        module2 /boot/initrd-4.4-xen.img
}
menuentry 'Citrix Hypervisor (Serial)' {
        search --label --set root root-oyftuj
        multiboot2 /boot/xen.gz com1=115200,8n1 console=com1,vga dom0_mem=4096M,max:4096M watchdog ucode=scan dom0_max_vcpus=1-16 crashkernel=192M,below=4G
        module2 /boot/vmlinuz-4.4-xen root=LABEL=root-oyftuj ro nolvm hpet=disable console=tty0 xencons=hvc console=hvc0 nocluster
        module2 /boot/initrd-4.4-xen.img
}
<!--NeedCopy-->

当池主服务器在群集池中重新启动时会发生什么?

在大多数情况下,池主服务器在群集池中关闭或重新启动时的行为与另一个池成员关闭或重新启动时的行为相同。

关闭或重新启动主机的方式会影响群集池的仲裁功能。有关仲裁功能的详细信息,请参阅仲裁

行为中的唯一区别取决于您的池中是否启用了高可用性:

  • 如果启用了高可用性,则会选择新的主服务器并维护常规服务。
  • 如果未启用高可用性,则池没有主服务器。在其余主机上运行的 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-->
    

收集用于调试的日志时,请从群集中的所有主机收集诊断信息。如果单个主机已进行自主防护,则群集中的其他主机更有可能获得有用的信息。

请收集群集池中的主机的完整服务器状态报告。有关详细信息,请参阅 Citrix Hypervisor 服务器状态报告

当我具有仲裁功能时,为什么我无法恢复我的群集池?

如果您的群集池中包含偶数台主机,则_实现_仲裁功能所需的主机数量比_保持_仲裁所需的主机数量多一台。有关仲裁功能的详细信息,请参阅仲裁

如果您位于偶数池中并且已经恢复了一半主机,则必须再恢复一台主机才能恢复群集。

为什么我在更改群集设置时看到“Invalid token”错误?

更新群集配置时,您可能会收到与无效令牌有关的以下错误消息:("[[\"InternalError\",\"Invalid token\"]]")

可以通过完成以下步骤来解决此问题:

  1. (可选)通过收集包含 xapi-clusterd 和系统日志的服务器状态报告来备份当前的群集配置。

  2. 使用 XenCenter 将 GFS2 SR 与群集池分离。

    在池的存储选项卡中,右键单击 GFS2 SR 并选择分离…

  3. 在群集中的任意主机上,运行以下命令以强制销毁群集:

    xe cluster-pool-force-destroy cluster-uuid=<uuid>
    
  4. 使用 XenCenter 在池中重新启用群集。

    1. 在工具栏中,选择池 > 属性
    2. 群集选项卡中,选择启用群集,然后选择用于群集操作的网络。
    3. 单击确定应用您的更改
  5. 使用 XenCenter 将 GFS2 SR 重新连接到池

    在池的存储选项卡中,右键单击 GFS2 SR 并选择修复