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

在负载均衡器的后端服务上配置可用区亲和性后,您可以限制跨可用区流量、缩短延迟时间并提高性能,同时保持多可用区架构的优势。

内部直通式网络负载平衡器支持三种可用区亲和性选项,这些选项在将新连接路由到与受支持的客户端位于同一可用区的符合条件的后端时,会提供不同程度的偏好。区域亲和性会在负载均衡器为新连接选择合适的后端后修改合适的后端集。负载均衡器的连接跟踪表中的已建立连接不受可用区亲和性的影响。

兼容性

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

只有在满足以下条件时,区域亲和性才与对称哈希兼容:

  • 正向和反向的内部直通式网络负载平衡器均已启用可用区亲和性。
  • 来自发送方虚拟机的流量仅定向到同一可用区中的接收方虚拟机。

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

兼容的客户端

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

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

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

可用区级匹配

区域匹配描述了触发区域亲和性的条件。然后,负载均衡器可能会修改原始的合格后端集,以提供配置的可用区亲和性。对原始合格后端集的修改发生在后端选择和连接跟踪流程中的确定合格的后端步骤之后

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

  1. 必须启用地区亲和性

    如果启用了可用区亲和性,您需要确定客户端是否为兼容的客户端。

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

    如果客户端兼容,请确定是否可以进行可用区级匹配。

  3. 确定是否可以进行区域匹配

    可用区级匹配是指客户端虚拟机位于包含至少一个相关类型的已配置后端的可用区中。区域匹配条件部分概述了可配置的不同后端。

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

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

    如果发生区域级匹配,请根据配置的区域相似性选项应用区域相似性逻辑。启用可用区亲和性的选项如下:

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

    在发生可用区级匹配后,根据配置的可用区级亲和性选项类型,原始的一组符合条件的后端可能会被优化替换或保持不变。来自客户端的任何新连接都会路由到这组修改后的符合条件的后端。

可用区级匹配条件

下表确定了负载均衡器是否可以将流量限制在客户端的可用区内。如果不满足第三列中的条件,系统会忽略可用区亲和性,并将新连接路由到任何符合条件的后端。

故障切换配置 符合条件的后端1 可用区匹配条件
无故障切换政策 所有健康状况良好的后端或所有后端 客户端虚拟机位于包含至少一个已配置后端的可用区中。配置的后端可能是符合条件的后端,也可能是不符合条件的后端。
已配置故障切换政策 所有运行状况良好的主要后端或所有主要后端2 客户端虚拟机位于至少包含一个已配置的主后端的可用区中。配置的主后端可能符合条件,也可能不符合条件。
已配置故障切换政策 所有运行状况良好的故障切换后端3 客户端虚拟机位于至少包含一个已配置的故障切换后端的可用区中。配置的故障切换后端可能符合条件,也可能不符合条件。
1 符合条件的后端可以是所有健康状况良好的后端、所有后端、所有健康状况良好的主后端、所有健康状况良好的故障切换后端或所有主后端。如需详细了解如何确定符合条件的后端,请参阅内部直通式网络负载平衡器的流量分配页面上的后端选择和连接跟踪部分中的步骤 2.1 确定符合条件的后端

2 负载均衡器处于故障恢复模式。
3 负载均衡器处于故障切换模式。

地区匹配示例

请考虑以下情况,以确定是否存在区域匹配:

  • 已配置故障切换政策
  • 已启用可用区级亲和性
  • 客户位于区域 A
  • 主要后端仅位于可用区 B可用区 C
  • 区域 A 中没有主后端

现在,即使启用了可用区亲和性并且有兼容的客户端,也不会发生可用区匹配,因为客户端虚拟机所在的可用区 A 中没有主后端。因此,系统会忽略区域亲和性。

可用区级亲和性选项

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

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

  • ZONAL_AFFINITY_STAY_WITHIN_ZONE:已启用可用区级亲和性。如果出现可用区级匹配,负载均衡器会通过以下方式将流量保留在客户端的可用区中:优化原始的合格后端集,或替换原始的合格后端集。如需详细了解此选项,请参阅 ZONAL_AFFINITY_STAY_WITHIN_ZONE 的工作原理

  • ZONAL_AFFINITY_SPILL_CROSS_ZONE:已启用可用区级亲和性。发生可用区匹配时,负载均衡器可能会细化符合条件的后端集,也可能会保持原始的符合条件的后端集不变。此选项允许流量溢出到其他可用区(如果客户端的可用区中没有足够的健康后端)。溢出由溢出比率控制。如需详细了解此选项,请参阅 ZONAL_AFFINITY_SPILL_CROSS_ZONE 和溢出比率的工作原理

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

ZONAL_AFFINITY_STAY_WITHIN_ZONE 的工作方式

如果可用区亲和性设置为 ZONAL_AFFINITY_STAY_WITHIN_ZONE,并且发生可用区匹配,则负载均衡器会通过以下方式之一将流量保留在客户端的可用区中:

  • 优化原始的一组符合条件的后端

    如果至少有一个符合条件的后端位于客户端的可用区中,负载均衡器会通过执行以下操作来优化符合条件的后端集:

    • 舍弃客户端可用区中符合条件的所有后端
    • 仅使用客户端所在地区中符合条件的后端

    精简后的符合条件的后端集是原始符合条件的后端集的子集。

  • 替换原始的一组符合条件的后端

    如果客户端的可用区中没有符合条件的后端,则客户端的可用区中会存在其他已配置的后端(不在符合条件的后端集中),因为发生了可用区级匹配,从而触发了可用区级亲和性。在这种情况下,负载均衡器会根据是否配置了故障切换政策以及故障切换状态,替换一组符合条件的后端,换成一组包含客户端所在可用区内运行状况不佳的后端的新后端。

    这组新的替换后符合条件的后端包含以下任一项:

    • 如果未配置故障切换政策,则符合条件的替换后端集包含客户端所在可用区中的所有不健康的后端。

    • 如果配置了故障切换政策,并且原始符合条件的后端是主要后端,则替换后的符合条件的后端集包含客户端所在区域中的所有不健康主要后端。

    • 如果配置了故障切换政策,并且原始的合格后端是故障切换后端,则替换的合格后端集包含客户端所在区域中的所有不健康的故障切换后端。

下表总结了 ZONAL_AFFINITY_STAY_WITHIN_ZONE 选项的所有细化和替换方案:

原始的一组符合条件的后端 如果至少有一个符合条件的后端(来自原始的符合条件的后端集)位于客户端的可用区中: 如果客户端的可用区中没有符合条件的后端(来自原始的一组符合条件的后端):
未配置故障切换政策
所有健康状况良好的后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 替换原始的一组符合条件的后端。新的符合条件的后端集包含客户端所在可用区中的所有运行状况不佳的后端。
所有后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 这种情况不可能存在。1
已配置故障切换政策
所有健康的主后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 替换原始的一组符合条件的后端。新的符合条件的后端集包含客户端所在可用区中的所有运行状况不佳的主后端。
所有健康状况良好的故障切换后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 替换原始的一组符合条件的后端。新的合格后端集包含客户端所在可用区中的所有运行状况不佳的故障切换后端。
所有主后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 这种情况不可能存在。2

1 可用区级亲和性要求可用区匹配。如果未配置故障切换政策,则区域匹配要求至少有一个配置的后端与客户端位于同一可用区。当符合条件的后端均为已配置的后端时,在与客户端相同的可用区中始终至少有一个符合条件的后端。

2 可用区级亲和性要求可用区匹配。如果配置了故障切换政策,并且符合条件的后端是主后端,则区域匹配要求至少有一个配置的主后端与客户端位于同一可用区中。如果符合条件的后端都是已配置的主后端,则在与客户端相同的可用区中始终至少有一个符合条件的后端。

对于 ZONAL_AFFINITY_STAY_WITHIN_ZONE 选项,请务必注意以下几点:

  • 此可用区亲和性选项永远不会使原始的一组符合条件的后端保持不变。
  • 此可用区亲和性选项优先选择客户端所在可用区中的后端,即使这意味着使用运行状况不佳的后端(假设满足可用区匹配条件)。

ZONAL_AFFINITY_SPILL_CROSS_ZONE 和溢出率的运作方式

如果地区性亲和性设置为 ZONAL_AFFINITY_SPILL_CROSS_ZONE 且发生地区性匹配,则客户端的合格后端集可能会得到优化,也可能不会发生变化

如果符合条件的后端原始集保持不变,新连接可能会发送到客户端可用区中符合条件的后端,也可能会溢出到其他可用区中符合条件的后端。此分布取决于可配置的溢出比率,该比率决定了流量何时开始溢出到其他可用区中的符合条件的后端。

可配置的溢出比率表示将流量保留在客户所在区域的阈值。如果健康状况良好且符合条件的后端所占的比例低于指定的溢出率,系统会将来自该可用区中客户端的所有新连接分配给其他可用区中符合条件的后端。溢出率的值介于 0.01.0 之间(含边界值)。

如果您在配置 ZONAL_AFFINITY_SPILL_CROSS_ZONE 区域亲和性时未指定溢出比率,Trusted Cloud 会使用默认值 0.0

零溢出率

如果配置的溢出率为 0.0,则当满足以下任一条件时,负载均衡器会舍弃客户端可用区中符合条件的所有后端,从而优化符合条件的后端集:

  • 如果未配置故障切换政策,则符合条件的后端是所有健康状况良好的后端,并且至少有一个符合条件的后端位于客户端的地区中
  • 如果配置了故障切换政策,则符合条件的后端是所有健康状况良好的主要后端,并且至少有一个符合条件的后端位于客户端的可用区中
  • 如果配置了故障切换政策,则符合条件的后端都是健康状况良好的故障切换后端,并且至少有一个符合条件的后端位于客户端的可用区中

如果客户端所在可用区中没有符合条件的后端:

  • 负载均衡器会保留原始的一组符合条件的后端
  • 允许新连接溢出到其他可用区中的符合条件的后端

下表总结了当配置的溢出比率为 0.0 时,ZONAL_AFFINITY_SPILL_CROSS_ZONE 选项的所有细化场景:

原始的一组符合条件的后端 如果至少有一个符合条件的后端(来自原始的一组符合条件的后端)位于客户端的可用区中: 如果客户端的可用区中没有符合条件的后端(来自原始的一组符合条件的后端):
未配置故障切换政策
所有健康状况良好的后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接会溢出到其他可用区中符合条件的后端。
所有后端 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中的符合条件的后端,也可能会溢出到其他可用区中的符合条件的后端。 这种情况不可能存在。1
已配置故障切换政策
所有健康的主后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接会溢出到其他可用区中符合条件的后端。
所有健康状况良好的故障切换后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接会溢出到其他可用区中符合条件的后端。
所有主后端 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中符合条件的后端,也可能会溢出到其他可用区中符合条件的后端。 这种情况不可能存在。2

1 可用区级亲和性要求可用区匹配。如果未配置故障切换政策,则区域匹配要求至少有一个配置的后端与客户端位于同一可用区。当符合条件的后端均为已配置的后端时,在与客户端相同的可用区中始终至少有一个符合条件的后端。

2 可用区级亲和性要求可用区匹配。如果配置了故障切换政策,并且符合条件的后端是主后端,则区域匹配要求至少有一个配置的主后端与客户端位于同一可用区中。如果符合条件的后端都是已配置的主后端,则在与客户端相同的可用区中始终至少有一个符合条件的后端。

非零溢出率

如果配置的溢出比率大于 0.0 但小于或等于 1.0,负载均衡器会先计算以下比率之一:

  • 如果未配置故障切换政策,则计算出的比率是客户端所在可用区中符合条件且运行状况良好的后端数量除以客户端所在可用区中已配置的后端数量。

    $$ \frac{\text{count}(\text{Eligible and healthy backends})_{\text{Client's zone}}}{\text{count}(\text{Configured backends})_{\text{Client's zone}}} $$
  • 如果配置了故障切换政策,并且所有符合条件的后端都是主后端,则计算出的比率是客户端可用区中符合条件且运行正常的后端数量除以客户端可用区中已配置的主后端数量。

    $$ \frac{\text{count}(\text{Eligible and healthy primary backends})_{\text{Client's zone}}}{\text{count}(\text{Configured primary backends})_{\text{Client's zone}}} $$
  • 如果配置了故障切换政策,并且所有符合条件的后端都是故障切换后端,则计算出的比率是客户端可用区中符合条件且运行状况良好的后端数量除以客户端可用区中已配置的故障切换后端数量。

    $$ \frac{\text{count}(\text{Eligible and healthy failover backends})_{\text{Client's zone}}}{\text{count}(\text{Configured failover backends})_{\text{Client's zone}}} $$

然后,负载均衡器会将计算出的比率与溢出比率进行比较。如果计算出的比率大于或等于溢出比率,负载均衡器会舍弃客户端所在地区以外的所有符合条件的后端,从而缩小符合条件的后端范围。否则,负载均衡器将使用原来的符合条件的后端。

计算计算出的比率时,请注意以下几点:

  • 符合条件的后端可以是所有健康后端、所有后端、所有健康主后端、所有健康故障切换后端或所有主后端。

  • 除非符合条件的后端包含所有后端或所有主后端,否则已配置的后端、已配置的主后端或已配置的故障切换后端包含的后端不仅仅是符合条件的后端。

  • 溢出比率为 1.0 表示以下情况之一:

    • 如果未配置故障切换政策,则符合条件的后端必须全部为运行状况良好的后端,并且客户端所在地区中符合条件的后端数量必须等于客户端所在地区中已配置的后端数量。

    • 如果配置了故障切换政策,并且所有符合条件的后端都是主要后端,则符合条件的后端集必须包含所有运行状况良好的主要后端,并且客户端所在地区中符合条件的后端数量必须等于客户端所在地区中配置的主要后端数量。

    • 如果配置了故障切换政策,并且所有符合条件的后端都是故障切换后端,则符合条件的后端集必须包含所有运行状况正常的故障切换后端,并且客户端所在地区中符合条件的后端数量必须等于客户端所在地区中配置的故障切换后端数量。

下表总结了当配置的溢出比率不为 0.0 时,ZONAL_AFFINITY_SPILL_CROSS_ZONE 选项的所有细化方案:

原始的一组符合条件的后端 计算出的比率 >= 溢出比率 计算出的比率 < 溢出率
未配置故障切换政策
所有健康状况良好的后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中的符合条件的后端,也可能会溢出到其他可用区中的符合条件的后端。
所有后端 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中的符合条件的后端,也可能会溢出到其他可用区中的符合条件的后端。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中符合条件的后端,也可能会溢出到其他可用区中符合条件的后端。
已配置故障切换政策
所有健康的主后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中符合条件的后端,也可能会溢出到其他可用区中符合条件的后端。
所有健康状况良好的故障切换后端 通过舍弃不在客户端可用区中的所有符合条件的后端,优化原始的符合条件的后端集。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中符合条件的后端,也可能会溢出到其他可用区中符合条件的后端。
所有主后端 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中符合条件的后端,也可能会溢出到其他可用区中符合条件的后端。 无变化 - 使用原始的一组符合条件的后端。在这种情况下,新连接可能会发送到客户端所在可用区中符合条件的后端,也可能会溢出到其他可用区中符合条件的后端。

溢出率示例

以下示例展示了在未配置故障切换政策的情况下,ZONAL_AFFINITY_SPILL_CROSS_ZONE 的运作方式。

  • 当您将溢出比率配置为 1.0 时,若要应用可用区亲和性,必须满足以下条件:

    • 符合条件的后端必须是所有健康状况良好的后端。
    • 客户端所在可用区中运行状况良好的符合条件的后端数量必须等于客户端所在可用区中已配置的后端数量。

    溢出率为 1.0 表示,只有当客户端所在可用区中 100% 的符合条件的后端都处于健康状态时,所有新连接才会仅分配给客户端所在可用区中的后端。即使一个后端运行状况不佳,负载均衡器也会将一些新连接分配给其他可用区中的后端。

  • 当您将溢出比率配置为 0.8 时,若要应用可用区亲和性,必须满足以下条件:

    • 符合条件的后端必须是所有健康状况良好的后端。
    • 客户端所在可用区中运行状况良好的符合条件的后端数量除以客户端所在可用区中配置的后端数量,结果必须至少为 0.8

    溢出比率为 0.8 表示,只有当客户端所在可用区中至少 80% 的符合条件的后端处于正常状态时,所有新连接才会仅分配给客户端所在可用区中的后端。如果客户端所在可用区中健康状况良好的后端不足 80%,负载均衡器会将一些新连接分配给其他可用区中的后端。

  • 当您将溢出比率配置为 0.0 时,若要应用可用区亲和性,必须满足以下条件:

    • 符合条件的后端必须是所有健康状况良好的后端。
    • 客户端的可用区中必须至少有一个符合条件的健康后端。

    溢出比率为 0.0 意味着,只要客户端的可用区中至少有一个运行状况良好的后端,所有新连接都会分配给客户端可用区中的后端。如果溢出比率为 0.0,并且客户端的可用区中没有运行状况良好的后端,则负载均衡器会将所有新连接分配给客户端可用区以外的可用区中运行状况良好的后端。

下图显示了溢出比率为 0.8 的情况:

  • 可用区 1 和 2 各包含 5 个已配置的后端。

  • 最初的合格后端集包含 10 个已配置的后端中的 8 个:

    • 可用区 1 中的所有五个已配置后端的健康状况均良好。

    • 可用区 2 中的三个已配置后端运行正常。

对于位于地区 1 中的兼容客户端:

  • 之所以会发生可用区级匹配,是因为可用区 1 中至少存在一个已配置的后端。

  • 可用区 1 中运行状况良好的符合条件的后端与可用区 1 中所有已配置后端的比率为 5/5 = 1.0

  • 对于可用区 1 中的兼容客户端:由于计算出的 1.0 比率大于溢出比率 0.8,因此负载均衡器会舍弃所有不在可用区 1 中的符合条件的后端,从而缩小符合条件的后端集。因此,来自可用区 1 中兼容客户端的新连接会专门分配给可用区 1 中运行状况良好且符合条件的 5 个后端。

对于位于可用区 2 中的兼容客户端:

  • 之所以会发生可用区级匹配,是因为可用区 2 中至少存在一个已配置的后端。

  • 可用区 2 中运行状况良好的合格后端与可用区 2 中所有已配置后端的比率为 3/5 = 0.6

  • 对于可用区 2 中的兼容客户端:由于计算出的 0.6 比率不大于或等于溢出比率 0.8,因此负载均衡器不会更改符合条件的后端集。因此,来自可用区 2 中兼容客户端的新连接会分配到最初的八个运行状况良好的合格后端(可用区 1 中有五个,可用区 2 中有三个)。

内部直通式网络负载平衡器可用区亲和性示例。
部分流量溢出到其他区域(点击可放大)。

后续步骤