内部直通式网络负载均衡器的可用区级亲和性

默认情况下,内部直通式网络负载平衡器会将新连接分配给符合条件的后端,而不会考虑客户端和后端所在的可用区。

借助可用区级亲和性,负载均衡器可以将来自给定客户端虚拟机的新连接分配到客户端虚拟机所在可用区中修改后的符合条件的后端集。尽可能将流量保持在可用区内,从而限制跨可用区流量,这样可以降低可用区之间的数据传输费用、缩短延迟时间并提高性能,同时保持多可用区架构的优势。

可用区级亲和性是在内部直通式网络负载平衡器的后端服务上配置的。负载均衡器支持不同的可用区级亲和性选项,这些选项体现了不同程度的偏好倾向,供系统确定是否要将新连接路由到与兼容客户端位于同一可用区且符合条件的后端。请注意,负载均衡器的连接跟踪表中的已建立连接不受可用区级亲和性影响。

功能兼容性

在启用可用区级亲和性之前,您必须了解哪些内部直通式网络负载平衡器功能支持可用区级亲和性。

支持的功能

不受支持的功能

可用区级亲和性与配置了以下内容的内部直通式网络负载平衡器不兼容:

兼容的客户端

可用区级亲和性仅适用于位于负载均衡器所在区域的虚拟机客户端。可用区级亲和性与以下客户端不兼容,这些客户端始终以可用区级亲和性处于停用状态的方式运行:

  • 通过 Cloud VPN 隧道和 Cloud Interconnect VLAN 连接连接的客户端Cloud VPN 隧道Cloud Interconnect VLAN 连接是区域级资源,而不是可用区级资源。通过 Cloud VPN 隧道或 VLAN 连接路由的数据包永远不支持可用区级亲和性,无论它们是否与负载均衡器位于同一区域。

  • 位于与负载均衡器所在区域不匹配的区域中的客户端虚拟机:如果启用了全球访问权限,则位于一个区域中的内部直通式网络负载均衡器可供所有其他区域中的客户端访问。当客户端虚拟机位于与负载均衡器的区域不同的区域时,客户端虚拟机绝不会与任何负载均衡器后端共享通用可用区。

与下一个跃点内部直通式网络负载平衡器的兼容性

虽然可以为用作静态路由的下一个跃点的内部直通式网络负载平衡器启用可用区亲和性,但对于有状态架构(其中防火墙等虚拟设备以并行方式配置,负载均衡实体放置在防火墙的任一侧)而言,通常不建议这样做。

如需了解详情,请参阅内部直通式网络负载平衡器作为下一个跃点指南中的要求部分。

可用区级亲和性选项

内部直通式网络负载均衡器支持以下可用区级亲和性选项:

  • ZONAL_AFFINITY_DISABLED(默认):已停用可用区级亲和性。负载平衡器选择符合条件且可用于新连接的后端,而不会修改原始符合条件的后端集。

  • ZONAL_AFFINITY_STAY_WITHIN_ZONE:已启用可用区级亲和性。进行可用区级匹配时,负载均衡器会将流量保留在客户端可用区中,即使这意味着使用健康状况不佳的后端。如需详细了解此选项,请参阅 ZONAL_AFFINITY_STAY_WITHIN_ZONE 的运作方式

  • ZONAL_AFFINITY_SPILL_CROSS_ZONE:已启用可用区级亲和性。进行可用区级匹配时,负载均衡器允许新连接在客户端可用区内分配,或溢出到其他可用区。溢出由溢出率控制。如需详细了解此选项,请参阅 ZONAL_AFFINITY_SPILL_CROSS_ZONE 和溢出率的运作方式

如需了解如何在内部直通式网络负载均衡器的后端服务上配置可用区级亲和性,请参阅使用可用区级亲和性

可用区级亲和性的工作原理

以下部分将深入介绍区域亲和性的运作方式。您无需了解这些细节即可配置可用区亲和性,但了解这些细节有助于您了解边缘情况和精确的流量分配行为。

具体而言,这些部分涵盖以下内容:

不同类型的后端

可用区级亲和性会根据负载平衡器的原始可用后端和配置的后端创建一组修改后的可用后端。为了说明区域亲和性如何进行此修改,我们精确定义了五个不同的后端集。本文档在后续部分中引用了以下术语,以说明可用区亲和性的运作方式。

  • 输入源

    • 已配置的后端:属于负载均衡器后端服务的所有后端的集合。这包括所有主后端,以及(如果启用了故障切换功能)所有主后端和所有故障切换后端。

    • 原始符合条件的后端:可接收新连接的已配置后端子集。原始符合条件的后端集由后端选择和连接跟踪流程的确定符合条件的后端步骤生成。

  • 中介集

    • 可用区级匹配测试后端:用于测试可用区级匹配的配置后端子集。 配置的后端原始符合条件的后端都会影响哪些虚拟机是可用区匹配测试后端

    • 可用区级匹配后端:与兼容客户端位于同一可用区的可用区级匹配测试后端的子集。

  • 输出集

    • 修改后的符合条件的后端:根据配置的可用区级亲和性类型和溢出比率,修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集,或者与原始符合条件的后端不同。此集合用于提供配置的可用区级亲和性。

可用区级匹配

可用区级匹配描述了触发可用区级亲和性的条件。 然后,负载均衡器可能会修改原始符合条件的后端集,以提供配置的可用区级亲和性。对原始符合条件的后端集的修改发生在负载均衡器为新连接选择符合条件的后端之后

为了触发可用区级亲和性逻辑,必须发生以下事件序列:

  1. 必须启用可用区级亲和性。

    如果已启用可用区亲和性,请继续执行下一步。

  2. 确定客户端是否为兼容的客户端

    如果客户端兼容,请继续执行下一步。

  3. 确定是否可以进行可用区级匹配。

    可用区级匹配意味着客户端虚拟机位于包含至少一个可用区级匹配测试后端的可用区中。可用区级匹配测试后端是一组已配置的后端,基于原始符合条件的后端。如需了解详情,请参阅区域匹配条件

    如果满足以下任一条件,则永远无法实现可用区级匹配:

    • 可用区级亲和性已停用
    • 客户端不兼容
  4. 应用可用区级亲和性逻辑

可用区级匹配条件

若要进行可用区级匹配,可用区级匹配测试后端中至少有一个实例或端点必须与兼容的客户端位于同一可用区。配置的后端原始符合条件的后端都是用于确定可用区级匹配测试后端的输入。

原始符合条件的后端 可用区级匹配测试后端
所有健康状况良好的主后端

所有已配置的主后端

配置的主后端可能全部健康,也可能健康状况良好和不佳的后端兼而有之。

所有健康状况良好的故障切换后端

所有已配置的故障切换后端

配置的故障切换后端可能全部健康状况良好,也可能健康状况良好和不佳的后端兼而有之。

所有健康状况不佳的主后端

所有已配置的主后端

如果原始符合条件的后端都是健康状况不佳的主后端,则根据定义,配置的主后端也都是健康状况不佳的后端。

可用区级匹配示例

请考虑以下内部直通式网络负载平衡器设置,以了解是否会发生可用区匹配

  • 主要后端:可用区 A 和 B
  • 故障转移后端:可用区 C 和 D
  • 客户端虚拟机位置:可用区 A
  • 已启用可用区级亲和性
  • 存在默认故障切换政策

场景 1

  • 原始符合条件的后端:所有健康状况良好的主后端(可用区 A 和 B)
  • 可用区级匹配测试后端:所有已配置的主后端(可用区 A 和 B)
  • 是否存在可用区级匹配?:可以。在此示例中,客户端虚拟机与地区匹配测试后端位于同一可用区,因此存在地区匹配。

场景 2

  • 原始符合条件的后端:所有健康状况良好的故障切换后端(可用区 C 和 D)
  • 可用区级匹配测试后端:所有已配置的故障切换后端(可用区 C 和 D)
  • 是否存在可用区级匹配?:不能。若要实现可用区级匹配,客户端虚拟机必须位于包含至少一个可用区级匹配测试后端的可用区中。在本例中,客户端位于可用区 A,而可用区级匹配测试后端位于可用区 C 和 D。

发生可用区级匹配后,您将应用以下部分中概述的可用区级亲和性逻辑。

可用区级亲和性逻辑

如果进行可用区级匹配,请根据配置的可用区级亲和性选项应用可用区级亲和性逻辑。启用可用区级亲和性的选项如下:

  • ZONAL_AFFINITY_STAY_WITHIN_ZONE
  • 溢出率为 0ZONAL_AFFINITY_SPILL_CROSS_ZONE
  • 溢出率为非零值的 ZONAL_AFFINITY_SPILL_CROSS_ZONE

在进行可用区级匹配后,根据配置的可用区级亲和性选项类型,修改后的符合条件的后端可能与原始符合条件的后端相同、是原始符合条件的后端的子集,也可能与原始符合条件的后端不同。

ZONAL_AFFINITY_STAY_WITHIN_ZONE 的运作方式

如果可用区级亲和性设置为 ZONAL_AFFINITY_STAY_WITHIN_ZONE,且进行可用区级匹配,则负载均衡器会将新连接分配给修改后的符合条件的后端。修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集,还可能与原始符合条件的后端不同。

如需创建修改后的符合条件的后端,负载均衡器会使用以下流程:

  1. 首先从由区域匹配条件标识的区域匹配测试后端开始。

  2. 移除所有不在客户端所在可用区中的后端。 这样,我们就获得了一组区域匹配的后端。此集合始终为非空,因为已发生区域匹配。

  3. 计算可用区匹配的后端原始符合条件的后端的交集。此交集可能为空或非空。

    • 如果交集不为空,则修改后的符合条件的后端为交集。修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。

    • 如果交集为空,则修改后的符合条件的后端可用区匹配的后端本身,这始终不同于原始符合条件的后端。在这种情况下,所有已修改的符合条件的后端的健康状况都不佳。

下表总结了当区域亲和性选项为 ZONAL_AFFINITY_STAY_WITHIN_ZONE 时,创建一组修改后的符合条件的后端的过程。此可用区级亲和性选项优先选择客户端可用区中的后端,即使这意味着使用健康状况不佳的后端。

原始符合条件的后端 (A) 可用区级匹配测试后端 (B) 可用区级匹配的后端 (C) 交集 (A∩C) 修改后的符合条件的后端
所有健康状况良好的主后端

所有已配置的主后端

可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。

客户端可用区中的所有主后端

区域匹配的后端可能全部健康状况良好、全部健康状况不佳,也可能健康状况良好和不佳的后端兼而有之。

客户端可用区中所有健康状况良好的主后端

交集不为空:修改后的符合条件的后端是客户端可用区中所有健康状况良好的主后端

修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。


交集为空:修改后的符合条件的后端是客户端可用区中所有健康状况不佳的主后端

修改后的符合条件的后端与可用区级匹配的后端相同,都是客户端可用区中的主后端;不过,由于与原始符合条件的后端的交集为空,因此所有这些后端都处于健康状况不佳的状态。

所有健康状况良好的故障切换后端

所有已配置的故障切换后端

可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。

客户端可用区中的所有故障切换后端

区域匹配的后端可能全部健康状况良好、全部健康状况不佳,也可能健康状况良好和不佳的后端兼而有之。

客户端可用区中所有健康状况良好的故障切换后端

交集不为空:修改后的符合条件的后端是客户端可用区中所有健康状况良好的故障切换后端

修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。


交集为空:修改后的符合条件的后端是客户端可用区中所有健康状况不佳的故障切换后端

修改后的符合条件的后端与可用区匹配的后端相同,都是客户端可用区中的故障切换后端;不过,所有这些后端都健康状况不佳,因为它们与原始符合条件的后端的交集为空。

所有健康状况不佳的主后端

所有已配置的主后端

根据定义,当原始符合条件的后端都是健康状况不佳的主后端时,可用区匹配测试后端都是健康状况不佳的后端。

客户端可用区中所有健康状况不佳的主后端

客户端可用区中所有健康状况不佳的主后端

交集始终不为空:修改后的符合条件的后端是客户端可用区中的所有健康状况不佳的主后端

修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。

ZONAL_AFFINITY_SPILL_CROSS_ZONE 和溢出率的运作方式

如果可用区级亲和性设置为 ZONAL_AFFINITY_SPILL_CROSS_ZONE,且进行可用区级匹配,则负载均衡器会将新连接分配给修改后的符合条件的后端。修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。

如果修改后的符合条件的后端与原始符合条件的后端相同,新连接可能会发送到客户端可用区中符合条件的后端,也可能会发送到任何可用区中符合条件的后端(“溢出”)。此分布取决于可配置的溢出率。

可配置的溢出率表示将流量保持在客户端可用区中的阈值。溢出率的值介于 0.01.0 之间(含边界值)。如果您在配置 ZONAL_AFFINITY_SPILL_CROSS_ZONE 时未指定溢出率, Google Cloud 会使用默认值 0.0

零溢出率

如果配置的溢出率为 0.0,负载均衡器会使用以下流程来创建修改后的符合条件的后端

  1. 首先从由可用区级匹配条件标识的可用区级匹配测试后端开始。

  2. 移除所有不在客户端所在可用区中的后端。 这样我们就得到了一组区域匹配的后端。此集合始终为非空,因为已发生区域匹配。

  3. 计算可用区匹配的后端原始符合条件的后端的交集。此交集可能为空或非空。

    • 如果此交集不为空,则修改后的符合条件的后端是交集。修改后的符合条件的后端可能与原始符合条件的后端相同,也可能只是原始符合条件的后端的子集。

    • 如果交集为空,则修改后的符合条件的后端与原始符合条件的后端相同。

下表总结了当可用区亲和性选项为 ZONAL_AFFINITY_SPILL_CROSS_ZONE 且配置的溢出率为 0.0 时,创建一组修改后的符合条件的后端的流程。

原始符合条件的后端 (A) 可用区级匹配测试后端 (B) 可用区级匹配的后端 (C) 交集 (A∩C) 修改后的符合条件的后端
所有健康状况良好的主后端

所有已配置的主后端

可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。

客户端可用区中的所有主后端

区域匹配的后端可能全部健康状况良好、全部健康状况不佳,也可能健康状况良好和不佳的后端兼而有之。

客户端可用区中所有健康状况良好的主后端

交集不为空:修改后的符合条件的后端是客户端可用区中所有健康状况良好的主后端

新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。


交集为空:修改后的符合条件的后端与原始符合条件的后端相同

新连接可能会分配到客户端可用区内,也可能会分配到其他可用区。

所有健康状况良好的故障切换后端

所有已配置的故障切换后端

可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。

客户端可用区中的所有故障切换后端

区域匹配的后端可能全部健康状况良好、全部健康状况不佳,也可能健康状况良好和不佳的后端兼而有之。

客户端可用区中所有健康状况良好的故障切换后端

交集不为空:修改后的符合条件的后端是客户端可用区中的所有健康状况良好的故障切换后端

新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。


交集为空:修改后的符合条件的后端与原始符合条件的后端相同

新连接可能会分配到客户端可用区内,也可能会分配到其他可用区。

所有健康状况不佳的主后端

所有已配置的主后端

根据定义,当原始符合条件的后端都是健康状况不佳的主后端时,可用区匹配测试后端都是健康状况不佳的后端。

客户端可用区中所有健康状况不佳的主后端

客户端可用区中所有健康状况不佳的主后端

交集始终不为空:修改后的符合条件的后端是客户端可用区中的所有健康状况不佳的主后端

新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。

非零溢出率

如果配置的溢出率大于 0.0 但小于或等于 1.0,负载均衡器会使用以下流程来创建修改后的符合条件的后端:

  1. 首先从由区域匹配条件标识的区域匹配测试后端开始。

  2. 移除所有不在客户端所在可用区中的后端。 这样,我们就获得了一组区域匹配的后端。此集合始终为非空,因为已发生可用区级匹配。

  3. 计算可用区匹配的后端原始符合条件的后端的交集。此集合可能为空,也可能不为空。

  4. 计算以下比率:

    $$ \frac{\text{count}(\text{zonal matched backends} \; \cap \; \text{original eligible backends})}{\text{count}(\text{zonal matched backends})} $$

    请注意,如果交集为空,则计算出的比率始终为零。

  5. 使用计算出的比率来确定修改后的符合条件的后端

    • 如果计算出的比率大于或等于溢出率,则修改后的符合条件的后端是交集。修改后的符合条件的后端可能与原始符合条件的后端相同,也可能只是原始符合条件的后端的一部分。

    • 如果计算出的比率小于溢出比率,则修改后的符合条件的后端与原始符合条件的后端相同。

下表总结了当区域亲和性选项为 ZONAL_AFFINITY_SPILL_CROSS_ZONE 选项且配置的溢出率不为 0.0 时,创建一组修改后的符合条件的后端的过程:

原始符合条件的后端 (A) 可用区级匹配测试后端 (B) 可用区级匹配的后端 (C) 交集 (A∩C) 修改后的符合条件的后端
所有健康状况良好的主后端

所有已配置的主后端

可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。

客户端可用区中的所有主后端

区域匹配的后端可能全部健康状况良好、全部健康状况不佳,也可能健康状况良好和不佳的后端兼而有之。

客户端可用区中所有健康状况良好的主后端

计算出的比率 ≥ 溢出率:修改后的符合条件的后端是客户端可用区中所有健康状况良好的主后端

新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。


计算出的比率 < 溢出率:修改后的符合条件的后端与原始符合条件的后端相同

新连接可能会分配到客户端可用区内,也可能会分配到其他可用区。

所有健康状况良好的故障切换后端

所有已配置的故障切换后端

可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。

客户端可用区中的所有故障切换后端

区域匹配的后端可能全部健康状况良好、全部健康状况不佳,也可能健康状况良好和不佳的后端兼而有之。

客户端可用区中所有健康状况良好的故障切换后端

计算出的比率 ≥ 溢出率:修改后的符合条件的后端是客户端可用区中所有健康状况良好的故障切换后端

新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。


计算出的比率 < 溢出率:修改后的符合条件的后端与原始符合条件的后端相同

新连接可能会分配到客户端可用区内,也可能会分配到其他可用区。

所有健康状况不佳的主后端

所有已配置的主后端

根据定义,当原始符合条件的后端都是健康状况不佳的主后端时,可用区匹配测试后端都是健康状况不佳的后端。

客户端可用区中所有健康状况不佳的主后端

客户端可用区中所有健康状况不佳的主后端

计算出的比率始终 ≥ 溢出比率:修改后的符合条件的后端是客户端可用区中所有健康状况不佳的主后端

新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。

溢出率示例

以下示例展示了 ZONAL_AFFINITY_SPILL_CROSS_ZONE 的运作方式。

  • 溢出率为 1.0 表示:

    • 如果可用区级匹配的后端原始符合条件的后端的交集与可用区级匹配的后端是同一组,则修改后的符合条件的后端是该交集。
    • 如果可用区级匹配的后端原始符合条件的后端的交集与可用区级匹配的后端不是同一组,则修改后的符合条件的后端与原始符合条件的后端相同。
  • 溢出率为 0.8 表示:

    • 如果可用区级匹配的后端原始符合条件的后端的交集中的后端数量至少占可用区级匹配的后端数量的 80%,则修改后的符合条件的后端为该交集。
    • 如果可用区级匹配的后端原始符合条件的后端的交集中的后端数量小于可用区级匹配的后端数量的 80%,则修改后的符合条件的后端与原始符合条件的后端相同。
  • 溢出率为 0.0 表示:

    • 如果可用区级匹配的后端原始符合条件的后端的交集不为空,则修改后的符合条件的后端为该交集。
    • 如果可用区匹配的后端原始符合条件的后端的交集为空,则修改后的符合条件的后端与原始符合条件的后端相同。

假设有以下设置:内部直通式网络负载平衡器配置了 ZONAL_AFFINITY_SPILL_CROSS_ZONE 可用区级亲和性选项,溢出比率为 0.8

  • 已配置的后端:10 个主后端(可用区 1 中有 5 个,可用区 2 中有 5 个)
  • 原始符合条件的后端:所有健康状况良好的主后端(8 个后端 - 可用区 1 中 5 个,可用区 2 中 3 个)
  • 可用区级匹配测试后端:所有 10 个已配置的主后端
内部直通式网络负载均衡器可用区级亲和性示例。
部分流量溢出到其他区域(点击可放大)。

场景 A:位于可用区 1 中的兼容客户端

  • 可用区级匹配后端:可用区 1 中的五个后端。
  • 交集可用区匹配的后端原始符合条件的后端的交集包含可用区 1 中的 5 个健康状况良好的后端。
  • 计算出的比率:5 / 5 = 1.0
  • 结果:由于计算出的比率 1.0 ≥ 0.8,因此修改后的符合条件的后端位于交集中,即客户端可用区 1 中的所有 5 个健康状况良好的主后端。新连接仅在客户端可用区内分配。

场景 B:位于可用区 2 中的兼容客户端

  • 可用区级匹配后端:可用区 2 中的 5 个后端。
  • 交集可用区匹配的后端原始符合条件的后端的交集包含可用区 2 中的三个健康状况良好的后端。
  • 计算出的比率:3 / 5 = 0.6
  • 结果:由于计算出的比率 0.6 小于 0.8,因此修改后的符合条件的后端与原始符合条件的后端相同。原始符合条件的后端是 8 个健康状况良好的后端(可用区 1 中 5 个,可用区 2 中 3 个)。新连接会分配到可用区 1 或可用区 2。

后续步骤