配置高可用性功能

高可用性功能是一组设计用于为导致 XenServer 主机出现故障或使其无法访问的问题做出规划以及从这些问题中安全恢复的自动功能。例如,在网络连接发生物理损坏或出现主机硬件故障时。

概述

高可用性功能可确保当主机变得无法访问或不稳定时,关闭该主机上运行的 VM 并在另一台主机上重新启动。关闭并在另一台主机上重新启动 VM 可避免在新主机上(手动或自动)启动 VM。在稍后的某个时间,将恢复原始主机。这种情况可能会导致同一 VM 的两个实例在不同的主机上运行,并且 VM 磁盘损坏和数据丢失的可能性相对较高。

在池主服务器变得无法访问或不稳定时,高可用性功能还可以恢复池的管理控制能力。高可用功能呢可确保自动恢复管理控制能力,不需要任何手动干预。

(可选)高可用性功能还可以实现在已知处于良好状态的主机上自动重新启动 VM,而无需手动干预的过程。可以安排这些 VM 成组重新启动,以留出启动服务的时间。它允许在其从属 VM 之前启动基础结构 VM(例如,在其从属 SQL Server 之前启动的 DHCP 服务器)。

警告:

高可用性功能可以与多路径存储和绑定的网络连接结合使用。请先配置多路径存储和绑定的网络连接,然后再尝试设置高可用性功能。当基础结构不稳定时,未设置多路径网络连接和存储的客户可能会看到意外的主机重新启动行为(自主防护)。

注意:

可以在利用高可用性功能的环境中使用所有图形解决方案(NVidia vGPU、Intel GVT-d、Intel GVT-G、AMD MxGPU 和 vGPU 直通)。但是,不能通过高可用性功能保护使用这些图形解决方案的 VM。存在具有恰当的可用资源的主机时,可以在最大努力的基础上重新启动这些 VM。

使用过量

在其他位置发生用户定义次数的主机故障后,如果无法重新启动当前正在运行的 VM,则池会被过度使用。

如果在发生故障后池中没有足够的可用内存来运行这些 VM,则可能会发生过度使用的情况。但是,还存在一些可能会导致高可用性功能保证无法持续使用的更细微变化:对虚拟块设备 (VBD) 和网络所做的更改会影响哪些 VM 可以在哪些主机上重新启动。XenServer 无法检查所有潜在的操作并确定它们是否会导致违背高可用性功能需求。但是,如果高可用性功能变得无法持续使用,系统将发送异步通知。

XenServer 会动态维护故障转移方案,该方案详细说明了如果池中的一组主机在任意给定时间发生故障时应执行的操作。您需要了解的一个重要概念是允许的主机故障数值,该值被定义为高可用性功能配置的一部分。允许的主机故障数值确定在不中断任何服务的情况下所允许的故障数。例如,对于包含 64 个主机的资源池,允许的故障数将设置为 3。在这种情况下,池将计算允许任何三个主机发生故障的故障转移方案并在另一个主机上重新启动 VM。如果找不到方案,该池将被视为过度使用。方案根据 VM 生命周期操作和移动动态地进行重新计算。如果所做的更改(例如,将新 VM 添加到池中)导致池被过度使用,则会发送警报(通过 XenCenter 或电子邮件)。

过度使用警告

如果对启动或恢复 VM 的任何尝试会导致池被过度使用,则会显示警告警报。此警告将显示在 XenCenter 中,还可以作为消息实例通过 Xen API 提供。如果您已配置某个电子邮件地址,则还可能向该电子邮件地址发送一条消息。然后,可以取消此操作,或继续操作。继续操作会导致池被过度使用。不同优先级的 VM 所使用的内存量将在池和主机级别显示。

主机防护

有时,服务器会由于网络连接中断或遇到控制堆栈问题而发生故障。在这些情况下,XenServer 主机会进行自主防护以确保 VM 不会同时在两个服务器上运行。采取防护措施后,服务器会突然立即重新启动,导致其上运行的所有 VM 都停止。其他服务器会检测到 VM 不再运行,而这些 VM 将根据分配给它们的重新启动优先级进行重新启动。受防护的服务器将进入重新引导序列,并在重新启动后尝试重新加入资源池。

注意:

当群集池中的主机无法与资源池中超过一半以上的其他主机进行通信时,这些主机也会进行自主防护。有关详细信息,请参阅群集池

配置要求

注意:

Citrix 建议您仅对至少包含三个 XenServer 主机的池启用高可用性功能。有关详细信息,请参阅 CTX129721 - High Availability Behavior When the Heartbeat is Lost in a XenServer Pool(CTX129721 - XenServer 池中的检测信号丢失时的高可用性行为)。

要使用高可用性功能,您需要:

  • 共享存储,其中包含至少一个大小为 356 MB 或更大的 iSCSI、NFS 或光纤通道 LUN - 检测信号 SR。高可用性功能机制将在检测信号 SR 中创建两个卷:

    4 MB 检测信号卷:用于检测信号。

    256 MB 元数据卷:用于存储进行主服务器故障转移时要使用的池主服务器元数据。

    注意:

    • 为了最大程度地提高可靠性,Citrix 强烈建议您使用专用的 NFS 或 iSCSI 存储库作为高可用性功能检测信号磁盘。请勿将此存储库用于任何其他用途。
    • 如果池是群集池,则检测信号 SR 必须是 GFS2 SR。
    • 通过 CHAP 进行身份验证时使用 SMB 或 iSCSI 附加的存储不能用作检测信号 SR。
    • 使用 NetApp 或 EqualLogic SR 时,请在阵列上手动预配 NFS 或 iSCSI LUN 以用作检测信号 SR。
  • XenServer 池。此功能提供单一资源池内服务器级别的高可用性。

  • 所有主机的静态 IP 地址。

警告:

如果服务器的 IP 地址在启用了高可用性功能时发生更改,则高可用性功能假定主机的网络发生故障。IP 地址发生更改会导致主机受防护并使其处于无法启动的状态。要对此情况进行补救,请使用 host-emergency-ha-disable 命令禁用高可用性功能,使用 pool-emergency-reset-master 重置池主服务器,然后重新启用高可用性功能。

对于受高可用性功能保护的 VM,该 VM 必须灵活。这意味着,VM:

  • 必须在共享存储上具有虚拟磁盘。您可以使用任何类型的共享存储。iSCSI、NFS 或光纤通道 LUN 仅是存储检测信号所需的,并且可以用于虚拟磁盘存储。

  • 可以使用 XenMotion

  • 不能连接到配置的本地 DVD 驱动器

  • 在池级别的网络上具有自己的虚拟网络接口

如果启用了高可用性功能,Citrix 强烈建议在池中的服务器上使用绑定的管理接口,并为检测信号 SR 使用多路径存储。

如果您从 CLI 创建 VLAN 和绑定的接口,则即使已创建,也可能不插入和激活它们。在这种情况下,VM 可能显得不够灵活,无法受高可用性功能保护。您可以使用 CLI pif-plug 命令调用 VLAN 和绑定 PIF,以使 VM 变得灵活。您还可以使用 xe diagnostic-vm-status CLI 命令精确确定 VM 不灵活的原因。此命令可分析及其放置约束,并且您可以在需要时采取补救措施。

重新启动配置设置

可以将虚拟机视为受高可用性功能保护、最大努力或不受高可用性功能保护。ha-restart-priority 的值定义将 VM 视为受保护、最大努力还是不受保护。其中每个类别中的 VM 的重新启动行为各不相同。

受保护

高可用性功能可保证重新启动进入脱机状态或者其主机进入脱机状态的受保护 VM,前提是池未被过度使用并且 VM 非常灵活。

如果在服务器出现故障时无法重新启动受保护的 VM,高可用性功能将在池中有额外的容量时尝试启动该 VM。在有额外的容量时尝试启动该 VM 现在可能会成功。

ha-restart-priority值:restart

最大努力

如果某个最大努力 VM 的主机进入脱机状态,高可用性功能会尝试在另一个主机上重新启动该最大努力 VM。仅当成功重新启动所有受保护的 VM 后才能进行此尝试。高可用性功能只会尝试重新启动最大努力 VM 一次。如果本次尝试失败,高可用性功能将不会进一步尝试重新启动该 VM。

ha-restart-priority值:best-effort

不受保护

如果不受保护的 VM 或运行它的主机停止运行,高可用性功能将不尝试重新启动该 VM。

ha-restart-priority 值:值为空字符串

注意:

高可用性功能从不停止或迁移正在运行的 VM 以便为要重新启动的受保护 VM 或最大努力 VM 释放资源。

如果池遇到服务器故障并且允许的故障数降为零,将不再保证重新启动受保护的 VM。在这种情况下,将生成系统警报。如果发生其他故障,所有设置了重新启动优先级的 VM 将根据最大努力行为运行。

启动顺序

启动顺序是指出现故障时 XenServer 高可用性功能尝试重新启动受保护的 VM 的顺序。启动顺序由每个受保护的 VM 的 order 属性的值决定。

VM 的 order 属性由高可用性功能使用,还由用于启动和关闭 VM 的其他功能使用。任何 VM 都可以设置 order 属性,而不仅仅是标记为受高可用性功能保护的 VM。但是,高可用性功能仅使用受保护的 VM 的 order 属性。

order 属性的值为整数。默认值为 0,表示最高优先级。高可用性功能首先重新启动 order 值为 0 的受保护 VM。order 属性的值越大,重新启动 VM 的顺序越靠后。

可以使用命令行界面设置 VM 的 order 属性的值:

xe vm-param-set uuid=VM_UUID order=int

或者,在 XenCenter 中,在 VM 的“启动选项”面板中,将“启动顺序”设置为所需的值。

对 XenServer 池启用高可用性功能

可以使用 XenCenter 或命令行接口对池启用高可用性功能。无论使用哪种方法,都需要指定一组优先级,用来确定当池被过度使用时赋予哪些 VM 最高重新启动优先级。

警告:

  • 启用高可用性功能后,某些影响 VM 重新启动方案的操作(例如从池中删除服务器)可能会被禁用。您可以暂时禁用高可用性功能以执行此类操作,或者将受高可用性功能保护的 VM 设为不受保护。

  • 如果启用了高可用性功能,则无法对池启用群集。暂时禁用高可用性功能以启用群集。您可以对群集池启用高可用性功能。对于群集池,某些高可用性功能的行为(例如自主防护)有所不同。有关详细信息,请参阅群集池

使用 CLI 启用高可用性功能

  1. 确认已将兼容的存储库 (SR) 连接到池。iSCSI、NFS 或光纤通道 SR 都是兼容的 SR。有关如何使用 CLI 配置此类存储库的信息,请参阅管理存储库

  2. 对每台要保护的 VM 设置重新启动优先级和启动顺序。可以按如下所示设置重新启动优先级:

    xe vm-param-set uuid=vm_uuid ha-restart-priority=restart order=1
    
  3. 对池启用高可用性功能,并(可选)指定超时:

    xe pool-ha-enable heartbeat-sr-uuids=sr_uuid ha-config:timeout=timeout in seconds
    

    超时是指网络连接或存储不能被池中的主机访问的期限。如果在启用高可用性功能时未指定超时,XenServer 将使用默认 30 秒超时。如果任何 XenServer 主机在超时期限内都无法访问网络连接或存储,则将进行自主防护并重新启动。

  4. 运行命令 pool-ha-compute-max-host-failures-to-tolerate。此命令返回允许的故障主机最大数目,超过此数目,资源将不足以运行池中所有受保护的 VM。

    xe pool-ha-compute-max-host-failures-to-tolerate
    

    允许的故障数决定何时发送警报。系统将在池的状态发生更改时重新计算故障转移方案。使用此计算可以确定池容量,以及在不失去对受保护 VM 的有效保证情况下还可以发生的故障数。当计算的值低于为 ha-host-failures-to-tolerate 指定的值时,将生成系统警报。

  5. 为允许故障数参数指定一个数目。该值必须小于或等于计算的值:

    xe pool-param-set ha-host-failures-to-tolerate=2 uuid=pool-uuid
    

使用 CLI 从 VM 中删除高可用性功能保护

要对 VM 禁用高可用性功能,请使用 xe vm-param-set 命令将 ha-restart-priority 参数设置为空字符串。设置 ha-restart-priority 参数不会清除启动顺序设置。可以根据情况将 ha-restart-priority 参数设置为 restartbest-effort,以再次对 VM 启用高可用性功能。

恢复无法访问的主机

如果由于某些原因,主机无法访问高可用性功能的状态文件,则主机可能变为无法访问。要恢复 XenServer 安装,可能需要使用 host-emergency-ha-disable 命令禁用高可用性功能:

xe host-emergency-ha-disable --force

如果主机是池主服务器,它会在禁用高可用性功能的情况下照常启动。池成员将重新连接并自动禁用高可用性功能。如果主机是池成员,并且无法连接主服务器,则可能需要执行以下操作之一:

  • 强制主机以池主服务器身份重新启动 (xe pool-emergency-transition-to-master)

    xe pool-emergency-transition-to-master uuid=host_uuid
    
  • 告知主机新的主服务器的位置 (xe pool-emergency-reset-master):

    xe pool-emergency-reset-master master-address=new_master_hostname
    

成功重新启动所有主机后,重新启用高可用性功能:

xe pool-ha-enable heartbeat-sr-uuid=sr_uuid

在启用高可用性功能的情况下关闭主机

关闭或重新启动主机时应特别注意,以防止高可用性功能机制假定主机已发生故障。要在启用高可用性功能的情况下彻底关闭主机,请通过使用 XenCenter 或 CLI disable主机、evacuate主机,最后shutdown主机。要在启用了高可用性功能的环境中关闭主机,请运行以下命令:

xe host-disable host=host_name
xe host-evacuate uuid=host_uuid
xe host-shutdown host=host_name

关闭受高可用性功能保护的 VM

如果 VM 受高可用性功能方案保护并设置为自动重新启动,则无法在此保护处于活动状态时关闭该 VM。要关闭 VM,请首先禁用其高可用性功能保护,然后执行 CLI 命令。选择受保护 VM 的关闭按钮时,XenCenter 将显示一个用于自动禁用该保护的对话框。

注意:

如果关闭来宾系统内的某个 VM,并且该 VM 受到保护,则它将在高可用性功能发生故障的情况下自动重新启动。自动重新启动有助于确保操作员错误不会导致受保护的 VM 意外关闭。如果要关闭此 VM,应首先禁用其高可用性功能保护。

配置高可用性功能