后端服务定义了 Cloud Load Balancing 如何分配流量。后端服务配置包含一组值,例如用于连接到后端的协议、各种分发和会话设置、健康检查和超时。这些设置可对负载均衡器的行为进行精细控制。为了帮助您尽快开始,大多数设置都具有允许快速配置的默认值。后端服务的范围为 全球或区域。
负载均衡器、Envoy 代理和无代理 gRPC 客户端使用后端服务资源中的配置信息执行以下操作:
- 将流量定向到正确的后端(实例组或网络端点组 (NEG))。
- 根据均衡模式(这是每个后端的设置)分配流量。
- 确定哪个健康检查正在监控后端的健康状况。
- 指定“会话亲和性”。
- 确定是否已启用其他服务,包括仅适用于特定负载均衡器的以下服务:
- Cloud CDN
- Google Cloud Armor 安全政策
- Identity-Aware Proxy
- 在 App Hub(预览版)中将区域性后端服务指定为服务。
您可以在创建后端服务或将后端服务添加到后端服务时设置这些值。
注意:如果您使用的是全球外部应用负载平衡器或经典版应用负载平衡器,并且您的后端提供静态内容,请考虑使用后端存储分区而不是后端服务。请参阅适用于全球外部应用负载平衡器的后端存储分区或适用于传统版应用负载平衡器的后端存储分区。下表汇总了哪些负载均衡器使用后端服务。您使用的产品还决定了后端服务的数量上限、后端服务的范围、支持的后端类型以及后端服务的负载均衡方案。负载均衡方案是 Google 用于对转发规则和后端服务进行分类的标识符。每个负载均衡产品都会为其转发规则和后端服务使用一种负载均衡方案。部分方案在产品之间共享。
产品 | 最大后端服务数量 | 后端服务的范围 | 受支持的后端类型 | 负载均衡方案 |
---|---|---|---|---|
全球外部应用负载均衡器 | 多个 | 全球 | 每项后端服务都支持以下后端组合之一:
|
EXTERNAL_MANAGED |
传统应用负载均衡器 | 多个 | 全球‡ | 每项后端服务都支持以下后端组合之一:
|
外部# |
区域级外部应用负载均衡器 | 多个 | 区域 | 每项后端服务都支持以下后端组合之一: | EXTERNAL_MANAGED |
跨区域内部应用负载均衡器 | 多个 | 全球 | 每项后端服务都支持以下后端组合之一:
|
INTERNAL_MANAGED |
区域级内部应用负载均衡器 | 多个 | 区域 | 每项后端服务都支持以下后端组合之一: | INTERNAL_MANAGED |
全局外部代理网络负载均衡器 | 1 | 全球‡ | 后端服务支持以下后端组合之一:
|
EXTERNAL_MANAGED |
传统代理网络负载均衡器 | 1 | 全球‡ | 后端服务支持以下后端组合之一:
|
外部 |
区域级外部代理网络负载均衡器 | 1 | 区域 | 后端服务支持以下后端组合之一: | EXTERNAL_MANAGED |
区域内部代理网络负载均衡器 | 1 | 区域 | 后端服务支持以下后端组合之一: | INTERNAL_MANAGED |
跨区域内部代理网络负载均衡器 | 多个 | 全球 | 后端服务支持以下后端组合之一:
|
INTERNAL_MANAGED |
外部直通式网络负载均衡器 | 1 | 区域 | 后端服务支持以下后端组合之一:
|
外部 |
内部直通式网络负载均衡器 | 1 | 范围为区域,但可以配置为可在全球访问 | 后端服务支持以下后端组合之一:
|
INTERNAL |
Cloud Service Mesh | 多个 | 全球 | 每项后端服务都支持以下后端组合之一:
|
INTERNAL_SELF_MANAGED |
GCE_VM_IP_PORT
类型端点上使用双栈。
- 转发规则及其外部 IP 地址是区域性的。
- 连接到后端服务的所有后端都必须与转发规则位于同一区域。
EXTERNAL_MANAGED
后端服务附加到 EXTERNAL
转发规则。但是,EXTERNAL
后端服务无法附加到 EXTERNAL_MANAGED
转发规则。
如需使用仅适用于全球外部应用负载平衡器的新功能,我们建议您按照将资源从传统版应用负载平衡器迁移到全球外部应用负载平衡器中所述的迁移流程,将现有的 EXTERNAL
资源迁移到 EXTERNAL_MANAGED
。
后端
后端是指接收来自 Google Cloud 负载均衡器、Cloud Service Mesh 配置的 Envoy 代理 或无代理 gRPC 客户端的流量的一个或多个端点。后端有多种类型:
- 包含虚拟机实例的实例组。实例组可以是代管实例组 (MIG)(无论是否启用自动扩缩功能),也可以是非代管实例组。多个后端服务可以引用实例组,但引用该实例组的所有后端服务都必须使用相同的均衡模式。
- 可用区级 NEG
- 无服务器 NEG
- 互联网 NEG
- 混合连接 NEG
- Private Service Connect NEG
- 端口映射 NEG
- Service Directory 服务绑定
您无法删除与后端服务关联的后端实例组或 NEG。在删除实例组或 NEG 之前,必须先从引用它的所有后端服务中将其作为后端移除。
实例组
本部分介绍实例组如何使用后端服务。
后端虚拟机和外部 IP 地址
后端服务中的后端虚拟机不需要外部 IP 地址:
- 对于全球外部应用负载均衡器和外部代理网络负载均衡器:客户端与托管负载均衡器的外部 IP 地址的 Google Front End (GFE) 通信。GFE 通过以下方式与后端虚拟机或端点通信:将数据包发送到通过将后端的 VPC 网络的标识符与后端的内部 IPv4 地址连接而创建的内部地址。通过特殊路由,可以实现 GFE 与后端虚拟机或端点之间的通信。
- 对于实例组后端,内部 IPv4 地址始终是与虚拟机的
nic0
接口对应的主要内部 IPv4 地址。 - 对于可用区级 NEG 中的
GCE_VM_IP_PORT
端点,您可以将该端点的 IP 地址指定为与虚拟机的任何网络接口关联的主要 IPv4 地址,也可以指定为与虚拟机的任何网络接口关联的别名 IP 地址范围中的任何 IPv4 地址。
- 对于实例组后端,内部 IPv4 地址始终是与虚拟机的
对于区域级外部应用负载均衡器:客户端与托管负载均衡器的外部 IP 地址的 Envoy 代理通信。Envoy 代理通过以下方式与后端虚拟机或端点通信:将数据包发送到通过将后端的 VPC 网络的标识符与后端的内部 IPv4 地址连接而创建的内部地址。
- 对于实例组后端,内部 IPv4 地址始终是与虚拟机
nic0
接口对应的主要内部 IPv4 地址,并且nic0
必须与负载均衡器位于同一网络中。 - 对于可用区级 NEG 中的
GCE_VM_IP_PORT
端点,您可以将端点的 IP 地址指定为与虚拟机的任何网络接口关联的主要 IPv4 地址,也可以指定为与虚拟机的任何网络接口关联的别名 IP 地址范围中的任何 IPv4 地址,只要网络接口与负载均衡器位于同一网络中即可。
- 对于实例组后端,内部 IPv4 地址始终是与虚拟机
对于外部直通网络负载均衡器:客户端通过 Google 的 Maglev 直通式负载均衡基础架构直接与后端通信。数据包被路由和递送至后端,并保留原始来源和目标 IP 地址。后端使用直接服务器返回来响应客户端。用于选择后端和跟踪连接的方法是可配置的。
- 对于实例组后端,数据包始终递送到虚拟机的
nic0
接口。 - 对于可用区级 NEG 中的
GCE_VM_IP
端点,数据包会递送到与 NEG 关联的子网中的虚拟机网络接口。
- 对于实例组后端,数据包始终递送到虚拟机的
已命名端口
后端服务的已命名端口属性仅适用于使用实例组后端的基于代理的负载平衡器(应用负载平衡器和代理网络负载平衡器)。已命名端口定义用于代理(GFE 或 Envoy)与后端实例之间的 TCP 连接的目标端口。
已命名端口的配置如下:
在每个实例组后端上,您必须使用键值对配置一个或多个已命名端口。键表示您选择的有意义的端口名称,值表示分配给该名称的端口号。系统会为每个实例组后端单独完成名称到数字的映射。
在后端服务上,仅使用端口名称 (
--port-name
) 指定单个已命名端口。
在实例组后端上,后端服务会将端口名称转换为端口号。如果实例组的已命名端口与后端服务的 --port-name
匹配,则后端服务使用此端口号与实例组的虚拟机通信。
例如,您可以在实例组中使用名称 my-service-name
和端口 8888
设置已命名端口:
gcloud compute instance-groups unmanaged set-named-ports my-unmanaged-ig \ --named-ports=my-service-name:8888
然后,您可以引用后端服务配置中已命名的端口,并将 --port-name
上的后端服务设置为 my-service-name
:
gcloud compute backend-services update my-backend-service \ --port-name=my-service-name
如果每个实例组为同一端口名称指定了不同的端口号,则后端服务在与不同实例组中的虚拟机通信时可以使用不同的端口号。
代理负载均衡器的后端服务使用的已解析端口号不需要与负载均衡器的转发规则使用的端口号相匹配。代理负载均衡器会侦听发送到其转发规则的 IP 地址和目的地端口的 TCP 连接。由于代理打开其后端的第二个 TCP 连接,因此第二个 TCP 连接的目的地端口可以不同。
已命名端口仅适用于实例组后端。具有 GCE_VM_IP_PORT
端点的可用区级 NEG、具有 NON_GCP_PRIVATE_IP_PORT
端点的混合 NEG 和互联网 NEG 使用不同的机制(即在端点本身上)定义端口。 通过使用不涉及指定目标端口的抽象,无服务器 NEG 引用 Google 服务,而 PSC NEG 引用服务连接。
内部直通式网络负载均衡器和外部直通式网络负载均衡器不使用已命名端口。这是因为它们是直通式负载均衡器,用于将连接直接路由到后端,而不是创建新连接。数据包被传送到后端,并保留负载均衡器的转发规则的目的地 IP 地址和端口。
如需了解如何创建已命名端口,请参阅以下说明:
- 非代管实例组:使用已命名端口
- 代管实例组:将已命名端口分配给代管实例组
有关实例组的限制和指南
在为负载均衡器创建实例组时,请记住以下限制和指南:
不要将一个虚拟机放在多个负载均衡实例组中。如果虚拟机是两个或更多非代管实例组的成员,或者是一个代管实例组和一个或多个非代管实例组的成员,则 Google Cloud 限制您一次只能将其中一个实例组用作特定后端服务的后端。
如果您需要一个虚拟机参与多个负载均衡器,则必须将同一实例组用作每个后端服务上的后端。
对于代理负载均衡器,当您想要将流量均衡到不同端口时,请在一个实例组上指定所需的命名端口,并让每个后端服务订阅一个唯一的命名端口。
您可以将同一实例组用作多个后端服务的后端。在这种情况下,后端必须使用兼容的平衡模式。兼容表示平衡模式必须相同,或者它们必须是
CONNECTION
和RATE
的组合。不兼容的平衡模式组合如下:
CONNECTION
-UTILIZATION
RATE
-UTILIZATION
请思考以下示例:
- 您有两项后端服务:
external-https-backend-service
用于外部应用负载均衡器,internal-tcp-backend-service
用于内部直通式网络负载均衡器。 - 您在
internal-tcp-backend-service
中使用名为instance-group-a
的实例组。 - 在
internal-tcp-backend-service
中,您必须应用CONNECTION
均衡模式,因为内部直通网络负载均衡器仅支持CONNECTION
均衡模式。 - 如果在
external-https-backend-service
中应用RATE
均衡模式,那么您也可以在external-https-backend-service
中使用instance-group-a
。 - 如果使用
UTILIZATION
均衡模式,您也无法在external-https-backend-service
中使用instance-group-a
。
若要更改用作多个后端服务的后端的实例组的均衡模式,请执行以下操作:
- 从一个后端服务以外的其他所有后端服务中移除实例组。
- 更改一个剩余后端服务上的后端的均衡模式。
- 将实例组作为后端重新添加到剩余的后端服务(如果这些服务支持新均衡模式)。
如果您的实例组与多个后端服务相关联,则每个后端服务都可以引用实例组上相同或不同的已命名端口。
我们不建议在多个后端服务中添加自动扩缩式代管实例组,这可能导致实例组中的实例进行不可预测和不必要的扩缩,尤其是在您使用 HTTP 负载均衡利用率自动扩缩指标时。
- 建议不要这样做,但如果自动扩缩指标是 CPU 利用率或者与负载均衡器的服务容量无关的 Cloud Monitoring 指标,则此方案可能适用。使用其中一个自动扩缩指标可防止不稳定的扩缩。
区域网络端点组
网络端点通过 IP 地址或 IP 地址和端口组合表示服务,而不是引用实例组中的虚拟机。网络端点组 (NEG) 是网络端点的逻辑分组。
可用区级网络端点组 (NEG) 是可用区级资源,表示单个子网内 Google Cloud 资源的 IP 地址的集合或 IP 地址和端口组合的集合。
将可用区级 NEG 用作后端的后端服务在虚拟机内运行的应用或容器之间分配流量。
可用区级 NEG 有两种类型的网络端点:
GCE_VM_IP
端点(仅受内部直通式网络负载均衡器和基于后端服务的外部直通式网络负载均衡器支持)。GCE_VM_IP_PORT
端点。
如需查看哪些产品支持可用区级 NEG 后端,请参阅表格:后端服务和受支持的后端类型。
如需了解详情,请参阅可用区级 NEG 概览。
互联网网络端点组
互联网 NEG 是定义外部后端的资源。外部后端是在本地基础架构中或由第三方提供的基础架构上托管的后端。
互联网 NEG 是主机名或 IP 地址以及可选端口的组合。互联网 NEG 有两种类型的网络端点:INTERNET_FQDN_PORT
和 INTERNET_IP_PORT
。
如需了解详情,请参阅互联网网络端点组概览。
无服务器网络端点组
网络端点组 (NEG) 为负载均衡器指定了一组后端端点。无服务器 NEG 是指向 Cloud Run、App Engine、Cloud Run functions 或 API Gateway 服务的后端。
无服务器 NEG 可以表示以下各项之一:
- 一项 Cloud Run 服务或一组服务。
- 一个 Cloud Run functions 函数或一组函数。
- 一个 App Engine 应用(标准或 Flex 应用)、应用内的一项特定服务、应用的某一特定版本或一组服务。
- 一种 API Gateway,用于通过所有服务一致的 REST API 访问您的服务,而不考虑服务实现。此功能目前为预览版。
如需为共享网址格式的无服务器应用设置无服务器 NEG,请使用网址掩码。网址掩码是网址架构的模板(例如 example.com/<service>
)。无服务器 NEG 将使用此模板从传入请求的网址中提取 <service>
名称,并将请求路由到相同名称的匹配的 Cloud Run、Cloud Run functions 或 App Engine 服务。
如需查看哪些负载均衡器支持无服务器 NEG 后端,请参阅表格:后端服务和受支持的后端类型。
如需详细了解无服务器 NEG,请参阅无服务器网络端点组概览。
服务绑定
服务绑定是在 Cloud Service Mesh 中的后端服务与在 Service Directory 中注册的服务之间建立连接的后端。后端服务可以引用多个服务绑定。具有服务绑定的后端服务不能引用任何其他类型的后端。
混合后端
将不同类型的后端添加到单个后端服务时,以下使用注意事项适用:
- 单个后端服务不能同时使用实例组和可用区级 NEG。
- 您可以在同一后端服务中使用不同类型的实例组的组合。例如,单个后端服务可以引用代管式实例组和非代管式实例组的组合。如需详细了解哪些后端与哪些后端服务兼容,请参阅上一部分中的表格。
- 在某些代理负载均衡器中,您可以结合使用可用区级 NEG(具有
GCE_VM_IP_PORT
端点)和混合连接 NEG(具有NON_GCP_PRIVATE_IP_PORT
端点)来配置混合负载均衡。如需查看哪些负载均衡器具有此功能,请参阅表格:后端服务和受支持的后端类型。
后端协议
创建后端服务时,您必须指定用于与后端通信的协议。每个后端服务只能指定一个协议,您不能指定次要协议来作为后备。
哪种协议有效取决于负载均衡器的类型 ,或者您是否使用 Cloud Service Mesh。
产品 | 后端服务协议选项 |
---|---|
应用负载均衡器 | HTTP、HTTPS、HTTP/2 |
代理网络负载均衡器 | TCP 或 SSL 区域级代理网络负载均衡器仅支持 TCP。 |
直通式网络负载均衡器 | TCP、UDP 或 UNSPECIFIED |
Cloud Service Mesh | HTTP、HTTPS、HTTP/2、gRPC、TCP |
更改后端服务的协议,会使后端在几分钟的时间里无法通过负载平衡器访问。
IP 地址选择政策
此字段适用于代理负载平衡器。您必须使用 IP 地址选择政策指定从后端服务发送到后端的流量类型。
选择 IP 地址选择政策时,请确保您的后端支持所选的流量类型。如需了解详情,请参阅表格:后端服务和受支持的后端类型。
当您想要将负载均衡器后端服务转换为支持其他流量类型时,可以使用 IP 地址选择政策。如需了解详情,请参阅从单栈转换为双栈。
您可以为 IP 地址选择政策指定以下值:
IP 地址选择政策 | 说明 |
---|---|
仅 IPv4 | 仅将 IPv4 流量发送到后端服务的后端,无论从客户端到 GFE 的流量如何。仅使用 IPv4 健康检查来检查后端的健康状况。 |
首选 IPv6 | 优先考虑后端的 IPv6 连接,而不是 IPv4 连接(前提是存在具有 IPv6 地址且健康状况良好的后端)。 健康检查会定期监控后端的 IPv6 和 IPv4 连接。GFE 会先尝试 IPv6 连接;如果 IPv6 连接中断或速度较慢,则 GFE 会使用 happy eyeballs 回退并连接到 IPv4。 即使其中一个 IPv6 或 IPv4 连接健康状况不佳,后端仍会被视为健康状况良好,并且这两个连接都可以由 GFE 尝试,并通过 happy eyeballs 最终选择使用哪个连接。 |
仅 IPv6 | 仅将 IPv6 流量发送到后端服务的后端,无论从客户端到代理的流量如何。仅使用 IPv6 健康检查来检查后端的健康状况。 系统不会执行验证来检查后端流量类型是否与 IP 地址选择政策匹配。例如,如果您使用仅限 IPv4 的后端并选择 |
在负载均衡器和后端之间进行的加密
如需了解负载均衡器和后端之间的加密,请参阅到后端的加密。
流量分配
后端行为的某些方面由后端服务资源中以下字段的值决定:
- 平衡模式定义了负载均衡器如何为新请求或连接衡量后端就绪情况。
- 目标容量,用于定义目标最大连接数、目标最大速率或目标最大 CPU 利用率。
- 容量扩缩器,可调整总体可用容量,而无需修改目标容量。
平衡模式
均衡模式确定负载均衡器的后端 或 Cloud Service Mesh 是可以处理额外的流量还是已完全加载。
Google Cloud 有三种均衡模式:
CONNECTION
:根据后端可以处理的连接总数确定负载的分配方式。RATE
:每秒的目标请求次数 (RPS) 或查询次数 (QPS) 上限。如果所有后端都达到或超过容量,则实际 RPS/QPS 可以超过目标 RPS/QPS 上限。UTILIZATION
:根据实例组中的实例利用率来确定负载的分配方式。
适用于每种负载均衡器的均衡模式
在后端服务中添加后端时可设置均衡模式。负载均衡器可用的均衡模式取决于负载均衡器的类型和后端的类型。
直通式网络负载均衡器需要采用 CONNECTION
均衡模式,但不支持设置任何目标容量。
应用负载均衡器对于实例组后端支持 RATE
或 UTILIZATION
均衡模式,对于具有 GCE_VM_IP_PORT
端点的可用区级 NEG 支持 RATE
均衡模式,对于混合 NEG(NON_GCP_PRIVATE_IP_PORT
端点)支持 RATE
均衡模式。 对于任何其他类型的受支持的后端,必须省略均衡模式。
对于传统应用负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量(基于负载均衡模式的目标容量确定)来选择区域。然后,在某个区域内,使用均衡模式的目标容量计算要发送到该区域中的每个后端的请求数的比例。然后,请求或连接会在后端的实例或端点之间以轮询方式分配。
对于全球外部应用负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量,根据负载均衡模式的目标容量选择区域。在一个区域内,系统会使用均衡模式的目标容量来计算应发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。您可以使用服务负载均衡政策 (
serviceLbPolicy
) 和首选后端设置来影响一个区域内任何特定后端的选择。此外,在每个实例组或 NEG 中,负载均衡政策 (LocalityLbPolicy
) 会确定流量如何分配到实例组内的实例或端点。
- 对于 跨区域内部应用负载均衡器、 区域级外部应用负载均衡器和 区域级内部应用负载均衡器,均衡模式的目标容量为用于计算要发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。在每个实例组或 NEG 中,负载均衡政策 (
LocalityLbPolicy
) 会确定流量如何分配到实例组中的实例或端点。 只有跨区域内部应用负载均衡器支持使用服务负载均衡政策 (serviceLbPolicy
) 和首选后端设置,以影响一个区域内任何特定后端的选择。
代理网络负载均衡器对于虚拟机实例组后端支持 CONNECTION
或 UTILIZATION
均衡模式,对于具有 GCE_VM_IP_PORT
端点的可用区级 NEG 支持 CONNECTION
均衡模式,对于混合 NEG(NON_GCP_PRIVATE_IP_PORT
端点)支持 CONNECTION
均衡模式。对于任何其他类型的受支持的后端,必须省略均衡模式。
对于全球外部代理网络负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量(基于负载均衡模式的目标容量)来选择区域。在一个区域内,系统会使用均衡模式的目标容量来计算应发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。您可以使用服务负载均衡政策 (
serviceLbPolicy
) 和首选后端设置来影响一个区域内任何特定后端的选择。此外,在每个实例组或 NEG 中,负载均衡政策 (LocalityLbPolicy
) 会确定流量如何分配到实例组内的实例或端点。对于跨区域内部代理网络负载均衡器,系统会首先选择已配置的区域。在一个区域内,系统会使用均衡模式的目标容量来计算应发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。您可以使用服务负载均衡政策 (
serviceLbPolicy
) 和首选后端设置来影响一个区域内任何特定后端的选择。此外,在每个实例组或 NEG 中,负载均衡政策 (LocalityLbPolicy
) 会确定流量如何分配到实例组内的实例或端点。对于传统代理网络负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量(基于负载均衡模式的目标容量)来选择区域。然后,系统会在某个区域内使用负载均衡模式的目标容量来计算传送至该区域中每个后端(实例组或 NEG)的请求或连接数的比例。在负载均衡器选择后端后,系统会在每个后端中的虚拟机实例或网络端点之间以轮循方式分配请求或连接。
- 对于区域级外部代理网络负载均衡器和区域级内部代理网络负载均衡器,系统会使用负载均衡模式的目标容量来计算应发送到每个后端(实例组或 NEG)的请求数量的比例。在每个实例组或 NEG 中,负载均衡政策 (
localityLbPolicy
) 会确定流量如何分配到实例组内的实例或端点。
下表汇总了每个负载均衡器和后端组合可用的负载均衡模式。
负载均衡器 | 后端 | 可用的均衡模式 |
---|---|---|
应用负载均衡器 | 实例组 | RATE 或 UTILIZATION |
可用区级 NEG(GCE_VM_IP_PORT 端点) |
RATE |
|
混合 NEG(NON_GCP_PRIVATE_IP_PORT 端点) |
RATE |
|
代理网络负载均衡器
|
实例组 | CONNECTION 或 UTILIZATION |
可用区级 NEG(GCE_VM_IP_PORT 端点) |
CONNECTION |
|
混合 NEG( |
CONNECTION |
|
直通式网络负载均衡器 | 实例组 | CONNECTION |
可用区级 NEG(GCE_VM_IP 端点) |
CONNECTION |
如果与后端服务相关联的所有虚拟机的平均利用率低于 10%,则 Google Cloud 可能会首选特定区域。当您使用区域级代管式实例组、不同可用区中的可用区级代管式实例组以及可用区级非代管式实例组时,可能会发生这种情况。随着发送到负载均衡器的流量越来越多,这种区域不均衡问题会自动得以解决。
如需了解详情,请参阅 gcloud compute backend-services add-backend。
目标容量
每个均衡模式都有一个对应的目标容量,用于定义下列目标最大值之一:
- 连接数
- 费率
- CPU 利用率
对于每种均衡模式,目标容量都不是断路器。在某些情况下,负载均衡器将超过最大值,例如在所有后端虚拟机或端点都已达到最大值的情况下。
连接均衡模式
对于 CONNECTION
均衡模式,目标容量可定义目标最大开放连接数。除了内部直通网络负载均衡器和外部直通网络负载均衡器之外,您必须使用以下某一设置来指定目标连接数上限:
max-connections-per-instance
(每个虚拟机):单个虚拟机的目标平均连接数。max-connections-per-endpoint
(每个可用区 NEG 中的端点):单个端点的目标平均连接数。max-connections
(每个可用区 NEG 和可用区实例组):整个 NEG 或实例组的目标平均连接数。 对于区域代管式实例组,请改用max-connections-per-instance
。
下表显示了目标容量参数如何定义以下内容:
- 整个后端的目标容量
- 每个实例或端点的预期目标容量
后端类型 | 目标容量 | ||
---|---|---|---|
如果您指定 | 整个后端容量 | 每个实例或每个端点的预期容量 | |
实例组N 实例,H 运行状况良好 |
max-connections-per-instance=X
|
X × N
|
(X × N)/H
|
可用区 NEGN 端点,H 运行状况良好 |
max-connections-per-endpoint=X
|
X × N
|
(X × N)/H
|
实例组 (区域代管式实例组除外) H 运行状况良好的实例 |
max-connections=Y
|
Y
|
Y/H
|
如图所示,max-connections-per-instance
和 max-connections-per-endpoint
设置是代理,它用于计算整个虚拟机实例组或整个可用区 NEG 的目标连接数上限:
- 在包含
N
实例的虚拟机实例组中,设置max-connections-per-instance=X
的含义与设置max-connections=X × N
相同。 - 在具有
N
端点的可用区 NEG 中,设置max-connections-per-endpoint=X
的含义与设置max-connections=X × N
相同。
速率均衡模式
对于 RATE
均衡模式,您必须使用以下参数之一定义目标容量:
max-rate-per-instance
(每个虚拟机):为单个虚拟机提供目标平均 HTTP 要求率。max-rate-per-endpoint
(可用区级 NEG 中的每个端点):提供单个端点的目标平均 HTTP 请求速率。max-rate
(每个可用区 NEG 和可用区实例组):为整个 NEG 或实例组提供目标平均 HTTP 要求率。 对于区域代管式实例组,请改用max-rate-per-instance
。
下表显示了目标容量参数如何定义以下内容:
- 整个后端的目标容量
- 每个实例或端点的预期目标容量
后端类型 | 目标容量 | ||
---|---|---|---|
如果您指定 | 整个后端容量 | 每个实例或每个端点的预期容量 | |
实例组N 实例,H 运行状况良好 |
max-rate-per-instance=X
|
X × N
|
(X × N)/H
|
可用区 NEGN 端点,H 运行状况良好 |
max-rate-per-endpoint=X
|
X × N
|
(X × N)/H
|
实例组 (区域代管式实例组除外) H 运行状况良好的实例 |
max-rate=Y
|
Y
|
Y/H
|
如图所示,max-rate-per-instance
和 max-rate-per-endpoint
设置是代理,它用于计算整个实例组或整个可用区 NEG 的 HTTP 请求的目标上限:
- 在包含
N
实例的实例组中,设置max-rate-per-instance=X
的含义与设置max-rate=X × N
相同。 - 在具有
N
端点的可用区 NEG 中,设置max-rate-per-endpoint=X
的含义与设置max-rate=X × N
相同。
利用率均衡模式
UTILIZATION
均衡模式没有强制的目标容量。您有多种选项取决于后端类型,如下一部分中的表格所示。
max-utilization
目标容量只能按实例组指定,并且不能应用于组中的特定虚拟机。
UTILIZATION
均衡模式没有强制的目标容量。使用 Google Cloud 控制台将后端实例组添加到后端服务时,如果选择了 UTILIZATION
均衡模式,Google Cloud 控制台会将 max-utilization
的值设置为 0.8 (80%)。除了 max-utilization
之外,UTILIZATION
均衡模式还支持更复杂的目标容量,如下一部分表中所述。
更改负载均衡器的平衡模式
对于某些负载均衡器或负载均衡器配置,您无法更改均衡模式,因为后端服务可能只有一种均衡模式。对于其他负载均衡器,您可以更改均衡模式,因为那些后端服务可以使用多个模式。
如需查看每个负载均衡器支持的均衡模式,请参阅表格:每个负载均衡器可用的均衡模式
均衡模式和目标容量设置
对于支持目标容量规范的产品,目标容量不是断路器。当给定可用区达到配置的目标容量上限时,系统会将新请求或连接分发到未达到目标容量的其他可用区。如果所有可用区都已达到目标容量,系统会通过过量填充来分配新请求或连接。
应用负载均衡器和 Cloud Service Mesh
下表列出了应用负载平衡器和 Cloud Service Mesh 的可用均衡模式和目标容量组合。
后端类型 | 平衡模式 | 目标容量规范 |
---|---|---|
实例组
|
RATE |
您必须指定以下其中一项:
|
UTILIZATION |
您可以选择指定以下其中一项:
|
|
区域 NEG
混合 NEG
|
RATE |
您必须指定以下其中一项:
|
代理网络负载均衡器
下表列出了代理网络负载平衡器的可用均衡模式和目标容量组合。
后端类型 | 平衡模式 | 目标容量规范 |
---|---|---|
实例组
|
CONNECTION |
您必须指定以下其中一项:
|
UTILIZATION |
您可以选择指定以下其中一项:
|
|
区域 NEG
混合 NEG
|
CONNECTION |
您必须指定以下其中一项:
|
直通式网络负载均衡器
下表列出了直通式网络负载平衡器的可用平衡模式和目标容量组合。
后端类型 | 平衡模式 | 目标容量规范 |
---|---|---|
实例组
|
CONNECTION |
您不能指定目标连接数上限。 |
可用区级 NEG
|
CONNECTION |
您不能指定目标连接数上限。 |
容量扩缩器
使用容量扩缩器可扩缩目标容量(最大利用率、最大速率或最大连接数),而无需更改目标容量。
如需查看 Google Cloud 参考文档,请参阅以下内容:
- Google Cloud CLI:capacity-scaler
- API:
您可以调整容量扩缩器以扩缩有效目标容量,而无需明确更改其中一个 --max-*
参数。
您可以将容量扩缩器设置为以下任一值:
- 默认值为
1
,这表示该组最多可提供其配置容量的 100%(具体取决于balancingMode
)。 - 值为
0
表示该组已完全耗尽,可用容量为 0%。如果只有一个后端挂接到后端服务,则无法配置0
设置。 - 一个介于
0.1
(10%) 到1.0
(100%) 之间的值。
以下示例演示了容量调节器如何与目标容量设置搭配使用:
如果均衡模式为
RATE
,max-rate
设置为80
RPS,且容量扩缩器为1.0
,则可用容量也是80
RPS。如果均衡模式为
RATE
,max-rate
设置为80
RPS,且容量扩缩器为0.5
,则可用容量为40
RPS (0.5 times 80
)。如果均衡模式为
RATE
,max-rate
设置为80
RPS,且容量扩缩器为0.0
,则可用容量为零 (0
)。
服务负载均衡政策
服务负载均衡政策 (serviceLbPolicy
) 是与负载均衡器的后端服务关联的资源。您可通过该政策来自定义一些参数,以控制如何在与某一后端服务关联的各个后端中分配流量:
- 自定义负载均衡算法,以确定如何在各区域或可用区之间分配流量。
- 启用自动容量排空,以便负载均衡器可以快速排空健康状况不佳的后端中的流量。
此外,您还可以将特定后端指定为“首选后端”。在这些后端的容量(即后端的均衡模式指定的目标容量)满之前,系统不会将请求发送到其余的后端。
如需了解详情,请参阅通过服务负载均衡政策优化高级负载均衡功能。
负载均衡位置政策
对于后端服务,流量分配依据均衡模式和负载均衡位置政策。均衡模式决定了应发送到每个后端(实例组或 NEG)的流量的比例。然后,负载均衡位置政策 (LocalityLbPolicy
) 会确定流量如何在每个可用区内的实例或端点之间分配。对于区域级托管式实例组,位置政策适用于每个组成可用区。
负载均衡位置政策按后端服务进行配置。您可以使用以下设置:
ROUND_ROBIN
(默认):这是默认的负载均衡位置政策设置,其中负载均衡器会按轮替顺序选择健康的后端。LEAST_REQUEST
:一种O(1)
算法,其中负载均衡器随机选择两个健康状况良好的主机,并选择活跃请求数量较少的主机。RING_HASH
:此算法会将一致哈希实现到后端。该算法具有以下属性:对一组 N 个主机添加或移除一个主机仅会影响 1/N 的请求。RANDOM
:负载均衡器随机选择一个健康状况良好的主机。ORIGINAL_DESTINATION
:负载均衡器根据客户端连接元数据选择后端。在将请求重定向到负载均衡器之前,系统会先向传入客户端请求中指定的原始目标 IP 地址打开连接。全球外部应用负载平衡器和区域外部应用负载平衡器不支持
ORIGINAL_DESTINATION
。MAGLEV
:对后端实现一致哈希,可用作RING_HASH
政策的替代方案。Maglev 不如RING_HASH
稳定,但表查找构建速度和主机选择速度更快。如需详细了解 Maglev,请参阅 Maglev 白皮书。WEIGHTED_MAGLEV
:使用健康检查报告的权重实现按实例加权负载均衡。如果使用此政策,后端服务必须配置基于非旧版 HTTP 的健康检查,并且健康检查回复应包含非标准 HTTP 响应标头字段X-Load-Balancing-Endpoint-Weight
,以指定每个实例的权重。负载均衡决策是根据上次处理的健康检查回复中报告的每个实例权重做出的,前提是每个实例都报告了有效的权重或报告了UNAVAILABLE_WEIGHT
。否则,负载均衡将保持等权重。只有外部直通式网络负载平衡器支持
WEIGHTED_MAGLEV
。如需查看示例,请参阅为外部直通式网络负载平衡器设置加权负载均衡。
只有与以下负载平衡器搭配使用的后端服务支持配置负载均衡位置政策:
- 全球外部应用负载均衡器
- 区域级外部应用负载均衡器
- 跨区域内部应用负载均衡器
- 区域级内部应用负载均衡器
- 外部直通式网络负载均衡器
请注意,负载均衡局部性政策 (localityLbPolicy
) 的有效默认值会根据您的会话亲和性设置而变化。如果未配置会话亲和性(即会话亲和性保持默认值 NONE
),则 localityLbPolicy
的默认值为 ROUND_ROBIN
。如果会话亲和性设置为 NONE
以外的值,则 localityLbPolicy
的默认值为 MAGLEV
。
如需配置负载均衡位置偏好设置政策,您可以使用 Google Cloud 控制台、gcloud (--locality-lb-policy
) 或 API (localityLbPolicy
)。
Cloud Service Mesh 和流量分发
Cloud Service Mesh 也会使用后端服务资源。具体来说,Cloud Service Mesh 使用负载均衡方案为 INTERNAL_SELF_MANAGED
的后端服务。对于内部自行管理的后端服务,流量分配依据负载平衡模式和负载平衡政策的组合。后端服务根据后端的均衡模式将流量定向到后端。然后,Cloud Service Mesh 根据负载均衡政策分配流量。
内部自行管理的后端服务支持以下平衡模式:
UTILIZATION
(如果所有后端都是实例组)RATE
(如果所有后端都是实例组或可用区级 NEG)
如果您选择 RATE
平衡模式,则必须指定最大速率、每个实例的最大速率或每个端点的最大速率。
如需详细了解 Cloud Service Mesh,请参阅 Cloud Service Mesh 概念。
后端子集
后端子集化是一项可选功能,通过为每个代理实例分配后端子集来提高性能和可扩缩性。
以下服务支持后端子集化:
- 区域级内部应用负载均衡器
- 内部直通式网络负载均衡器
区域级内部应用负载均衡器的后端子集化
跨区域内部应用负载均衡器不支持后端子集化。对于区域级内部应用负载均衡器,后端子集化会自动仅将区域级后端服务中的后端子集分配给每个代理实例。默认情况下,每个代理实例都会打开与后端服务中所有后端的连接。如果代理实例和后端的数量都较大,那么打开与所有后端的连接便可能会导致性能问题。
启用子集化后,每个代理仅会开放与部分后端的连接,从而减少与每个后端保持开放的连接数。减少每个后端同时打开的连接数可以提高后端和代理的性能。
下图展示了包含两个代理的负载均衡器。如果没有后端子集化,来自这两个代理的流量便会分配到后端服务 1 中的所有后端。 启用后端子集化后,来自每个代理的流量将分配到后端子集。来自代理 1 的流量会分配到后端 1 和 2,来自代理 2 的流量则分配到后端 3 和 4。
此外,您还可以设置 localityLbPolicy
政策,优化流向后端的负载均衡流量。如需了解详情,请参阅流量政策。
如需了解如何为内部应用负载均衡器设置后端子集化,请参阅配置后端子集化。
对内部应用负载均衡器使用后端子集化相关的注意事项
- 虽然后端子集化旨在确保所有后端实例都得到充分利用,但它可能会为每个后端接收的流量引入一些偏差。对于对后端负载均衡敏感的后端服务,建议将
localityLbPolicy
设置为LEAST_REQUEST
。 - 启用或停用子集会破坏现有连接。
- 后端子集化要求会话亲和性为
NONE
(5 元组哈希)。只有在后端子集化已停用的情况下才能使用其他会话亲和性选项。--subsetting-policy
和--session-affinity
标志的默认值都是NONE
,并且一次只能将其中一个设置为不同的值。
内部直通式网络负载均衡器的后端子集化
借助内部直通式网络负载均衡器的后端子集化,您可以扩缩内部直通网络负载均衡器以支持每项内部后端服务的更多后端虚拟机实例。
如需了解子集如何影响此限制,请参阅负载均衡资源配额和限制的“后端服务”部分。
默认情况下,子集功能会停用,这会将后端服务的分配范围限制为最多 250 个后端实例或端点。如果后端服务需要支持超过 250 个后端,您可以启用子集。启用子集后,系统将为每个客户端连接选择一个后端实例子集。
下图显示了两种操作模式之间的差异的缩减模型。
如果没有子集,系统将更好地利用一组健康的后端,并根据流量分配在所有健康的后端之间分配新的客户端连接。这种子集存在负载均衡限制,但允许负载均衡器支持超过 250 个后端。
如需了解配置说明,请参阅子集。
对内部直通式网络负载均衡器的后端子集化相关的注意事项
- 启用子集设置后,即使后端数量较小,也并非所有后端都能接收来自给定发送者的流量。
- 如需了解启用子集时的最大后端实例数,请参阅配额页面。
- 子集化仅支持 5 元组会话亲和性。
- 子集化不支持数据包镜像。
- 启用或停用子集会破坏现有连接。
- 如果本地客户端需要访问内部直通网络负载均衡器,则子集化可以显著减少从本地客户端接收连接的后端数量。这是因为 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接的区域决定了负载均衡器后端的子集。特定区域中的所有 Cloud VPN 和 Cloud Interconnect 端点使用相同的子集。不同的子集用于不同的区域。
后端子集化价格
使用后端子集化无需付费。如需了解详情,请参阅所有网络流量价格。
会话亲和性
借助会话亲和性,您可以控制负载均衡器如何采用可预测的方式为新连接选择后端,前提是健康状况良好的后端数量保持不变。这对于需要将给定用户发出的多个请求定向到同一个后端或端点的应用非常有用。此类应用通常包括广告投放、游戏或具有大量内部缓存的服务所使用的有状态服务器。
Google Cloud 负载均衡器会尽最大努力提供会话亲和性。更改后端健康检查状态、添加或移除后端、更改后端权重(包括启用或停用加权均衡)或更改后端完整度的因素(以平衡模式衡量)可能会破坏会话亲和性。
当唯一连接有“合理大量”的分布时,具有会话亲和性的负载均衡很实用。“合理大量”是指至少是后端数量的几倍。使用少量连接测试负载均衡器不能准确地表示客户端连接在后端之间的分配。
默认情况下,所有 Google Cloud 负载均衡器都使用五元组哈希 (--session-affinity=NONE
) 来选择后端,如下所示:
- 数据包的来源 IP 地址
- 数据包的来源端口(如果位于数据包的标头中)
- 数据包的目标 IP 地址
- 数据包的目的地端口(如果数据包的标头中出现)
- 数据包的协议
对于直通式负载均衡器,新连接会分配到运行状况良好的后端实例或端点(如果配置了故障切换政策,则选择活跃池中的后端实例或端点)。您可以控制以下各项:
- 已建立的连接是否运行状况不佳。如需了解详情,请参阅内部直通网络负载均衡器文档中运行状况不佳的后端的连接持久性和基于后端服务的外部直通网络负载均衡器文档中运行状况不佳的后端的连接持久性。
- 如果配置了故障切换政策,已建立的连接在故障切换和故障恢复期间是否持久存在。有关详情,请参阅内部直通网络负载均衡器文档中有关故障切换和故障恢复的连接排空和基于后端服务的外部直通网络负载均衡器文档中故障切换和故障恢复期间的连接排空。
- 从负载均衡器中移除后端时已建立的连接可以保留多长时间。如需了解详情,请参阅启用连接排空。
对于基于代理的负载均衡器,只要运行状况良好的后端实例或端点的数量保持不变,并且之前选择的后端实例或端点未达到容量上限,后续请求或连接将转到同一个后端虚拟机或端点。均衡模式的目标容量决定了后端达到容量上限的条件。
下表显示了每个产品支持的会话亲和性选项:
产品 | 会话粘性选项 |
---|---|
另外还需注意以下事项:
|
|
传统应用负载均衡器 |
|
另外还需注意以下事项:
|
|
内部直通式网络负载均衡器 |
如需了解内部直通式网络负载均衡器和会话亲和性的具体信息,请参阅内部直通网络负载均衡器概览。 |
外部直通式网络负载均衡器* |
如需了解外部直通网络负载均衡器和会话亲和性的具体信息,请参阅外部 TCP/UDP 直通网络负载均衡器概览。 |
|
|
Cloud Service Mesh |
|
* 此表记录基于后端服务的外部直通网络负载均衡器支持的会话亲和性。基于目标池的外部直通网络负载均衡器不使用后端服务。您需要通过目标池中的 sessionAffinity
参数为外部直通网络负载均衡器设置会话亲和性。
配置会话亲和性时请注意以下几点:
为进行身份验证或为了安全起见,请勿依赖会话亲和性。除了基于 Cookie 的有状态会话亲和性之外,会话亲和性设计为在服务后端和运行状况良好的后端数量发生变化时被破坏。如需了解详情,请参阅失去会话亲和性。
--session-affinity
和--subsetting-policy
标志的默认值都是NONE
,并且一次只能将其中一个设置为不同的值。
会话亲和性的类型
以下几个部分介绍了不同类型的会话亲和性:
客户端 IP、无目标亲和性
客户端 IP、无目标会话亲和性 (CLIENT_IP_NO_DESTINATION
) 是一个仅基于每个收到的数据包的来源 IP 地址的一元组哈希。此会话亲和性仅适用于内部直通式网络负载平衡器。
如果您需要同一后端虚拟机仅根据数据包的来源 IP 地址(而不考虑数据包目标 IP 地址)处理来自客户端的所有数据包,此选项会非常有用。当内部直通网络负载平衡器是静态路由的下一个跃点时,通常会出现这些情况。如需了解详情,请参阅会话亲和性和下一个跃点内部直通式网络负载平衡器。
客户端 IP 亲和性
客户端 IP 会话亲和性 (CLIENT_IP
) 是根据数据包的来源 IP 地址和目标 IP 地址创建的二元组哈希。客户端 IP 会话亲和性适用于所有使用后端服务的 Google Cloud 负载平衡器。外部直通式网络负载均衡器将此会话亲和性选项称为“客户端 IP、目的地 IP”。
使用客户端 IP 亲和性时,请注意以下几点:
只有在数据包直接发送到负载均衡器时,数据包目的地 IP 地址才与负载均衡器转发规则的 IP 地址相同。
通过静态路由路由到下一个跃点内部直通网络负载均衡器的数据包的目标 IP 地址与负载均衡器转发规则的 IP 地址不匹配。如需了解重要详情,请参阅会话亲和性和下一个跃点内部直通式网络负载平衡器。
如果数据包在传送到 Google Cloud 负载均衡器之前由中间 NAT 或代理系统处理,则数据包的来源 IP 地址可能与与原始客户端关联的 IP 地址不匹配。在许多客户端共用相同有效来源 IP 地址的情况下,某些后端虚拟机可能会比其他后端虚拟机接收更多连接或请求。
生成的 Cookie 亲和性
使用基于生成的 Cookie 的亲和性时,负载均衡器会在 Set-Cookie
标头中添加 HTTP Cookie,以响应初始 HTTP 请求。
生成的 Cookie 的名称因负载平衡器的类型而异。以下产品支持生成的 Cookie:
产品 | Cookie 名称 |
---|---|
全局外部应用负载均衡器 | GCLB |
传统应用负载均衡器 | GCLB |
区域外部应用负载均衡器 | GCILB |
跨区域内部应用负载均衡器 | GCILB |
区域级内部应用负载均衡器 | GCILB |
Cloud Service Mesh | GCILB |
生成的 Cookie 的路径属性始终是正斜线 (/
),因此它适用于同一网址映射上的所有后端服务(前提是其他后端服务也使用生成的 Cookie 亲和性)。
您可以使用 affinityCookieTtlSec
后端服务参数将 Cookie 的存留时间 (TTL) 值配置为介于 0
到 1,209,600
秒(包括这两个数值)之间。如果未指定 affinityCookieTtlSec
,则默认 TTL 值为 0
。
当客户端在 HTTP 请求的 Cookie
请求标头中包含生成的会话亲和性 Cookie 时,只要会话亲和性 Cookie 保持有效,负载均衡器就会将这些请求定向到同一后端实例或端点。为此,您需要将 Cookie 值映射到引用特定后端实例或端点的索引,并确保满足生成的 Cookie 会话亲和性要求。
如需使用生成的 Cookie 粘性,请配置以下平衡模式和 localityLbPolicy
设置:
- 对于后端实例组,请使用
RATE
平衡模式。 - 对于后端服务的
localityLbPolicy
,请使用RING_HASH
或MAGLEV
。如果您未明确设置localityLbPolicy
,负载均衡器会将MAGLEV
用作隐式默认值。
如需了解详情,请参阅失去会话亲和性。
标头字段亲和性
借助标头字段亲和性,系统会根据后端服务的 consistentHash.httpHeaderName
字段中的 HTTP 标头的值将请求路由到后端。如需将请求分发到所有可用后端,每个客户端都需要使用不同的 HTTP 标头值。
以下负载平衡器使用标头字段亲和性:
- Cloud Service Mesh
- 跨区域内部应用负载均衡器
- 全球外部应用负载均衡器
- 区域级外部应用负载均衡器
- 区域级内部应用负载均衡器
如果满足以下条件,则支持标头字段亲和性:
- 负载均衡位置政策是 RING_HASH 或 MAGLEV。
- 后端服务的
consistentHash
指定 HTTP 标头的名称 (httpHeaderName
)。
如需了解哪些产品支持标头字段亲和性,请参阅表格:受支持的会话亲和性设置。
HTTP Cookie 亲和性
使用基于 HTTP Cookie 的亲和性时,负载均衡器会在 Set-Cookie
标头中添加 HTTP Cookie,以响应初始 HTTP 请求。您可以指定 Cookie 的名称、路径和存留时间 (TTL)。
以下产品支持基于 HTTP Cookie 的亲和性:
- 所有应用负载平衡器
- Cloud Service Mesh
您可以使用以下后端服务参数和有效值,以秒、秒的一部分(以纳秒为单位)或秒和秒的一部分(以纳秒为单位)的组合来配置 Cookie 的 TTL 值:
consistentHash.httpCookie.ttl.seconds
可设置为介于0
和315576000000
之间的值(包括这两个数值)。consistentHash.httpCookie.ttl.nanos
可设置为介于0
和999999999
之间的值(包括这两个数值)。由于单位为纳秒,因此999999999
表示.999999999
秒。
如果未指定 consistentHash.httpCookie.ttl.seconds
和 consistentHash.httpCookie.ttl.nanos
,系统会改为使用 affinityCookieTtlSec
后端服务参数的值。如果未指定 affinityCookieTtlSec
,则默认 TTL 值为 0
。
当客户端在 HTTP 请求的 Cookie
请求标头中包含 HTTP 会话亲和性 Cookie 时,只要会话亲和性 Cookie 保持有效,负载均衡器就会将这些请求定向到同一后端实例或端点。为此,您需要将 Cookie 值映射到引用特定后端实例或端点的索引,并确保满足生成的 Cookie 会话亲和性要求。
如需使用 HTTP Cookie 亲和性,请配置以下负载均衡模式和 localityLbPolicy
设置:
- 对于后端实例组,请使用
RATE
平衡模式。 - 对于后端服务的
localityLbPolicy
,请使用RING_HASH
或MAGLEV
。如果您未明确设置localityLbPolicy
,负载均衡器会将MAGLEV
用作隐式默认值。
如需了解详情,请参阅失去会话亲和性。
基于有状态 Cookie 的会话亲和性
使用基于有状态 Cookie 的亲和性时,负载均衡器会在 Set-Cookie
标头中添加 HTTP Cookie,以响应初始 HTTP 请求。您可以指定 Cookie 的名称、路径和存留时间 (TTL)。
除了传统应用负载平衡器之外,所有应用负载平衡器都支持基于 Cookie 的有状态亲和性。
您可以使用秒、秒数小数部分(以纳秒为单位)或秒数和秒数小数部分(以纳秒为单位)来配置 Cookie 的 TTL 值。strongSessionAffinityCookie.ttl
表示的时长不得设置为超过两周(1,209,600 秒)的值。
Cookie 的值通过在值本身中对所选实例或端点进行编码来标识所选后端实例或端点。只要 Cookie 有效,如果客户端在后续 HTTP 请求的 Cookie
请求标头中包含会话亲和性 Cookie,负载均衡器就会将这些请求定向到所选的后端实例或端点。
与其他会话亲和性方法不同:
基于有状态 Cookie 的亲和性对均衡模式或负载均衡位置政策 (
localityLbPolicy
) 没有特定要求。当自动扩缩功能向代管式实例组添加新实例时,基于 Cookie 的有状态亲和性不会受到影响。
当自动扩缩功能从代管式实例组中移除实例时,基于 Cookie 的有状态亲和性不会受到影响,除非移除的是所选实例。
当自动修复功能从代管式实例组中移除实例时,基于 Cookie 的有状态亲和性不会受到影响,除非移除的是所选实例。
如需了解详情,请参阅失去会话亲和性。
基于 Cookie 的亲和性 TTL 为零的含义
所有基于 Cookie 的会话亲和性(例如生成的 Cookie 亲和性、HTTP Cookie 亲和性和基于有状态 Cookie 的亲和性)都具有 TTL 属性。
TTL 为零秒表示负载均衡器不会向 Cookie 分配 Expires
属性。在这种情况下,客户端会将 Cookie 视为会话 Cookie。会话的定义因客户端而异:
某些客户端(例如网络浏览器)会在整个浏览会话期间保留 Cookie。这意味着,Cookie 会在多个请求中保留,直到应用关闭为止。
其他客户端会将会话视为单个 HTTP 请求,并在会话结束后立即丢弃 Cookie。
失去会话亲和性
应用负载平衡器和代理网络负载平衡器的所有会话亲和性选项都需要满足以下条件:
所选的后端实例或端点必须保持配置为后端。如果发生以下任一事件,会话亲和性可能会破坏:
您将所选实例从其实例组中移除。
托管式实例组自动扩缩或自动修复功能会将所选实例从其代管式实例组中移除。
您从所选端点的 NEG 中移除该端点。
您从后端服务中移除包含所选实例或端点的实例组或 NEG。
所选的后端实例或端点必须保持良好运行状态。如果所选实例或端点未通过健康检查,会话亲和性可能会被破坏。
对于全球外部应用负载平衡器、传统应用负载平衡器、全球外部代理网络负载平衡器和传统代理网络负载平衡器,如果在路由路径发生变化后,后续请求或连接使用了不同的第一层 Google Front End (GFE),会导致会话亲和性中断。如果从互联网上的客户端到 Google 的路由路径在请求或连接之间发生变化,则系统可能会选择其他第一层 GFE。
除了基于有状态 Cookie 的会话亲和性之外,应用负载平衡器和代理网络负载平衡器的所有会话亲和性选项都具有以下额外要求:
包含所选实例或端点的实例组或 NEG 不得已满载(根据其目标容量定义)。(对于区域级代管式实例组,包含所选实例的实例组的可用区组件不得已满。)如果实例组或 NEG 已满载,而其他实例组或 NEG 未满载,则会话粘性可能会被破坏。由于使用
UTILIZATION
均衡模式时满载情况可能会以不可预测的方式发生变化,因此您应使用RATE
或CONNECTION
均衡模式,以尽量减少会话亲和性可能破坏的情况。配置的后端实例或端点的总数必须保持不变。当发生以下事件中的至少 1 个事件时,已配置的后端实例或端点的数量会发生变化,并且会话亲和性可能会中断:
添加新的实例或端点:
- 您可以将实例添加到后端服务上的现有实例组。
- 托管式实例组自动扩缩功能会向后端服务上的托管式实例组添加实例。
- 您将端点添加到后端服务上的现有 NEG。
- 您将非空实例组或 NEG 添加到后端服务。
移除任何实例或端点(而不仅仅是所选的实例或端点):
- 您从实例组后端移除任何实例。
- 托管式实例组自动扩缩或自动修复功能会从代管式实例组后端移除任何实例。
- 您从 NEG 后端移除任何端点。
- 您从后端服务中移除所有现有的非空后端实例组或 NEG。
运行状况良好的后端实例或端点的总数必须保持不变。当发生以下事件中的至少 1 个事件时,运行状况良好的后端实例或端点的数量会发生变化,并且会话亲和性可能会被破坏:
- 任何实例或端点都通过了健康检查,从不健康状态转变为健康状态。
- 任何实例或端点都未通过健康检查,从健康状态转变为不健康状态或超时。
后端服务超时
大多数 Google Cloud 负载均衡器都具有后端服务超时。默认值是 30 秒。 允许的超时值的完整范围为 1 - 2,147,483,647 秒。
对于使用 HTTP、HTTPS 或 HTTP/2 协议的外部应用负载均衡器和内部应用负载均衡器,后端服务超时为 HTTP(S) 流量的请求和响应超时。
如需详细了解每个负载均衡器的后端服务超时,请参阅以下内容:
对于外部代理网络负载均衡器,超时为空闲超时。如需在删除连接之前允许更多或更少时间,请更改超时值。此空闲超时也用于 WebSocket 连接。
对于内部直通式网络负载均衡器和外部直通网络负载均衡器,您可以使用
gcloud
或 API 设置后端服务超时的值,但系统会忽略该值。后端服务超时对于这些直通负载均衡器没有任何意义。
- 对于 Cloud Service Mesh,无代理 gRPC 服务不支持后端服务超时字段(使用
timeoutSec
指定)。对于此类服务,请使用maxStreamDuration
字段配置后端服务超时。这是因为 gRPC 不支持timeoutSec
的语义,该函数指定了在发出请求后等待后端返回完整响应的时间。gRPC 的超时指定了从数据流开头直到响应完全处理的时间(包括所有重试)。
健康检查
其后端为实例组或可用区级 NEG 的每个后端服务都必须进行相关的健康检查。 使用无服务器 NEG 或全球互联网 NEG 作为后端的后端服务不得引用健康检查。
如果使用 Google Cloud 控制台创建负载均衡器,您可以在创建负载均衡器时创建健康检查(如果需要),也可以引用现有健康检查。
当您通过 Google Cloud CLI 或 API 创建使用实例组或可用区 NEG 后端的后端服务时,必须引用现有健康检查。如需详细了解所需健康检查的类型和范围,请参阅“健康检查概览”中的负载均衡器指南。
如需了解详情,请参阅以下文档:
在后端服务资源上启用的额外功能
部分后端服务支持以下可选功能。
Cloud CDN
Cloud CDN 使用 Google 的全球边缘网络,在更靠近用户的位置传送内容,从而为您的网站和应用提速。全球外部应用负载均衡器使用的后端服务已启用 Cloud CDN。负载均衡器提供了用于接收请求的前端 IP 地址和端口以及用于响应这些请求的后端。
如需了解详情,请参阅 Cloud CDN 文档。
Cloud CDN 与 IAP 不兼容。您无法在同一后端服务中同时启用这两种功能。
Google Cloud Armor
如果您使用以下某个负载均衡器,则可以通过在创建负载均衡器期间在后端服务上启用 Google Cloud Armor 来为应用增加额外的保护:
如果您使用 Google Cloud 控制台,则可以执行以下操作之一:
- 选择现有的 Google Cloud Armor 安全政策。
- 接受包含可自定义的名称、请求计数、间隔时间、键和速率限制参数的默认 Google Cloud Armor 速率限制安全政策的配置。如果您将 Google Cloud Armor 与上游代理服务(例如 CDN 提供商)搭配使用,则应将
Enforce_on_key
设置为 XFF IP 地址。 - 通过选择无来选择停用 Google Cloud Armor 保护。
IAP
借助 IAP,您可以为通过 HTTPS 访问的应用创建一个中央授权层,从而可以使用应用级访问权限控制模型,而不依靠网络级防火墙。某些应用负载均衡器支持 IAP。
IAP 与 Cloud CDN 不兼容。您无法在同一后端服务中同时启用这两种功能。
高级流量管理功能
如需了解在与负载平衡器关联的后端服务和网址映射上配置的高级流量管理功能,请参阅以下内容:
API 与 gcloud
参考文档
如需详细了解后端服务资源的属性,请参阅以下参考文档:
- 全球性后端服务 API 资源
后续步骤
如需获得说明如何在负载均衡中使用后端服务的相关文档和信息,请查看以下内容:
对于相关视频: