XenServer

配置高可用性

高可用性旨在保护您的虚拟机工作负载,以防主机或硬件发生故障。

本文介绍了配置高可用性所需执行的任务。有关高可用性概念、要求和预期行为的信息,请参阅高可用性

1. 为池配置高可用性

要使池与高可用性兼容,它必须满足以下要求:

  1. 确保您的池是同构的,包含三个或更多主机,并且所有主机都处于联机状态。有关详细信息,请参阅创建池

  2. 为池管理网络设置一个专用的绑定接口,并确保此网络允许通过端口 694 的 UDP 流量。有关详细信息,请参阅在资源池中创建 NIC 绑定

  3. 为池中的所有主机配置静态 IP 地址。

  4. 为池中的所有主机设置共享存储。有关详细信息,请参阅创建 SR

  5. 确保池中的一个共享存储库位于满足以下要求的 iSCSI、NFS 或光纤通道 LUN 上:

    • 大小为 4 GB 或更大。
    • 具有弹性存储通信:对于 iSCSI 和光纤通道 SR,请配置多路径。对于 NFS SR,请使用弹性绑定网络作为存储网络。

    此 SR 用作心跳 SR。

2. 为虚拟机准备高可用性

对于池中要通过高可用性保护的任何虚拟机,请完成以下步骤:

  1. 确保虚拟机是敏捷的:

    1. 确保其虚拟磁盘位于共享存储上。

      如果磁盘不在共享存储上,请使用以下命令移动它们:

      xe vm-copy uuid=<vm_uuid> new-name-label=<name_for_copy> sr-uuid=<uuid_of_sr>

      sr-uuid 设置为池共享存储的 UUID。

    2. 确保虚拟机未连接到本地 DVD 驱动器。

      1. 通过键入以下内容,确定虚拟机是否没有空的 CD/DVD 驱动器:

        xe vbd-list type=CD empty=false vm-uuid=<vm_uuid>
        <!--NeedCopy-->
        

        如果连接了驱动器,此命令将返回其信息。请注意 uuid,它是列表中的第一项。

      2. 要清空虚拟机的 CD/DVD 驱动器,请键入以下内容:

        xe vbd-eject uuid=<uuid>
        <!--NeedCopy-->
        
    3. 确保其虚拟网络接口位于池范围的网络上。

    4. 确保虚拟机满足实时迁移的要求。有关更多信息,请参阅迁移要求

  2. 指定一组优先级,以确定当池资源超额分配时,哪些虚拟机获得最高的重启优先级。

    ha-restart-priority 的值设置为以下选项之一:

    • restart 以便在池未超额分配的情况下,将虚拟机在池中的另一个主机上重启。XenServer 会重试此重启,直到成功。
    • best-effort 以便在池中的另一个主机上尝试重启虚拟机一次。XenServer 仅在所有受保护的虚拟机成功重启后才进行此尝试。

    当设置虚拟机的 order 值时,将优先级最高的虚拟机设置为具有最低启动顺序。此设置的默认值为 0,具有此启动顺序的虚拟机将首先启动。

    xe vm-param-set uuid=<vm_uuid> ha-restart-priority=<priority> order=<start_order>
    <!--NeedCopy-->
    

    您可以使用 XenCenter 在虚拟机上配置这些设置。有关详细信息,请参阅启动选项

3. 在您的 XenServer® 池上启用高可用性

您可以使用 XenCenter 或命令行界面 (CLI) 在池上启用高可用性。有关使用 XenCenter 启用高可用性的信息,请参阅启用高可用性

要使用 xe CLI 启用高可用性:

  1. 要在池上启用高可用性并(可选)指定超时,请运行以下命令:

    xe pool-ha-enable heartbeat-sr-uuids=<sr uuid> ha-config:timeout=<timeout_in_seconds>
    <!--NeedCopy-->
    

    此命令配置的超时仅适用于此次高可用性启用。如果您未指定超时,则默认值为 60 秒。要更改池的此默认超时,请参阅配置高可用性超时

  2. 通过运行以下命令,计算在资源不足以运行池中所有受保护的虚拟机之前可以发生故障的最大主机数:

    xe pool-ha-compute-max-host-failures-to-tolerate
    <!--NeedCopy-->
    

    返回的数字是池中当前可能发生的主机故障数,且不会丧失受保护虚拟机的活跃性保证。此值会随着池中条件的变化而变化。

  3. 指定可容忍的主机故障数,该数字小于或等于上一步给出的值。

    xe pool-param-set ha-host-failures-to-tolerate=<failure_value> uuid=<pool uuid>
    <!--NeedCopy-->
    

    可容忍的故障数决定何时发送警报。系统会随着池状态的变化重新计算故障转移计划。它使用此计算来识别池容量以及在不丧失受保护虚拟机的活跃性保证的情况下可能发生多少次故障。当此计算值低于指定值时,将生成系统警报。

配置高可用性超时

超时是指池中的主机无法访问网络或存储的期间。如果任何 XenServer 主机在超时期间无法访问网络或存储,它可能会自我隔离并重新启动。默认超时为 60 秒。但是,您可以通过为池设置默认高可用性超时来更改此值:

xe pool-param-set uuid=<pool uuid> other-config:default_ha_timeout=<timeout in seconds>
<!--NeedCopy-->

如果您使用 XenCenter® 而不是 xe CLI 启用高可用性,此默认值仍然适用。

从虚拟机中移除高可用性保护

要禁用虚拟机的高可用性功能,请使用以下命令:

xe vm-param-set uuid=<vm_uuid> ha-restart-priority=

此命令保留启动顺序设置。您可以通过将 ha-restart-priority 参数设置为 restartbest-effort 来再次为此虚拟机启用高可用性。

配置内部关闭的虚拟机的重启行为

如果虚拟机受 HA 保护,则默认情况下,它在关闭时会重新启动。此行为包括由于虚拟机崩溃或从客户机操作系统内部正常关闭而导致的内部关闭。

您可以更改此行为,以确保 HA 启用的池中的虚拟机仅在其运行的主机发生故障或被隔离时才重新启动,并且在内部关闭的情况下,虚拟机保持关闭状态。

要配置受 HA 保护的虚拟机在内部关闭后不自动重启,请将 ha-reboot-vm-on-internal-shutdown 值设置为 false

xe pool-param-set uuid=<pool_uuid> ha-reboot-vm-on-internal-shutdown=false

要配置受 HA 保护的虚拟机在内部关闭后自动重启,请将 ha-reboot-vm-on-internal-shutdown 值设置为 true

xe pool-param-set uuid=<pool_uuid> ha-reboot-vm-on-internal-shutdown=true

恢复无法访问的主机

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

xe host-emergency-ha-disable --force
<!--NeedCopy-->

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

  • 强制主机作为池协调器重新启动 (xe pool-emergency-transition-to-master)

     xe pool-emergency-transition-to-master uuid=<host uuid>
     <!--NeedCopy-->
    
  • 告知主机新池协调器的位置 (xe pool-emergency-reset-master):

     xe pool-emergency-reset-master master-address=<new pool coordinator hostname>
     <!--NeedCopy-->
    

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

xe pool-ha-enable heartbeat-sr-uuid=<sr uuid>
<!--NeedCopy-->

在启用高可用性时关闭主机

在关闭或重新启动主机时要特别小心,以防止高可用性机制假定主机已发生故障。要在启用高可用性时干净地关闭主机,请禁用主机,迁移主机,最后使用 XenCenter 或 CLI 关闭主机。要在启用高可用性的环境中关闭主机,请运行以下命令:

xe host-disable host=<host name>
xe host-evacuate uuid=<host uuid>
xe host-shutdown host=<host name>
<!--NeedCopy-->

关闭受高可用性保护的虚拟机

当虚拟机在高可用性计划下受到保护并设置为自动重启时,在此保护处于活动状态时,无法将其关闭。要关闭虚拟机,请首先禁用其高可用性保护,然后运行 CLI 命令。

xe vm-param-set uuid=<vm_uuid> ha-restart-priority=
xe vm-shutdown uuid=<vm_uuid>
<!--NeedCopy-->

当您选择受保护虚拟机的“关机”按钮时,XenCenter 会提供一个对话框以自动禁用保护。

注意:

如果您从客户机内部关闭虚拟机,并且该虚拟机受到保护,则它将在高可用性故障条件下自动重启。自动重启有助于确保操作员错误不会导致受保护的虚拟机意外关闭。如果要关闭此虚拟机,请首先禁用其高可用性保护。