Citrix Hypervisor

群集池

群集提供使用 GFS2 SR 的资源池所需的额外功能。有关 GFS2 的详细信息,请参阅配置存储

一个群集是指一个由各个 Citrix Hypervisor 主机组成的池,与非群集池中的主机相比,这些主机的连接性和协调性更加紧密。群集中的主机负责维护选定网络中的主机相互之间的持续通信。群集中的所有主机都能够识别群集中每个主机的状态。这一主机协调功能使群集能够控制对 GFS2 SR 的内容的访问。

注意:

群集功能仅对包含 GFS2 SR 的池有益。如果您的池不包含 GFS2 SR,请不要在池中启用群集。

仲裁

群集中的每个主机都必须始终至少与群集中的大部分主机(包括群集本身)进行通信。此状态称为主机具有仲裁功能。如果主机没有仲裁功能,该主机将进行自主防护。

最初为了实现仲裁功能而必须进行通信的主机数量可能与群集保持仲裁所需的主机数量不同。

下表总结了这种行为。n 的值是群集池中的主机总数。

  实现仲裁功能所需的主机数量 保持仲裁所需的主机数量
池中的主机数量为奇数 (n+1)/2 (n+1)/2
池中的主机数量为偶数 (n/2)+1 n/2

奇数池

要实现奇数池的仲裁值,您需要群集中的主机总数加一的和再除以 2:(n+1)/2。这也是使池保持仲裁状态而必须保留的可访问的主机的最低数量。

例如,在包含 5 台主机的群集池中,必须有 3 台主机可访问,群集才能同时处于活动状态并保持仲裁:[(5+1)/2 = 3]。

建议尽可能在群集池中使用奇数主机,因为这样可以确保主机始终能够确定其是否设置了仲裁功能。

偶数池

当偶数群集池从冷启动打开电源时,(n/2)+1 个主机必须可用,主机才能具有仲裁功能。主机具有仲裁功能后,该群集将变为活动状态。

但是,如果可访问的主机数量至少为 n/2,处于活动状态的偶数池可以保持仲裁。因此,主机数为偶数的正在运行的群集有可能完全分成两半。正在运行的群集决定哪部分群集进行自主防护以及哪部分群集具有仲裁功能。包含在群集拆分之前被视为处于活动状态的 ID 最低的节点的群集有一半保持活动状态,另一半群集进行自主防护。

例如,在包含 4 台主机的群集池中,必须有 3 台主机可访问,群集才能变为活动状态 [4/2 + 1 = 3]。群集处于活动状态后,要保持仲裁状态,必须只有 2 台主机可访问 [4/2 = 2],并且该组主机必须包括已知将处于活动状态且 ID 最小的主机。

自主防护

如果主机检测到自身没有仲裁功能,则会在几秒钟内进行自主防护。当某个主机进行自主防护时,将立即重新启动。由于主机将执行硬关闭,因此,主机上运行的所有 VM 都将立即停止。在使用高可用性功能的群集池中,Citrix Hypervisor 会根据其他池成员上的重新启动配置来重新启动 VM。自主防护的主机将重新启动并尝试重新加入群集。

如果群集中处于活动状态的主机数量低于仲裁值,剩余的所有主机将失去仲裁功能。

在理想情况下,群集池中包含的活动主机数始终多于仲裁功能所需的主机数,并且 Citrix Hypervisor 从不进行防护。要使此情形出现的可能性更高,请在设置群集池时考虑以下建议:

  • 确保您具有良好的硬件冗余。

  • 使用专用的绑定网络作为群集网络。确保绑定的 NIC 位于同一个 L2 段中。有关详细信息,请参阅网络连接

  • 在池与 GFS2 SR 之间配置存储多路径。有关详细信息,请参阅存储多路径

创建群集池

开始操作之前,请确保满足以下必备条件:

  • 群集池中的所有 Citrix Hypervisor 服务器都必须至少具有 2 GiB 的控制域内存。

  • 群集中的所有主机都必须使用群集网络的静态 IP 地址。

  • 我们建议您仅在至少包含三个主机的池中使用群集,因为包含两个主机的池对自主防护整个池非常敏感。

  • 如果池中的主机之间存在防火墙,请确保主机可以使用以下端口在群集网络上进行通信:
    • TCP:8892、8896、21064
    • UDP:5404、5405

    有关详细信息,请参阅 Citrix 技术使用的通信端口

  • 如果要对现有池进行群集操作,请务必禁用高可用性。启用群集功能后,可以重新启用高可用性。

  • 我们强烈建议您为群集池使用不用于任何其他流量的绑定网络。

如果喜欢,可以使用 XenCenter 在池中设置群集功能。有关详细信息,请参阅 XenCenter 产品文档

要使用 xe CLI 创建群集池,请执行以下操作:

  1. 创建绑定网络以用作群集网络。

    注意:

    我们强烈建议您为群集池使用专用的绑定网络。请勿将此网络用于任何其他流量。

    在希望作为池主服务器的 Citrix Hypervisor 服务器上,完成以下步骤:

    1. 在 Citrix Hypervisor 服务器上打开控制台。

    2. 使用以下命令命名您的资源池:

      xe pool-param-set name-label="New Pool" uuid=<pool_uuid>
      
    3. 使用以下命令创建用于绑定 NIC 的网络:

      xe network-create name-label=bond0
      

      此时将返回新网络的 UUID。

    4. 使用以下命令查找要在绑定中使用的 PIF 的 UUID:

      xe pif-list
      
    5. 在主动-主动模式、主动-被动模式或 LACP 绑定模式下创建绑定网络。根据要使用的绑定模式,完成以下操作之一:

      • 要在主动-主动模式(默认模式)下配置绑定,请使用 bond-create 命令创建绑定。使用逗号分隔参数,指定新创建的网络 UUID 和要绑定的 PIF 的 UUID:

         xe bond-create network-uuid=<network_uuid> /
              pif-uuids=<pif_uuid_1>,<pif_uuid_2>,<pif_uuid_3>,<pif_uuid_4>
        

        绑定两个 NIC 时,请键入两个 UUID;绑定四个 NIC 时,请输入四个 UUID。在运行该命令之后,将返回该绑定的 UUID。

      • 要在主动-被动或 LACP 绑定模式下配置绑定,请使用相同的语法,添加可选的 mode 参数并指定 lacpactive-backup

         xe bond-create network-uuid=<network_uuid> pif-uuids=<pif_uuid_1>, /
              <pif_uuid_2>,<pif_uuid_3>,<pif_uuid_4> /
              mode=balance-slb | active-backup | lacp
        

    在池主服务器上创建绑定网络后,当您将其他 Citrix Hypervisor 服务器加入池时,网络和绑定信息将自动复制到加入的服务器。

    有关详细信息,请参阅网络连接

  2. 创建至少包含三台 Citrix Hypervisor 服务器的资源池。

    在每个(非主)池成员的 Citrix Hypervisor 服务器上重复执行以下步骤:

    1. 在 Citrix Hypervisor 服务器上打开控制台。
    2. 使用以下命令将 Citrix Hypervisor 服务器加入池主服务器上的池:

      xe pool-join master-address=master_address master-username=administrators_username master-password=password
      

      master-address 参数的值必须设置为作为池主服务器的 Citrix Hypervisor 服务器的完全限定域名。安装池主服务器时,password 必须为设置的管理员密码。

    有关详细信息,请参阅主机和资源池

  3. 对于属于此网络的每个 PIF,请设置 disallow-unplug=true

    1. 使用以下命令查找属于网络的 PIF 的 UUID:

      xe pif-list
      
    2. 在资源池中的 Citrix Hypervisor 服务器上运行以下命令:

      xe pif-param-set disallow-unplug=true uuid=<pif_uuid>
      
  4. 在您的池上启用群集功能。在资源池中的 Citrix Hypervisor 服务器上运行以下命令:

    xe cluster-pool-create network-uuid=<network_uuid>
    

    提供您在前面步骤中创建的绑定网络的 UUID。

销毁群集池

可以销毁群集池。销毁群集池后,池将继续存在,但不再是群集化的,且无法再使用 GFS2 SR。

要销毁群集池,请运行以下命令:

xe cluster-pool-destroy cluster-uuid=<uuid>

管理群集池

管理群集池时,以下做法可以降低丢失仲裁功能的池的风险。

确保主机彻底关闭

主机彻底关闭时,将暂时从群集中移除,直至再次将其启动。主机关闭时,不会将其计入群集的仲裁值。主机缺乏不会导致其他主机丢失仲裁功能。

但是,如果主机被强制关闭或意外关闭,则在进入脱机状态之前不会从群集中移除。此主机将计入群集的仲裁值。关闭此主机会导致其他主机丢失仲裁功能。

如果需要强制关闭主机,请先检查群集中实时主机的数量。可以通过命令 corosync-quorumtool 进行检查。在命令输出中,实时主机的数量为 Total votes: 的值,保持仲裁所需的实时主机的数量为 Quorum: 的值。

  • 如果实时主机的数量与保持仲裁所需的主机数量相同,请不要强制关闭主机。这样做会导致整个群集进行防护。

    相反,请在强制关闭主机之前尝试恢复其他主机并增加实时主机的数量。

  • 如果实时主机的数量与保持仲裁所需的主机数量接近,则可以强制关闭主机。但是,如果池中的其他主机出现问题,这会使群集更容易受到完全防护。

请务必尝试尽快重新启动关闭的主机以提高群集的恢复能力。

使用维护模式

在可能会导致主机丢失仲裁功能的主机上执行操作之前,请将该主机置于维护模式。主机处于维护模式时,正在运行的 VM 会将其迁移到池中的另一台主机。此外,如果该主机属于池主服务器,该角色将传递到池中的其他主机。如果您的操作会导致处于维护模式的主机进行自主防护,则不会丢失任何 VM 且 XenCenter 与池的连接也不会断开。

处于维护模式的主机仍计入群集的仲裁值。

主机处于维护模式时,只能更改作为群集池的一部分的主机的 IP 地址。更改主机的 IP 地址会导致主机离开群集。成功更改 IP 地址后,主机将重新加入群集。主机重新加入群集后,可以使其退出维护模式。

恢复进行自主防护或处于脱机状态的主机

请务必恢复进行自主防护的主机。这些群集成员处于脱机状态时,将计入群集的仲裁数,并且会降低可访问的群集成员的数量。这种情况会增加后续主机出现故障导致群集失去仲裁功能并彻底关闭的风险。

群集中包含处于脱机状态的主机还会阻止您执行某些操作。在群集池中,池的每个成员都必须同意每次对池成员身份所做的更改,这些更改才能成功。如果群集成员不可访问,Citrix Hypervisor 将阻止执行更改群集成员身份的操作(例如添加主机或删除主机)。

将主机标记为无法恢复

如果无法恢复一台或多台脱机主机,您可以让群集池将其遗忘。这些主机将从池中永久删除。从池中删除主机后,不会再将其计入仲裁值。

要将主机标记为无法恢复,请使用以下命令:

xe host-forget uuid=<host_uuid>

恢复被遗忘的主机

在群集池被告知遗忘某个主机后,无法将该主机重新添加到池中。

要重新加入群集池,必须在主机上重新安装 XenServer,以便其在池中显示为新主机。然后,您可以按照常规方式将主机加入到群集池中。

对群集池进行故障排除

如果您的群集池遇到问题,请参阅群集池故障排除

限制

  • 群集池最多仅支持每个池包含 16 个主机。
  • 对于群集流量,您必须使用至少两个不同的网络交换机的绑定网络。请勿将此网络用于任何其他目的。
  • 通过使用 XenCenter 更改群集网络的 IP 地址要求暂时禁用群集功能和 GFS2。
  • 群集处于活动状态并且具有正在运行的 VM 时,请勿更改群集网络的绑定。此操作会导致群集进行防护。
  • 如果您的至少涉及一个启用了群集功能的主机的群集网络中的一个 IP 地址(多个具有相同 IP 地址的主机)出现冲突,这些主机将不防护。要修复此问题,请解析 IP 地址冲突。
群集池