高可用性
高可用性功能是一组自动功能,旨在为导致 XenServer 主机出现故障或使其无法访问的问题做出规划以及从这些问题中安全恢复。例如,在网络连接发生物理损坏或出现主机硬件故障时。
概述
高可用性功能可确保当主机变得无法访问或不稳定时,该主机上运行的 VM 在另一台主机上自动安全地重新启动。这样就无需手动重新启动 VM,从而最大限度地减少了 VM 停机时间。
在池协调器变得无法访问或不稳定时,高可用性功能还可以恢复池的管理控制能力。高可用功能呢可确保自动恢复管理控制能力,不需要任何手动干预。
(可选)高可用性功能还可以实现在已知处于良好状态的主机上自动重新启动 VM,而无需手动干预的过程。可以安排这些 VM 成组重新启动,以留出启动服务的时间。它允许在其从属 VM 之前启动基础结构 VM(例如,在其从属 SQL Server 之前启动的 DHCP 服务器)。
警告:
请将高可用性功能与多路径存储和绑定的网络连接结合使用。请先配置多路径存储和绑定的网络连接,然后再尝试设置高可用性功能。当基础结构不稳定时,未设置多路径存储和绑定的网络连接的客户可能会看到意外的主机重新启动行为(自主防护)。
可以在利用高可用性功能的环境中使用所有图形解决方案(NVIDIA vGPU、Intel GVT-d、Intel GVT-G 和 vGPU 直通)。但是,不能通过高可用性功能保护使用这些图形解决方案的 VM。存在具有恰当的可用资源的主机时,可以在最大努力的基础上重新启动这些 VM。
过度使用
在其他位置发生用户定义次数的主机故障后,如果无法重新启动当前正在运行的 VM,则池会被过度使用。如果在发生故障后池中没有足够的可用内存来运行这些 VM,则可能会发生过度使用的情况。但是,还存在一些可能会导致高可用性功能无法持续使用的更细微变化:对虚拟块设备 (VBD) 和网络所做的更改可能会影响哪些 VM 可以在哪些主机上重新启动。XenServer 无法检查所有潜在的操作并确定它们是否会导致违反高可用性要求。但是,如果高可用性功能变得无法持续使用,系统将发送异步通知。
XenServer 会动态维护故障转移方案,该方案详细说明了如果池中的一组主机在任意给定时间发生故障时应执行的操作。您需要了解的一个重要概念是host failures to tolerate
值,该值被定义为高可用性功能配置的一部分。host failures to tolerate
的值决定了在仍然能够重新启动所有受保护的 VM 的情况下允许的主机故障次数。例如,对于包含 64 个主机的资源池,host failures to tolerate
设置为 3。在这种情况下,池将计算允许任何三个主机发生故障的故障转移计划,然后在其他主机上重新启动 VM。如果找不到计划,则认为池已过度使用。方案根据 VM 生命周期操作和移动动态地进行重新计算。如果所做的更改(例如,将新 VM 添加到池中)导致池被过度使用,则会通过 XenCenter 或电子邮件发送警报。
过度使用警告
如果对启动或恢复 VM 的任何尝试会导致池被过度使用,则会在 XenCenter 中显示警告警报。然后,您可以选择取消此操作,或者仍然继续。继续操作会导致存储池过度使用并向任何已配置的电子邮件地址发送消息。此警告还可以作为消息实例通过管理 API 提供。不同优先级的 VM 所使用的内存量将在池和主机级别显示。
主机防护
有时,主机会由于网络连接中断或遇到控制堆栈问题而发生故障。在这些情况下,XenServer 主机会进行自主防护以确保 VM 不会同时在两个主机上运行。采取防护措施后,主机会突然立即重新启动,导致其上运行的所有 VM 都停止。其他主机会检测到 VM 不再运行,这些 VM 随后将根据为其分配的重新启动优先级进行重新启动。受防护的主机将进入重新引导序列,并在重新启动后尝试重新加入资源池。
注意:
当群集池中的主机无法与资源池中超过一半以上的其他主机进行通信时,这些主机也会进行自主防护。有关详细信息,请参阅群集池。
配置要求
要使用高可用性功能,您需要:
-
XenServer 池(此功能提供单一资源池内主机级别的高可用性)。
注意:
我们建议您仅对至少包含 3 个 XenServer 主机的池启用高可用性功能。有关详细信息,请参阅 CTX129721 - High Availability Behavior When the Heartbeat is Lost in a Pool(CTX129721 - 池中的检测信号丢失时的高可用性行为)。
-
共享存储,其中包含至少一个大小为 356 MB 或更大的 iSCSI、NFS 或光纤通道 LUN - 检测信号 SR。高可用性功能机制将在检测信号 SR 中创建两个卷:
- 4 MB 检测信号卷:用于提供检测信号。
- 256 MB 元数据卷:用于存储池协调器发生故障转移时要使用的池协调器元数据。
注意:
以前,我们建议使用专用 NFS 或 iSCSI 存储库作为您的高可用性检测信号磁盘。但是,这仅在存储库不共享底层存储设备上的资源时才有好处,否则只会增加主机控制域 (dom0) 中的复杂性和资源使用率。
如果池是群集池,则检测信号 SR 必须是 GFS2 SR。
通过 CHAP 进行身份验证时使用 SMB 或 iSCSI 附加的存储不能用作检测信号 SR。
-
所有主机的静态 IP 地址。
警告:
如果主机的 IP 地址在启用了高可用性功能时发生变化,则高可用性功能假定主机的网络发生故障。IP 地址发生更改会导致主机受防护并使其处于无法启动的状态。要对此情况进行补救,请使用
host-emergency-ha-disable
命令禁用高可用性功能,使用pool-emergency-reset-master
重置池协调器,然后重新启用高可用性功能。 -
为了获得最大可靠性,我们建议您使用专用的绑定接口作为高可用性管理网络。
对于受高可用性功能保护的 VM,该 VM 必须灵活。这意味着 VM:
-
必须在共享存储上具有虚拟磁盘。您可以使用任何类型的共享存储。iSCSI、NFS 或光纤通道 LUN 仅是存储检测信号所需的,并且可以用于虚拟磁盘存储。
-
可以使用实时迁移。
-
不能连接到配置的本地 DVD 驱动器。
-
在池级别的网络上具有自己的虚拟网络接口。
注意:
如果启用了高可用性功能,我们强烈建议您在池中的主机上使用绑定的管理接口,并为检测信号 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 现在可能会成功。
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>
<!--NeedCopy-->
或者在 XenCenter 中,在 VM 的启动选项面板中,将启动顺序设置为所需的值。
对 XenServer 池启用高可用性功能
可以使用 XenCenter 或命令行接口 (CLI) 对池启用高可用性功能。无论使用哪种方法,都需要指定一组优先级,用来确定当池被过度使用时赋予哪些 VM 最高重新启动优先级。
警告:
启用高可用性功能后,某些影响 VM 重新启动方案的操作(例如从池中删除主机)可能会被禁用。您可以暂时禁用高可用性功能以执行此类操作,或者将受高可用性功能保护的 VM 设为不受保护。
如果启用了高可用性功能,则无法对池启用群集。暂时禁用高可用性功能以启用群集。您之后可以对群集池启用高可用性功能。对于群集池,某些高可用性功能的行为(例如自主防护)有所不同。有关详细信息,请参阅群集池。
使用 CLI 启用高可用性功能
-
确认已将兼容的存储库 (SR) 连接到池。iSCSI、NFS 或光纤通道 SR 都是兼容的 SR。有关如何使用 CLI 配置此类存储库的信息,请参阅管理存储库。
-
对每台要保护的 VM 设置重新启动优先级和启动顺序。可以按如下所示设置重新启动优先级:
xe vm-param-set uuid=<vm uuid> ha-restart-priority=restart order=1 <!--NeedCopy-->
-
对池启用高可用性功能,并(可选)指定超时:
xe pool-ha-enable heartbeat-sr-uuids=<sr uuid> ha-config:timeout=<timeout in seconds> <!--NeedCopy-->
或者,您可以为池设置默认超时。有关如何设置超时的详细信息,请参阅配置高可用性超时。
-
运行命令
pool-ha-compute-max-host-failures-to-tolerate
。此命令返回在没有足够的资源运行池中所有受保护的 VM 之前可能会发生故障的最大主机数量。xe pool-ha-compute-max-host-failures-to-tolerate <!--NeedCopy-->
要容忍的故障次数决定发送警报的时间。系统将在池的状态发生更改时重新计算故障转移方案。使用此计算可以确定池容量,以及在不失去对受保护 VM 的有效保证情况下还可以发生的故障数。当计算的值低于为
ha-host-failures-to-tolerate
指定的值时,将生成系统警报。 -
指定
ha-host-failures-to-tolerate
参数。该值必须小于或等于计算的值:xe pool-param-set ha-host-failures-to-tolerate=2 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 pool-ha-enable heartbeat-sr-uuids=<sr uuid> ha-config:timeout=<timeout in seconds>
<!--NeedCopy-->
请注意,如果您在启用高可用性时设置超时,它将仅适用于该特定启用情况。因此,如果您禁用高可用性,然后再重新启用高可用性,高可用性功能将恢复为使用默认超时值。
使用 CLI 从 VM 中删除高可用性功能保护
要对 VM 禁用高可用性功能,请使用 xe vm-param-set
命令将 ha-restart-priority
参数设置为空字符串。设置 ha-restart-priority
参数不会清除启动顺序设置。可以根据情况将 ha-restart-priority
参数设置为 restart
或 best-effort
,以再次对 VM 启用高可用性功能。
恢复无法访问的主机
如果由于某些原因,主机无法访问高可用性功能的状态文件,则主机可能变为无法访问。要恢复 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-->
关闭受高可用性功能保护的 VM
如果 VM 受高可用性方案保护并设置为自动重新启动,则无法在此保护处于活动状态时关闭。要关闭 VM,请先禁用其高可用性功能保护,然后运行 CLI 命令。如果选择受保护 VM 的关闭按钮,XenCenter 将提供一个用来自动禁用该保护的对话框。
注意:
如果关闭来宾系统内的某个 VM,并且该 VM 受到保护,则它将在高可用性功能发生故障的情况下自动重新启动。自动重新启动有助于确保操作员错误不会导致受保护的 VM 意外关闭。如果要关闭此 VM,应首先禁用其高可用性功能保护。