XenServer

GFS2 集群池

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

GFS2 集群是一个由最多 16 个 XenServer® 主机组成的池,与非集群池中的主机相比,这些主机连接更紧密,协调性更强。GFS2 集群中的主机通过选定的网络彼此保持持续通信。GFS2 集群中的所有主机都了解 GFS2 集群中每个主机的状态。这种主机协调使 GFS2 集群能够控制对 GFS2 SR 内容的访问。

注意:

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

仲裁

GFS2 集群中的每个主机必须始终与 GFS2 集群中的大多数主机(包括其自身)保持通信。这种状态称为主机具有仲裁。如果主机没有仲裁,则该主机将自行隔离。

最初达到仲裁所需保持通信的主机数量,可能与 GFS2 集群保持仲裁所需的主机数量不同。

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

  达到仲裁所需的主机数量 保持仲裁所需的主机数量
池中的奇数个主机 (n+1)/2 (n+1)/2
池中的偶数个主机 (n/2)+1 n/2

对于 GFS2 集群池,您可以通过查询 GFS2 集群的 is-quorate 参数来检查池是否具有仲裁:

xe cluster-list params=is-quorate uuid=<cluster_id>

要查看 GFS2 集群中有多少活动主机,请运行以下命令:

xe cluster-list params=live-hosts uuid=<cluster_id>

要查看 GFS2 集群达到仲裁所需的活动主机数量,请运行以下命令:

xe cluster-list params=quorum uuid=<cluster_id>

创建 GFS2 集群时,活动主机的数量必须大于或等于此值。为了保持仲裁,所需的主机数量可能与此命令返回的值不同,具体取决于 GFS2 集群包含奇数还是偶数个主机。

奇数节点池

对于奇数节点池,要达到仲裁值,您需要 GFS2 集群中主机总数的一半加一:(n+1)/2。这也是池保持仲裁状态所需保持可联系的最小主机数量。

例如,在 5 主机 GFS2 集群池中,需要 3 个主机保持可联系,GFS2 集群才能激活并保持仲裁 [(5+1)/2 = 3]。

在可能的情况下,建议在 GFS2 集群池中使用奇数个主机,因为这可以确保主机始终能够确定它们是否具有仲裁集。

偶数节点池

当偶数节点 GFS2 集群池从冷启动开始时,必须有 (n/2)+1 个主机可用,然后主机才能获得仲裁。主机获得仲裁后,GFS2 集群将变为活动状态。

然而,如果可联系主机的数量至少为 n/2,则活动的偶数节点池可以保持仲裁。因此,一个运行中的偶数主机 GFS2 集群可能会精确地一分为二。运行中的 GFS2 集群决定哪一半 GFS2 集群进行自隔离,哪一半 GFS2 集群拥有仲裁。包含在 GFS2 集群分裂之前被视为活动的最低 ID 节点的 GFS2 集群一半将保持活动状态,而另一半 GFS2 集群将进行自隔离。

例如,在 4 主机 GFS2 集群池中,需要 3 个主机保持可联系,GFS2 集群才能激活 [4/2 + 1 = 3]。GFS2 集群激活后,为了保持仲裁,只需 2 个主机保持可联系 [4/2 = 2],并且该主机集必须包含已知为活动的最低节点 ID 的主机。

自隔离

如果主机检测到它没有仲裁,它会在几秒钟内自我隔离。当主机自我隔离时,它会立即重新启动。由于主机执行硬关机,所有在该主机上运行的虚拟机都会立即停止。在使用高可用性的 GFS2 群集池中,XenServer 会根据虚拟机的重启配置在其他池成员上重新启动虚拟机。自我隔离的主机重新启动并尝试重新加入 GFS2 群集。

如果 GFS2 群集中的活动主机数量少于仲裁值,则所有剩余主机都会失去仲裁。

在理想情况下,您的 GFS2 群集池中的活动主机数量始终多于仲裁所需数量,并且 XenServer 从不隔离。为了使这种情况更有可能发生,在设置 GFS2 群集池时请考虑以下建议:

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

  • 为 GFS2 群集网络使用专用绑定网络。确保绑定网卡位于同一 L2 网段。有关详细信息,请参阅 网络

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

创建 GFS2 群集池

开始之前,请确保满足以下先决条件:

  • GFS2 群集池中的所有 XenServer 主机必须至少有 2 GiB 的控制域内存。

    根据您的环境,您的主机可能需要比此更多的控制域内存。如果您的主机上的控制域内存不足,您的池可能会遇到网络不稳定。网络不稳定可能会给具有 GFS2 SR 的 GFS2 群集池带来问题。有关更改控制域内存量和监视内存行为的信息,请参阅 内存使用情况

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

  • 我们建议您仅在包含至少三个主机的池中使用 GFS2 群集,因为两个主机的池容易导致整个池自我隔离。

  • GFS2 群集池每个池最多支持 16 个主机。

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

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

  • 如果您要将 GFS2 群集添加到现有池中,请确保已禁用高可用性。在启用 GFS2 群集后,您可以再次启用高可用性。

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

如果您愿意,可以使用 XenCenter 在池上设置 GFS2 群集。有关详细信息,请参阅 XenCenter 产品文档

要使用 xe CLI 创建 GFS2 群集池:

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

    注意:

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

    在您希望作为池协调器的 XenServer 主机上,完成以下步骤:

    1. 在 XenServer 主机上打开控制台。

    2. 使用以下命令创建用于绑定 NIC 的网络:

      xe network-create name-label=bond0
      <!--NeedCopy-->
      

      将返回新网络的 UUID。

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

      xe pif-list
      <!--NeedCopy-->
      
    4. 创建主动-主动模式、主动-被动模式或 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>
         <!--NeedCopy-->
        

        绑定两个网卡时键入两个 UUID,绑定四个网卡时键入四个 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
         <!--NeedCopy-->
        

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

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

  2. 创建一个至少包含三个 XenServer 主机的资源池。

    在作为(非主)池成员的每个 XenServer 主机上重复以下步骤:

    1. 在 XenServer 主机上打开控制台。
    2. 使用以下命令将 XenServer 主机加入池协调器上的池:

      xe pool-join master-address=master_address master-username=administrators_username master-password=password
      <!--NeedCopy-->
      

      master-address 参数的值必须设置为作为池协调器的 XenServer 主机的完全限定域名。password 必须是安装池协调器时设置的管理员密码。

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

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

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

      xe pif-list
      <!--NeedCopy-->
      
    2. 在资源池中的 XenServer 主机上运行以下命令:

      xe pif-param-set disallow-unplug=true uuid=<pif_uuid>
      <!--NeedCopy-->
      
  4. 在池上启用 GFS2 群集。在资源池中的 XenServer 主机上运行以下命令:

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

    提供您在上一步中创建的绑定网络的 UUID。

禁用 GFS2 集群

您可以禁用 GFS2 集群。禁用 GFS2 集群后,池将继续存在,但不再是 GFS2 集群,也无法再使用 GFS2 SR。

要禁用 GFS2 集群,请运行以下命令:

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

管理 GFS2 集群池

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

在 GFS2 集群池上添加或移除主机

在 GFS2 集群池上添加或移除主机时,请确保 GFS2 集群中的所有主机都处于联机状态。

您可以使用 XenCenter 在 GFS2 集群池上添加或移除主机。有关详细信息,请参阅 将服务器添加到池从池中移除服务器

您还可以使用 xe CLI 在 GFS2 集群池上添加或移除主机。有关详细信息,请参阅 使用 xe CLI 将主机添加到池从资源池中移除 XenServer 主机

确保主机干净关机

当主机干净关机时,它会暂时从 GFS2 集群中移除,直到再次启动。主机关机期间,它不计入 GFS2 集群的仲裁。主机的缺失不会导致其他主机失去仲裁。有关详细信息,请参阅 关闭 XenServer 主机

但是,如果主机被强制或意外关机,它在离线之前不会从 GFS2 集群中移除。此主机确实计入 GFS2 集群的仲裁值。它的关机可能导致其他主机失去仲裁。

如果需要强制关闭主机,请首先检查 GFS2 集群中有多少活动主机。您可以使用命令 corosync-quorumtool 执行此操作。在命令输出中,活动主机的数量是 Total votes: 的值,保持仲裁所需的活动主机数量是 Quorum: 的值。

  • 如果活动主机的数量与保持仲裁所需的主机数量相同,请勿强制关闭该主机。这样做会导致整个 GFS2 集群进行隔离。

    相反,请尝试恢复其他主机并增加活动主机的数量,然后再强制关闭该主机。

  • 如果活动主机的数量接近保持仲裁所需的主机数量,则可以强制关闭该主机。但是,如果池中的其他主机出现问题,这会使 GFS2 群集更容易受到完全隔离的影响。

务必尽快重启已关闭的主机,以提高 GFS2 群集的弹性。

使用维护模式

在对可能导致主机失去仲裁的主机执行操作之前,请将主机置于维护模式。当主机处于维护模式时,正在运行的虚拟机将从该主机迁移到池中的另一台主机。此外,如果该主机是池协调器,则该角色将传递给池中的另一台主机。如果您的操作导致处于维护模式的主机自我隔离,您不会丢失任何虚拟机,也不会丢失与池的 XenCenter® 连接。

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

只有当主机处于维护模式时,才能更改属于 GFS2 群集池的主机的 IP 地址。更改主机的 IP 地址会导致主机离开 GFS2 群集。成功更改 IP 地址后,主机将重新加入 GFS2 群集。主机重新加入 GFS2 群集后,您可以将其退出维护模式。

恢复已自我隔离或处于脱机状态的主机

恢复已自我隔离的主机非常重要。当这些 GFS2 群集成员处于脱机状态时,它们会计入 GFS2 群集的仲裁数量,并减少可联系的 GFS2 群集成员数量。这种情况增加了后续主机故障导致 GFS2 群集失去仲裁并完全关闭的风险。

GFS2 群集中存在脱机主机还会阻止您执行某些操作。在 GFS2 群集池中,池的每个成员都必须同意池成员资格的每次更改,然后更改才能成功。如果 GFS2 群集成员无法联系,XenServer 会阻止更改 GFS2 群集成员资格的操作(例如添加主机或删除主机)。

将主机标记为不可恢复

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

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

xe host-forget uuid=<host_uuid>

恢复已遗忘的主机

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

要重新加入 GFS2 集群池,您必须在该主机上重新安装 XenServer,使其作为新主机出现在池中。然后,您可以按常规方式将该主机加入 GFS2 集群池。

排除 GFS2 集群池故障

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

限制

  • GFS2 集群池每个池最多支持 16 个主机。
  • 要在 GFS2 集群池上启用 HA,心跳 SR 必须是 GFS2 SR。
  • 对于 GFS2 集群流量,我们强烈建议您使用至少两个不同网络交换机的绑定网络。请勿将此网络用于任何其他目的。
  • 使用 XenCenter 更改 GFS2 集群网络的 IP 地址需要暂时禁用 GFS2 集群和所有 GFS2 SR。
  • 当 GFS2 集群处于活动状态并运行虚拟机时,请勿更改 GFS2 集群网络的绑定。此操作可能导致 GFS2 集群中的主机硬重启(隔离)。
  • 如果您的 GFS2 集群网络上存在 IP 地址冲突(多个主机具有相同的 IP 地址),并且至少有一个主机启用了 GFS2 集群,则 GFS2 集群将无法正确形成,并且主机在需要时无法隔离。要解决此问题,请解决 IP 地址冲突。
GFS2 集群池