默认情况下,内部直通式网络负载均衡器会将新连接分配给符合条件的后端,而不会考虑客户端和后端所在的可用区。
借助可用区级亲和性,负载均衡器可以将来自给定客户端虚拟机的新连接分发到客户端虚拟机可用区中修改后的符合条件的后端集。通过尽可能将流量限制在可用区内来限制跨可用区流量,可降低可用区间数据传输费用、缩短延迟时间并提高性能,同时保持多可用区架构的优势。
可用区级亲和性在内部直通式网络负载均衡器的后端服务上配置。负载均衡器支持不同的可用区级亲和性选项,这些选项体现了不同程度的偏好倾向,供系统确定是否要将新连接路由到与兼容客户端位于同一可用区且符合条件的后端。请注意,负载均衡器的连接跟踪表中的已建立连接不受可用区级亲和性影响。
功能兼容性
在启用可用区级亲和性之前,您必须了解可用区级亲和性支持哪些内部直通式网络负载均衡器功能。
支持的功能
- 静态路由的下一个跃点
- 基于政策的路由的下一个跃点
- 故障切换
- Private Service Connect 发布的服务。对于将数据包发送到 Private Service Connect 端点(其已发布服务提供方使用内部直通式网络负载均衡器)的兼容客户端,支持可用区级亲和性。
不受支持的功能
可用区级亲和性与配置了以下内容的内部直通式网络负载均衡器不兼容:
兼容的客户端
可用区级亲和性仅适用于位于负载均衡器所在区域的虚拟机客户端。可用区级亲和性与以下客户端不兼容,这些客户端始终以可用区级亲和性处于停用状态的方式运行:
通过 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和溢出率的运作方式。
如需了解如何在内部直通式网络负载均衡器的后端服务上配置可用区级亲和性,请参阅使用可用区级亲和性。
可用区级亲和性的运作方式
以下部分将深入介绍可用区级亲和性的工作原理。配置可用区亲和性不需要了解这些细节,但这些细节可以帮助您了解极端情况和精确的流量分配行为。
具体而言,这些部分涵盖以下内容:
不同类型的后端
可用区级亲和性会根据负载均衡器的原始可用后端和配置的后端创建一组修改后的可用后端。为了说明可用区亲和性如何执行此修改,我们精确定义了五个不同的后端集。本文档在后续部分中引用了以下术语,以说明可用区级亲和性的工作原理。
输入集
配置的后端:属于负载均衡器后端服务的所有后端的集合。这包括所有主后端,以及(如果启用了故障切换功能)所有主后端和所有故障切换后端。
原始符合条件的后端:可接收新连接的已配置后端子集。原始符合条件的后端集由后端选择和连接跟踪流程的确定符合条件的后端步骤生成。
中间集
可用区级匹配测试后端:用于测试可用区级匹配的已配置后端子集。配置的后端和原始符合条件的后端共同决定哪些虚拟机是可用区匹配测试后端。
可用区匹配的后端:与兼容客户端位于同一可用区的可用区匹配测试后端的子集。
输出集
- 修改后的符合条件的后端:根据配置的可用区级亲和性类型和溢出比率,修改后的符合条件的后端可能与原始符合条件的后端相同、是原始符合条件的后端的子集,或与原始符合条件的后端不同。此集合用于提供配置的可用区级亲和性。
可用区级匹配
可用区级匹配描述了触发可用区级亲和性的条件。 然后,负载均衡器可能会修改原始符合条件的后端集,以提供配置的可用区级亲和性。对原始符合条件的后端的修改发生在负载均衡器为新连接选择符合条件的后端之后。
为了触发可用区级亲和性逻辑,必须发生以下事件序列:
必须启用可用区级亲和性。
如果可用区亲和性已启用,请继续执行下一步。
确定客户端是否为兼容的客户端。
如果客户端兼容,请继续执行下一步。
确定是否可以进行区域级匹配。
可用区级匹配意味着客户端虚拟机位于包含至少一个可用区级匹配测试后端的可用区中。可用区级匹配测试后端是一组已配置的后端,基于原始符合条件的后端。如需了解详情,请参阅可用区级匹配条件。
如果满足以下任一条件,则永远无法实现可用区级匹配:
- 可用区级亲和性已停用
- 客户端不兼容
应用可用区级亲和性逻辑。
可用区级匹配条件
若要进行可用区级匹配,可用区级匹配测试后端中至少有一个实例或端点必须与兼容客户端位于同一可用区。配置的后端和原始符合条件的后端都是用于确定可用区匹配测试后端的输入。
| 原始符合条件的后端 | 可用区级匹配测试后端 |
|---|---|
| 所有健康状况良好的主后端 |
所有已配置的主后端 配置的主后端可能全部健康,也可能部分健康、部分不健康。 |
| 所有健康状况良好的故障切换后端 |
所有已配置的故障切换后端 配置的故障切换后端可能全部健康状况良好,也可能健康状况良好和不佳的后端兼而有之。 |
| 所有健康状况不佳的主后端 |
所有已配置的主后端 根据定义,当原始符合条件的后端都是运行状况不佳的主后端时,配置的主后端都是运行状况不佳的后端。 |
可用区级匹配示例
请考虑以下内部直通式网络负载均衡器设置,以了解是否发生可用区匹配。
- 主要后端:可用区 A 和 B
- 故障切换后端:可用区 C 和 D
- 客户端虚拟机位置:可用区 A
- 已启用可用区级亲和性
- 存在默认故障切换政策
场景 1:
- 原始符合条件的后端:所有健康状况良好的主后端(可用区 A 和 B)
- 可用区级匹配测试后端:所有已配置的主要后端(可用区 A 和 B)
- 是否存在可用区级匹配?:可以。在这种情况下,客户端虚拟机与可用区级匹配测试后端位于同一可用区,因此存在可用区级匹配。
场景 2:
- 原始符合条件的后端:所有健康状况良好的故障切换后端(可用区 C 和 D)
- 可用区级匹配测试后端:所有已配置的故障切换后端(可用区 C 和 D)
- 是否存在可用区级匹配?:不会。如需进行可用区级匹配,客户端虚拟机必须位于包含可用区级匹配测试后端集中至少一个后端的可用区中。在本例中,客户端位于可用区 A 中,而可用区级匹配测试后端位于可用区 C 和 D 中。
发生可用区级匹配后,您需要应用可用区级亲和性逻辑,如以下部分所述。
可用区级亲和性逻辑
如果进行可用区级匹配,请根据配置的可用区级亲和性选项应用可用区级亲和性逻辑。启用可用区级亲和性的选项如下:
ZONAL_AFFINITY_STAY_WITHIN_ZONE- 溢出率为
0的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 时,创建一组修改后的符合条件的后端的流程。此可用区级亲和性选项优先选择客户端可用区中的后端,即使这意味着使用健康状况不佳的后端。
| 原始符合条件的后端 (A) | 可用区级匹配测试后端 (B) | 可用区级匹配后端 (C) | 交集 (A∩C) | 修改后的符合条件的后端 |
|---|---|---|---|---|
| 所有健康状况良好的主后端 |
所有已配置的主后端 可用区匹配测试后端可能全部健康,也可能部分健康、部分不健康。 |
客户端可用区中的所有主后端 可用区匹配的后端可能全部健康、全部不健康,也可能健康和不健康兼而有之。 |
客户端可用区中所有健康状况良好的主后端 |
交集不为空:修改后的符合条件的后端是客户端可用区中所有健康状况良好的主后端。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。 交集为空:修改后的符合条件的后端是客户端可用区中所有健康状况不佳的主后端。 修改后的符合条件的后端与可用区级匹配后端相同,它们都是客户端可用区中的主后端;但是,所有这些后端都运行状况不佳,因为与原始符合条件的后端的交集为空。 |
| 所有健康状况良好的故障切换后端 |
所有已配置的故障切换后端 可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。 |
客户端可用区中的所有故障切换后端 可用区级匹配后端可能全部运行状况良好、全部运行状况不佳,或者运行状况良好和运行状况不佳的后端都有。 |
客户端可用区中所有健康状况良好的故障切换后端 |
交集不为空:修改后的符合条件的后端是客户端可用区中所有健康状况良好的故障切换后端。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。 交集为空:修改后的符合条件的后端是客户端可用区中所有健康状况不佳的故障切换后端。 修改后的符合条件的后端与可用区匹配的后端相同,都是客户端可用区中的故障切换后端;不过,所有这些后端都健康状况不佳,因为它们与原始符合条件的后端的交集为空。 |
| 所有健康状况不佳的主后端 |
所有已配置的主后端 根据定义,当原始符合条件的后端都是健康状况不佳的主后端时,可用区匹配测试后端都是健康状况不佳的后端。 |
客户端可用区中所有健康状况不佳的主后端 |
客户端可用区中所有健康状况不佳的主后端 |
交集始终不为空:修改后的符合条件的后端是客户端可用区中所有健康状况不佳的主后端。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。 |
ZONAL_AFFINITY_SPILL_CROSS_ZONE 和溢出率的运作方式
如果可用区级亲和性设置为 ZONAL_AFFINITY_SPILL_CROSS_ZONE,且进行了可用区级匹配,则负载均衡器会将新连接分配给修改后的符合条件的后端。修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。
如果修改后的符合条件的后端与原始符合条件的后端相同,则新连接可能会发送到客户端可用区中符合条件的后端,也可能会发送到任何可用区中符合条件的后端(“溢出”)。此分布取决于可配置的溢出率。
可配置的溢出率表示将流量保持在客户端可用区中的阈值。溢出率的值介于 0.0 到 1.0 之间(含边界值)。如果您在配置 ZONAL_AFFINITY_SPILL_CROSS_ZONE 时未指定溢出率, Google Cloud 会使用默认值 0.0。
零溢出率
如果配置的溢出率为 0.0,负载均衡器会使用以下流程来创建修改后的符合条件的后端:
首先从由可用区级匹配条件标识的可用区级匹配测试后端开始。
移除与客户端不在同一可用区的所有后端。这样,我们便获得了一组可用区匹配后端。此集合始终为非空,因为已发生可用区级匹配。
计算可用区匹配的后端与原始符合条件的后端的交集。此交集可能不为空,也可能为空。
如果此交集不为空,则修改后的符合条件的后端是交集。修改后的符合条件的后端可能与原始符合条件的后端相同,或者修改后的符合条件的后端可能是原始符合条件的后端的子集。
如果交集为空,则修改后的符合条件的后端与原始符合条件的后端相同。
下表总结了当可用区级亲和性选项为 ZONAL_AFFINITY_SPILL_CROSS_ZONE 且配置的溢出率为 0.0 时,创建修改后的符合条件的后端集的过程。
| 原始符合条件的后端 (A) | 可用区级匹配测试后端 (B) | 可用区级匹配后端 (C) | 交集 (A∩C) | 修改后的符合条件的后端 |
|---|---|---|---|---|
| 所有健康状况良好的主后端 |
所有已配置的主后端 可用区匹配测试后端可能全部健康,也可能部分健康、部分不健康。 |
客户端可用区中的所有主后端 可用区匹配的后端可能全部健康、全部不健康,也可能健康和不健康兼而有之。 |
客户端可用区中所有健康状况良好的主后端 |
交集不为空:修改后的符合条件的后端是客户端可用区中所有健康状况良好的主后端。 新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。 交集为空:修改后的符合条件的后端与原始符合条件的后端相同。 新连接可能会分配到客户端可用区内,也可能会分配到其他可用区。 |
| 所有健康状况良好的故障切换后端 |
所有已配置的故障切换后端 可用区级匹配测试后端可能全部健康,也可能健康和不健康兼而有之。 |
客户端可用区中的所有故障切换后端 可用区级匹配后端可能全部运行状况良好、全部运行状况不佳,或者运行状况良好和运行状况不佳的后端都有。 |
客户端可用区中所有健康状况良好的故障切换后端 |
交集不为空:修改后的符合条件的后端是客户端可用区中所有健康状况良好的故障切换后端。 新连接会在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。 交集为空:修改后的符合条件的后端与原始符合条件的后端相同。 新连接可能会分配到客户端可用区内或其他可用区。 |
| 所有健康状况不佳的主后端 |
所有已配置的主后端 根据定义,当原始符合条件的后端都是健康状况不佳的主后端时,可用区匹配测试后端都是健康状况不佳的后端。 |
客户端可用区中所有健康状况不佳的主后端 |
客户端可用区中所有健康状况不佳的主后端 |
交集始终不为空:修改后的符合条件的后端是客户端可用区中的所有健康状况不佳的主后端。 新连接在客户端可用区内分配。 修改后的符合条件的后端可能与原始符合条件的后端相同,也可能是原始符合条件的后端的子集。 |
非零溢出率
如果配置的溢出率大于 0.0 但小于或等于 1.0,负载均衡器会使用以下流程来创建修改后的符合条件的后端:
从可用区级匹配条件标识的可用区级匹配测试后端开始。
移除与客户端不在同一可用区的所有后端。这样我们就得到了一组可用区匹配的后端。此集合始终为非空,因为已发生可用区级匹配。
计算可用区匹配的后端与原始符合条件的后端的交集。此集合可能为空,也可能不为空。
计算以下比率:
$$ \frac{\text{count}(\text{zonal matched backends} \; \cap \; \text{original eligible backends})}{\text{count}(\text{zonal matched backends})} $$请注意,如果交集为空,则计算出的比率始终为零。
使用计算出的比率确定修改后的符合条件的后端:
如果计算出的比率大于或等于溢出率,则修改后的符合条件的后端为交集。修改后的符合条件的后端可能与原始符合条件的后端相同,也可能只是原始符合条件的后端的一个子集。
如果计算出的比率小于溢出率,则修改后的符合条件的后端与原始符合条件的后端相同。
下表总结了当可用区亲和性选项为 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 个主后端(5 个在可用区 1 中,5 个在可用区 2 中)
- 原始符合条件的后端:所有健康状况良好的主后端(8 个后端 - 可用区 1 中 5 个,可用区 2 中 3 个)
- 可用区级匹配测试后端:所有 10 个已配置的主后端
场景 A:可用区 1 中的兼容客户端
- 可用区级匹配后端:可用区 1 中的 5 个后端。
- 交集:可用区匹配的后端与原始符合条件的后端的交集包含可用区 1 中的五个健康状况良好的后端。
- 计算出的比率:5 / 5 = 1.0
- 结果:由于计算出的比率为 1.0 ≥ 0.8,因此修改后的符合条件的后端位于交集集中,即客户端可用区 1 中的所有 5 个健康状况良好的主后端。新连接仅在客户端可用区内分配。
场景 B:位于可用区 2 中的兼容客户端
- 可用区级匹配后端:可用区 2 中的 5 个后端。
- 交集:可用区级匹配后端和原始符合条件的后端的交集包含可用区 2 中的 3 个健康状况良好的后端。
- 计算得出的比率:3 / 5 = 0.6
- 结果:由于计算出的比率 0.6 < 0.8,因此修改后的符合条件的后端就是原始符合条件的后端。原始符合条件的后端是 8 个健康状况良好的后端(可用区 1 中 5 个,可用区 2 中 3 个)。新连接会分布到可用区 1 或可用区 2。
后续步骤
- 如需为内部直通式网络负载均衡器配置 Cloud Monitoring,请参阅内部直通式网络负载均衡器日志记录和监控。
- 如需为内部直通式网络负载均衡器进行问题排查,请参阅内部直通式网络负载均衡器问题排查。