XenCenter

高可用性

XenServer 高可用性功能允许在基础硬件出现故障或任何服务器断开连接时自动重新启动 VM。高可用性功能可以确保重要的 VM 始终在资源池中运行。启用高可用性功能后,如果某个服务器出现故障,其 VM 将在同一池中的其他服务器上重新启动。此功能允许在系统或组件出现故障时以尽可能减少服务中断的形式恢复基本服务。

如果池协调器服务器出现故障,XenServer 高可用性功能将选择新服务器来接任池协调器。池中的任何服务器都可以是池协调器服务器。XenServer 会在所有节点上不断复制池数据库。它还会将数据库备份到检测信号 SR 上的共享存储,以提高安全性。

XenServer 高可用性功能有两个关键特点:

  • 可靠地检测服务器故障
  • 计算故障计划以实现快速恢复

通过检测信号判断可用性

您需要远程对服务器暂时消失与灾难性故障加以区分,因此可靠地检测服务器故障比较困难。如果高可用性功能错误地认为池协调器已出现故障并选择新的池协调器,则当原始服务器恢复时可能会出现不可预知的结果。同样,如果网络问题导致池均等地分为两个部分,我们必须确保只有其中的一个部分能够访问共享存储,而不是两个部分都能够同时访问共享存储。XenServer 通过提供以下两个机制来解决所有这些问题:存储检测信号和网络检测信号。

如果在池中启用高可用性功能,应指定 iSCSI、光纤通道或 NFS 存储库作为检测信号 SR。XenServer 自动在该 SR 中创建几个小型虚拟磁盘。第一个磁盘是共享仲裁磁盘,由资源池中的每个服务器使用。每个服务器都在共享磁盘中为自己分配一个唯一的区块,并定期向该区块中写入数据以指示服务器处于活动状态。当高可用性功能启动时,所有服务器都将通过网络和存储通道交换数据。此操作指示可通过这两个通道看到的服务器,并演示可以正常工作和无法正常工作的 I/O 路径。这些信息会一直交换,直到达到某个固定点且池中的所有服务器就彼此所见内容达成一致。达成一致后,将启用高可用性功能并对池进行保护。对于较大的池来说,这一高可用性预配过程可能需要几分钟时间,但只有在首次启用高可用性功能时才需要进行此过程。

在高可用性功能处于活动状态后,每个服务器都会定期向检测信号虚拟磁盘中写入存储更新,并通过管理接口写入网络数据包。请确保绑定网络适配器以保证恢复能力,并确保存储接口使用的是动态多路径(如果支持)。此配置可以确保任何单个适配器或连线故障不会导致出现任何可用性问题。

有关详细信息,请参阅:

服务器防护

使用高可用性功能可能出现的最坏情况是,服务器被误认为已脱机,但实际仍在向共享存储写入数据。这种情况可能会导致持久性数据受到损坏。XenServer 使用服务器防护功能来防止出现这种情况。服务器会自动关机且无法访问池中的任何共享资源。隔离可防止出现故障的服务器写入共享磁盘。将受保护的虚拟机移动到池中其他服务器时,此行为可防止在自动故障转移过程中损坏存储的数据。

除非满足下列任一条件,否则在出现任何检测信号故障时服务器都将进行自主防护(即,关闭电源并重新启动):

  • 针对所有服务器存在存储检测信号,但是网络已进行分区(此时存在两组服务器)。在这种情况下,最大网络分区中的所有成员服务器将保持运行状态,较小网络分区中的服务器则进行自主防护。此处假设 VM 已经因网络中断而被隔离,而且必须在网络连接正常的服务器上重新启动。如果各个网络分区的大小相等,则只有其中一个分区将根据稳定选择功能进行自主防护。
  • 如果存储检测信号消失,但是网络检测信号仍存在,则服务器会检查它们能否通过网络看到所有其他服务器。如果能够看到,则这些服务器仍保持运行状态,但前提是存储检测信号已消失。此操作不会损害 VM 的安全,但是任何网络小问题都会导致服务器进行防护,因为这意味着这两种检测信号都已经消失。

故障容量规划

检测信号系统为我们提供了可靠的服务器故障通知,现在我们继续执行高可用性的第二个步骤:故障容量规划。

一个资源池由多个(例如 32 个)服务器组成,每个服务器上的内存量和正在运行的 VM 数可能各不相同。XenServer 高可用性功能会动态计算故障计划,该计划将计算在任何服务器出现故障时要执行的操作。此故障计划可确保不会出现可能会导致无法在另一台服务器上重新启动 VM 的单个服务器故障(例如,由于其他服务器上的内存不足)。除了处理单台服务器的故障之外,XenServer 高可用性功能还可以处理池中多台服务器断开连接的情况。例如,当网络分区出现故障时,高可用性功能可以处理整个服务器组。

除了计算将执行的操作外,故障计划还会考虑池中可以接受的服务器故障次数。在计算池的高可用性计划时,需要考虑两个重要的因素:

  • 最大故障容量。此值是在没有足够的资源运行池中所有受保护的 VM 之前,可能会发生故障的最大服务器数。要计算最大故障容量,XenServer 会考虑:

    • 池中 VM 的重启优先级
    • 池中的服务器数量
    • 服务器 CPU 和内存容量
  • 服务器故障限制。您可以在配置高可用性功能时定义此值,此值指定在计划内允许在池中发生的服务器故障次数。例如,将池的服务器故障限制设置为 3 时,XenServer 计算出的故障转移计划将允许任意 3 台服务器出现故障,而这时所有受保护的 VM 仍可在池中运行。可以将服务器故障限制配置为小于最大故障容量的值,从而降低池被过度使用的可能性。在启用了 RBAC 的环境中,此配置非常有用。例如,此设置允许权限低于池操作员的 RBAC 用户在不中断高可用性计划的情况下使更多 VM 联机。有关详细信息,请参阅高可用性和基于角色的访问控制 (RBAC) 部分。

当最大故障容量值小于为服务器故障限制指定的值时,将生成系统警报。

过度使用防护

首次对池启用高可用性功能时,将基于当时可用的资源计算故障计划。XenServer 高可用性功能会动态计算新的故障计划,以响应对池造成影响的事件(例如,启动新的 VM)。如果由于池中的资源不足而无法计算新计划,则池会过载。资源不足的示例可能是可用内存不足,或者对虚拟磁盘和网络进行了更改,而这些更改会影响哪些 VM 可能会在哪些服务器上重新启动。

在池被过度使用时,应使用高可用性重启优先级来确定要启动的 VM。在高可用性配置对话框或配置高可用性向导中为要保护的 VM 配置重启优先级时,将动态地重新计算池的最大故障容量。此信息使您能够根据业务需求尝试各种 VM 重启优先级的组合。可以查看最大故障容量是否适用于池中关键 VM 所需的保护级别。

如果您尝试启动或恢复 VM,而该操作会导致池被过度使用,则 XenCenter 中将显示警告。也可以将消息发送到已配置的电子邮件地址。您可以选择取消该操作或者仍然继续操作,但继续操作会导致池被过度使用。

处理启用了高可用性的池

高可用性的最佳做法是在启用了高可用性功能时不对池进行配置更改。而应当实施“2am 保护”,当出现问题时,该措施可在管理员不在现场的情况下重新启动服务器。如果您在池中主动进行配置更改(例如,应用软件更新),请在进行这些更改期间禁用高可用性功能。

  • 如果您尝试从 XenCenter 关闭受保护的 VM,XenCenter 将允许您首先将该 VM 从故障计划中删除,然后再将其关闭。此选项可以确保不会因意外的 VM 关闭而导致停机,而当您确实需要停止受保护的 VM 时,仍然可以将其停止。
  • 如果必须在启用高可用性功能后重新启动服务器,XenCenter 会自动使用 VM 重启优先级来确定此重新启动是否会使池故障计划失效。如果不会影响池故障计划,则服务器将会正常关闭。如果违反计划,但最大故障容量大于 1,则 XenCenter 允许您将池的服务器故障限制减小 1。此操作会降低池的整体恢复能力,但始终可确保能够接受至少一个服务器故障。当服务器重新启动时,系统将自动重新计算池故障计划,并还原原始的服务器故障限制(如果适用)。
  • 使用安装更新向导安装软件更新时,必须通过选择关闭高可用性功能对池禁用高可用性功能。可以在安装更新后重新启用高可用性。如果未禁用高可用性功能,更新将无法进行。在安装更新期间,请手动监视池,以确保服务器故障不会中断池的运行。
  • 启用高可用性功能后,某些影响 VM 重新启动计划的操作(例如从池中删除服务器)可能会被禁用。要执行这些操作,应先暂时禁用高可用性功能或者关闭受保护的 VM,然后再继续操作。

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

在实现了基于角色的访问控制 (RBAC) 的 XenServer 环境中,并非所有用户都有权更改池的高可用性配置设置。例如,VM 操作员没有足够的权限来针对启用了高可用性功能的池调整故障转移容量。如果启动某个 VM 会将允许出现的最大服务器故障次数减少到小于当前值,VM 操作员将无法启动该 VM。只有池管理员或池操作员级别的用户才能够配置所允许的服务器故障数。

在这种情况下,池管理员或池操作员可以将服务器故障限制设置为小于允许出现的最大故障次数的数值。此设置会腾出 Slack 容量,因此可确保特权较低的用户可以启动新 VM。该设置会降低池的故障转移容量,但不会威胁故障计划。

高可用性