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

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

内部直通式网络负载均衡器支持三个可用区级亲和性选项,这些选项体现了不同程度的偏好倾向,供系统确定是否要将新连接路由到与受支持客户端位于同一可用区且符合条件的后端。可用区级亲和性会在负载均衡器为新连接选择合适的后端后修改合适的后端集。负载均衡器的连接跟踪表中的已建立连接不受可用区级亲和性影响。

兼容性

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

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

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

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

兼容的客户端

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

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

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

可用区级匹配

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

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

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

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

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

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

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

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

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

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

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

    • ZONAL_AFFINITY_STAY_WITHIN_ZONE
    • 溢出率为 0ZONAL_AFFINITY_SPILL_CROSS_ZONE
    • 溢出率为非零值的 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 可用区级亲和性时未指定溢出率,Google 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 表示,只有当客户端可用区中所有符合条件的后端都健康状况良好时,所有新连接才会仅分配给客户端可用区中的后端。即使一个后端健康状况不佳,负载均衡器也会将一些新连接分配给其他可用区中的后端。

  • 当您将溢出率配置为 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 中五个健康状况良好的符合条件的后端之间分配。

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

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

  • 可用区 2 中健康状况良好的符合条件的后端与可用区 2 中所有已配置后端的比率为 3/5 = 0.6

  • 对于可用区 2 中的兼容客户端:由于计算出的比率 0.6 不大于或等于溢出比率 0.8,因此负载均衡器不会更改符合条件的后端集。 因此,来自可用区 2 中兼容客户端的新连接会在原始 8 个健康状况良好的符合条件的后端之间分配(可用区 1 中 5 个,可用区 2 中 3 个)。

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

后续步骤