高可用性

Last published : Oct 07, 2026
XenServer® 高可用性使虚拟机能够在底层硬件故障或任何服务器丢失的情况下自动重启。高可用性旨在确保重要的虚拟机始终在资源池中运行。启用高可用性后,如果您的某个服务器发生故障,其虚拟机将在同一池中的其他服务器上重启。此功能允许在系统或组件发生故障时,以最小的服务中断恢复基本服务。
如果池协调器服务器发生故障,XenServer 高可用性会选择一台新服务器作为池协调器。池中的任何服务器都可以是池协调器服务器。XenServer 会持续地将池数据库复制到所有节点。它还会将数据库备份到心跳 SR 上的共享存储,以提供额外的安全性。
XenServer 高可用性有两个关键方面:
  • 可靠地检测服务器故障
  • 计算故障计划以实现快速恢复

实现可用性的心跳

可靠地检测服务器故障很困难,因为您需要远程区分服务器是暂时消失还是发生了灾难性故障。如果高可用性错误地判断池协调器服务器已损坏并选举了新的池协调器,那么如果原始服务器返回,可能会出现不可预测的结果。同样,如果网络问题导致池分裂成两个相等的部分,我们必须确保只有一个部分访问共享存储,而不是两者同时访问。XenServer 通过两种机制解决了所有这些问题:存储心跳和网络心跳。
当您在池中启用高可用性时,您需要指定一个 iSCSI、光纤通道或 NFS 存储库作为心跳 SR。XenServer 会在此 SR 中自动创建几个小型虚拟磁盘。第一个磁盘被资源池中的每个服务器用作共享仲裁磁盘。每个服务器在共享磁盘中为自己分配一个唯一的块,并定期写入该块以表明它处于活动状态。当高可用性启动时,所有服务器通过存储通道和网络通道交换数据。网络心跳使用通过端口 694 的 UDP 传输。此操作指示它们可以通过两个通道看到哪些服务器,并演示哪些 I/O 路径正在工作,哪些没有。此信息会一直交换,直到达到一个固定点,并且池中的所有服务器就它们所能看到的内容达成一致。当达成此协议时,高可用性即被启用,并且池受到保护。此高可用性启用过程对于较大的池可能需要几分钟才能稳定,但仅在首次启用高可用性时才需要。
高可用性激活后,每个服务器会定期将存储更新写入心跳虚拟磁盘,并通过管理接口发送网络数据包。确保网卡已绑定以实现弹性,并且存储接口在支持的情况下使用动态多路径。此配置可确保任何单个适配器或布线故障都不会导致任何可用性问题。
有关详细信息,请参阅:

服务器隔离

高可用性最坏的情况是,服务器被认为是离线的,但仍在写入共享存储。这种情况可能导致持久数据损坏。XenServer 使用服务器隔离来防止这种情况发生。服务器会自动关机,并与访问池中任何共享资源隔离开来。隔离可阻止发生故障的服务器写入共享磁盘。此行为可防止在自动故障转移期间存储数据损坏,此时受保护的虚拟机正在移动到池中的其他服务器。
服务器在发生任何心跳失败时都会自我隔离(即关机并重启),除非出现以下任何一种情况:
  • 所有服务器的存储心跳都存在,但网络已分区(因此现在有两组服务器)。在这种情况下,属于最大网络分区的所有服务器将保持运行,而较小网络分区中的服务器将自我隔离。这里的假设是网络中断已隔离了虚拟机,并且它们必须在具有正常网络连接的服务器上重启。如果网络分区大小相同,则只有一个分区会根据稳定的选择函数进行自我隔离。
  • 如果存储心跳消失但网络心跳仍然存在,服务器会检查它们是否可以通过网络看到所有其他服务器。如果此条件成立,服务器将假定存储设备已发生故障并保持运行。此操作不会损害虚拟机安全,但任何网络心跳的丢失都会导致隔离,因为这意味着两个心跳都已消失。

故障容量规划

心跳系统为我们提供了可靠的服务器故障通知,因此我们进入高可用性的第二步:故障容量规划。
资源池由多个服务器(例如 32 个)组成,每个服务器可能具有不同的内存量和不同数量的正在运行的虚拟机。XenServer 高可用性动态计算一个故障计划,该计划计算在任何服务器故障时要采取的操作。此故障计划确保单个服务器故障不会导致无法在另一台服务器上重启其虚拟机(例如,由于其他服务器内存不足)。除了处理单个服务器故障外,XenServer 高可用性还可以处理池中多个服务器的丢失。例如,高可用性可以处理网络分区故障导致整个服务器组失效的情况。
除了计算要采取的操作外,故障计划还会考虑池中可容忍的服务器故障数量。计算池的高可用性计划时涉及两个重要考虑因素:
  • 最大故障容量。此值是在池中资源不足以运行所有受保护的虚拟机之前可以发生故障的最大服务器数量。为了计算最大故障容量,XenServer 会考虑:
    • 池中虚拟机的重启优先级
    • 池中的服务器数量
    • 服务器 CPU 和内存容量
  • 服务器故障限制。您可以将此值定义为高可用性配置的一部分,该配置指定计划中允许池中发生的服务器故障数量。例如,当池的服务器故障限制为 3 时,XenServer 会计算一个故障转移计划,该计划允许任意 3 台服务器发生故障,并且所有受保护的虚拟机仍可在池中运行。您可以将服务器故障限制配置为低于最大故障容量的值,从而降低池过载的可能性。此配置在启用 RBAC 的环境中可能很有用。例如,此设置允许权限低于池操作员的 RBAC 用户在不破坏高可用性计划的情况下使更多虚拟机上线。有关更多信息,请参阅高可用性和基于角色的访问控制 (RBAC) 部分。
当最大故障容量值低于为服务器故障限制指定的值时,会生成系统警报。

过载保护

首次在池上启用高可用性时,会根据当时可用的资源计算故障计划。XenServer 高可用性会根据影响池的事件(例如启动新虚拟机)动态计算新的故障计划。如果由于整个池的资源不足而无法计算新计划,则池会变得过载。资源不足的示例可能包括可用内存不足,或者虚拟磁盘和网络的更改会影响哪些虚拟机可以在哪些服务器上重启。
高可用性重启优先级用于确定当池超额分配时要启动哪些 VM。当您在“HA 配置”对话框或“配置 HA”向导中配置要保护的 VM 的重启优先级时,池的最大故障容量会动态重新计算。此信息使您能够根据业务需求尝试 VM 重启优先级的各种组合。您可以查看最大故障容量是否适合池中关键 VM 所需的保护级别。
如果您尝试启动或恢复 VM,并且该操作会导致池超额分配,XenCenter 中会显示警告。如果已配置,该消息还可以发送到电子邮件地址。您可以选择取消操作,或者无论如何都继续,从而导致池超额分配。

使用已启用 HA 的池

高可用性的最佳实践是在高可用性启用时不要对池进行配置更改。相反,它旨在成为“凌晨 2 点的保障”,在没有人工管理员在场的情况下,当出现问题时重新启动服务器。如果您正在池中主动进行配置更改(例如应用软件更新),请在这些更改期间禁用高可用性。
  • 如果您尝试从 XenCenter 关闭受保护的 VM,XenCenter 会提供将 VM 从故障计划中删除然后将其关闭的选项。此选项可确保意外的 VM 关闭不会导致停机,但如果您确实想停止受保护的 VM,仍然可以停止。
  • 如果在高可用性启用时必须重新启动服务器,XenCenter 会自动使用 VM 重启优先级来确定此重新启动是否使池故障计划失效。如果不影响计划,则服务器正常关闭。如果计划被违反,但最大故障容量大于 1,XenCenter 会提供将池的服务器故障限制降低 1 的选项。此操作会降低池的整体弹性,但始终确保至少可以容忍一次服务器故障。当服务器重新启动时,计划会自动重新计算,并在适当的情况下恢复原始服务器故障限制。
  • 当您使用“安装更新”向导安装软件更新时,您必须通过选择“关闭 HA”来禁用池上的高可用性。更新安装完成后,您可以重新启用高可用性。如果您不禁用高可用性,更新将不会继续。在安装更新期间手动监视池,以确保服务器故障不会中断池的操作。
  • 启用高可用性时,某些可能危及 VM 重启计划的操作可能会被禁用,例如从池中删除服务器。要执行这些操作,请暂时禁用高可用性,或者在继续之前关闭受保护的 VM。

高可用性和基于角色的访问控制 (RBAC)

在实施了基于角色的访问控制 (RBAC) 的 XenServer 环境中,并非所有用户都允许更改池的高可用性配置设置。例如,VM 操作员没有足够的权限来调整已启用 HA 的池的故障转移容量。如果启动 VM 会将允许的最大服务器故障数降低到低于当前值,则 VM 操作员无法启动该 VM。只有池管理员或池操作员级别的用户才能配置允许的服务器故障数。
在这种情况下,池管理员或池操作员可以将服务器故障限制设置为低于允许的最大故障数的数字。此设置会创建备用容量,从而确保权限较低的用户可以启动新的 VM。它在不威胁故障计划的情况下降低了池的故障转移容量。

相关文档

XenServer 当前版本