后端服务定义了 Cloud Load Balancing 如何分配流量。后端服务配置包含一组值,例如用于连接到后端的协议、各种分发和会话设置、健康检查和超时。这些设置可对负载均衡器的行为进行精细控制。如果需要快速开始,大多数设置都具有允许轻松配置的默认值。后端服务的范围为全球或区域。
负载均衡器、Envoy 代理和无代理 gRPC 客户端使用后端服务资源中的配置信息执行以下操作:
- 将流量定向到正确的后端(实例组或网络端点组 (NEG))。
- 根据均衡模式(这是每个后端的设置)分配流量。
- 确定哪个健康检查正在监控后端的运行状况。
- 指定“会话亲和性”。
- 确定是否已启用其他服务,包括仅适用于特定负载均衡器的以下服务:
- Cloud CDN
- Google Cloud Armor 安全政策
- Identity-Aware Proxy
您可以在创建后端服务或将后端服务添加到后端服务时设置这些值。
下表汇总了哪些负载均衡器使用后端服务。您使用的产品还决定了后端服务的数量上限、后端服务的范围、支持的后端类型以及后端服务的负载均衡方案。负载均衡方案是 Google 用于对转发规则和后端服务进行分类的标识符。每个负载均衡产品都会为其转发规则和后端服务使用一种负载均衡方案。部分方案在产品之间共享。
产品 | 最大后端服务数量 | 后端服务的范围 | 受支持的后端类型 | 负载均衡方案 |
---|---|---|---|---|
全球外部 HTTP(S) 负载均衡器 | 多个 | 全球 | 每项后端服务都支持以下后端组合之一:
|
EXTERNAL_MANAGED |
全球外部 HTTP(S) 负载均衡器(经典版) | 多个 | 全球1 | 每项后端服务都支持以下后端组合之一:
|
外部 |
区域级外部 HTTP(S) 负载均衡器 | 多个 | 区域级 | 每项后端服务都支持以下后端组合之一:
|
EXTERNAL_MANAGED |
内部 HTTP(S) 负载均衡器 | 多个 | 区域级 | 每项后端服务都支持以下后端组合之一:
|
INTERNAL_MANAGED |
外部 SSL 代理负载均衡器 | 1 | 全球1 | 后端服务支持以下后端组合之一:
|
外部 |
外部 TCP 代理负载均衡器 | 1 | 全球1 | 后端服务支持以下后端组合之一:
|
外部 |
内部区域级 TCP 代理负载均衡器 | 1 | 区域级 | 后端服务支持以下后端组合之一:
|
INTERNAL_MANAGED |
网络负载均衡器 | 1 | 区域级 | 后端服务支持以下后端组合:
|
EXTERNAL |
内部 TCP/UDP 负载均衡器 | 1 | 范围为区域,但可以配置为可在全球访问 | 后端服务支持以下后端组合之一:
|
INTERNAL |
Traffic Director | 多个 | 全球 | 每项后端服务都支持以下后端组合之一:
|
INTERNAL_SELF_MANAGED |
- 转发规则及其外部 IP 地址是区域性的。
- 连接到后端服务的所有后端都必须与转发规则位于同一区域。
后端
后端是指接收来自 Google Cloud 负载均衡器、Traffic Director 配置的 Envoy 代理或无代理 gRPC 客户端的流量的一个或多个端点。后端有多种类型:
- 包含虚拟机实例的实例组。实例组可以是代管实例组(无论是否启用自动扩缩功能),也可以是非代管实例组。多个后端服务可以引用实例组,但引用该实例组的所有后端服务都必须使用相同的均衡模式。
- 可用区级 NEG
- 无服务器 NEG
- 互联网 NEG
- 混合连接 NEG
- Private Service Connect NEG
- Service Directory 服务绑定
您无法删除与后端服务关联的后端实例组或 NEG。在删除实例组或 NEG 之前,必须先从引用它的所有后端服务中将其作为后端移除。
实例组
本部分介绍实例组如何使用后端服务。
后端虚拟机和外部 IP 地址
后端服务中的后端虚拟机不需要外部 IP 地址:
- 对于全球外部 HTTP(S) 负载均衡器、外部 SSL 代理负载均衡器和外部 TCP 代理负载均衡器:客户端与托管负载均衡器的外部 IP 地址的 Google Front End (GFE) 通信。GFE 通过以下方式与后端虚拟机或端点通信:将数据包发送到通过将后端的 VPC 网络的标识符与后端的内部 IPv4 地址连接而创建的内部地址。对于实例组后端,内部 IPv4 地址始终是与虚拟机的
nic0
接口对应的主要内部 IPv4 地址。对于可用区级 NEG 中的GCE_VM_IP_PORT
端点,您可以将端点的 IPv4 地址指定为与虚拟机的任何 NIC 关联的主要 IPv4 地址,也可以指定为与虚拟机的任何 NIC 关联的别名 IP 地址范围内的任何 IPv4 地址。通过特殊路由,可以实现 GFE 与后端虚拟机或端点之间的通信。 - 对于区域级外部 HTTP(S) 负载均衡器:客户端与托管负载均衡器的外部 IP 地址的 Envoy 代理通信。Envoy 代理通过以下方式与后端虚拟机或端点通信:将数据包发送到通过将后端的 VPC 网络的标识符与后端的内部 IPv4 地址连接而创建的内部地址。
- 对于实例组后端,内部 IPv4 地址始终是与虚拟机
nic0
接口对应的主要内部 IPv4 地址,并且nic0
必须与负载均衡器位于同一网络中。 - 对于可用区级 NEG 中的
GCE_VM_IP_PORT
端点,您可以将端点的 IPv4 地址指定为虚拟机 NIC 的主要 IPv4 地址,也可以指定为虚拟机 NIC 的别名 IP 范围内的 IPv4 地址,前提是虚拟机的 NIC 与负载均衡器位于同一网络中。
- 对于实例组后端,内部 IPv4 地址始终是与虚拟机
- 对于网络负载均衡器:客户端通过 Google 的 Maglev 直通式负载均衡基础架构直接与后端通信。数据包被路由和递送至后端虚拟机的
nic0
接口,并保留原始来源和目标 IP 地址。后端使用直接服务器返回来响应客户端。用于选择后端和跟踪连接的方法是可配置的。
已命名端口
后端服务的已命名端口特性仅适用于使用实例组后端的代理负载均衡器。已命名端口定义用于代理(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 引用服务附件。
内部 TCP/UDP 负载均衡器和外部 TCP/UDP 网络负载均衡器不使用已命名端口。这是因为它们是直通式负载均衡器,用于将连接直接路由到后端,而不是创建新连接。数据包被传送到后端,并保留负载均衡器的转发规则的目的地 IP 地址和端口。
如需了解如何创建已命名端口,请参阅以下说明:
- 非代管实例组:使用已命名端口
- 代管实例组:将已命名端口分配给代管实例组
有关实例组的限制和指南
在为负载均衡器创建实例组时,请记住以下限制和指南:
不要将一个虚拟机放在多个负载均衡实例组中。如果虚拟机是两个或更多非代管实例组的成员,或者是一个代管实例组和一个或多个非代管实例组的成员,则 Google Cloud 限制您一次只能将其中一个实例组用作特定后端服务的后端。
如果您需要一个虚拟机参与多个负载均衡器,则必须将同一实例组用作每个后端服务上的后端。
对于代理负载均衡器,当您想要将流量均衡到不同端口时,请在一个实例组上指定所需的命名端口,并让每个后端服务订阅一个唯一的命名端口。
您可以将同一实例组用作多个后端服务的后端。在这种情况下,后端必须使用兼容的平衡模式。兼容表示平衡模式必须相同,或者它们必须是
CONNECTION
和RATE
的组合。不兼容的平衡模式组合如下:
CONNECTION
-UTILIZATION
RATE
-UTILIZATION
请思考以下示例:
- 您有两个后端服务:
external-https-backend-service
用于外部 HTTP(S) 负载均衡器,internal-tcp-backend-service
用于内部 TCP/UDP 负载均衡器。 - 您在
internal-tcp-backend-service
中使用名为instance-group-a
的实例组。 - 在
internal-tcp-backend-service
中,您必须应用CONNECTION
平衡模式,因为内部 TCP/UDP 负载均衡器仅支持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
端点(仅支持内部 TCP/UDP 负载均衡器)。GCE_VM_IP_PORT
端点。
如需查看哪些产品支持可用区级 NEG 后端,请参阅表格:后端服务和受支持的后端类型。
如需了解详情,请参阅可用区级 NEG 概览。
互联网网络端点组
互联网 NEG 是定义外部后端的全球资源。外部后端是在本地基础架构中或由第三方提供的基础架构上托管的后端。
互联网 NEG 是主机名或 IP 地址以及可选端口的组合。互联网 NEG 有两种类型的网络端点:
INTERNET_FQDN_PORT
。可公开解析的完全限定域名和可选端口,例如backend.example.com:443
(默认端口:对于 HTTP 为80
,对于 HTTPS 为443
)。INTERNET_IP_PORT
。可公开访问的 IP 地址和可选端口,例如203.0.113.8:80
或203.0.113.8:443
(默认端口:对于 HTTP 为80
,对于 HTTPS 为443
)。
如需查看哪些产品支持互联网 NEG 后端,请参阅表格:后端服务和受支持的后端类型。
如需详细了解互联网 NEG,请参阅互联网网络端点组概览。
无服务器网络端点组
网络端点组 (NEG) 为负载均衡器指定了一组后端端点。无服务器 NEG 是指向 Cloud Run、App Engine、Cloud Functions 或 API Gateway 服务的后端。
无服务器 NEG 可以表示以下各项之一:
- 一项 Cloud Run 服务或一组服务。
- 一个 Cloud Functions 函数或一组函数。
- 一个 App Engine 应用(标准或 Flex 应用)、应用内的一项特定服务、应用的某一特定版本或一组服务。
- 一种 API Gateway,用于通过所有服务一致的 REST API 访问您的服务,而不考虑服务实现。此功能目前为预览版。
如需为共享网址格式的无服务器应用设置无服务器 NEG,请使用网址掩码。网址掩码是网址架构的模板(例如 example.com/<service>
)。无服务器 NEG 将使用此模板从传入请求的网址中提取 <service>
名称,并将请求路由到相同名称的匹配的 Cloud Run、Cloud Functions 或 App Engine 服务。
如需查看哪些负载均衡器支持无服务器 NEG 后端,请参阅表格:后端服务和受支持的后端类型。
如需详细了解无服务器 NEG,请参阅无服务器网络端点组概览。
服务绑定
服务绑定是在 Traffic Director 中的后端服务与在 Service Directory 中注册的服务之间建立连接的后端。后端服务可以引用多个服务绑定。具有服务绑定的后端服务不能引用任何其他类型的后端。
混合后端
将不同类型的后端添加到单个后端服务时,以下使用注意事项适用:
- 单个后端服务不能同时使用实例组和可用区级 NEG。
- 您可以在同一后端服务中使用不同类型的实例组的组合。例如,单个后端服务可以引用代管式实例组和非代管式实例组的组合。如需详细了解哪些后端与哪些后端服务兼容,请参阅上一部分中的表格。
- 在某些代理负载均衡器中,您可以结合使用可用区级 NEG(具有
GCE_VM_IP_PORT
端点)和混合连接 NEG(具有NON_GCP_PRIVATE_IP_PORT
端点)来配置混合负载均衡。如需查看哪些负载均衡器具有此功能,请参阅表格:后端服务和受支持的后端类型。
后端协议
创建后端服务时,您必须指定用于与后端通信的协议。每个后端服务只能指定一个协议,您不能指定次要协议来作为后备。
哪种协议有效取决于负载均衡器的类型,或者您是否使用 Traffic Director。
产品 | 负载均衡方案 | 后端服务协议选项 |
---|---|---|
全球外部 HTTP(S) 负载均衡器 | EXTERNAL_MANAGED | HTTP、HTTPS、HTTP/2 |
全球外部 HTTP(S) 负载均衡器(经典版) | 外部 | HTTP、HTTPS、HTTP/2 |
区域级外部 HTTP(S) 负载均衡器 | EXTERNAL_MANAGED | HTTP、HTTPS、HTTP/2 |
外部 SSL 代理负载均衡器 | EXTERNAL | SSL 或 TCP |
外部 TCP 代理负载均衡器 | EXTERNAL | TCP 或 SSL |
内部 HTTP(S) 负载均衡器 | INTERNAL_MANAGED | HTTP、HTTPS、HTTP/2 |
内部区域级 TCP 代理负载均衡器 | INTERNAL_MANAGED | TCP |
网络负载均衡器 | 外部 | TCP、UDP 或UNSPECIFIED |
内部 TCP/UDP 负载均衡器 | 内部 | TCP 或 UDP |
Traffic Director | INTERNAL_SELF_MANAGED | HTTP、HTTPS、HTTP/2、gRPC、TCP |
更改后端服务的协议,会使后端在几分钟的时间里无法通过负载均衡器访问。
在负载均衡器和后端之间进行的加密
如需了解此主题,请参阅后端加密。
流量分配
后端行为的某些方面由后端服务资源中以下字段的值决定:
- 平衡模式定义了负载均衡器如何为新请求或连接衡量后端就绪情况。
- 目标容量,用于定义目标最大连接数、目标最大速率或目标最大 CPU 利用率。
- 容量扩缩器,可调整总体可用容量,而无需修改目标容量。
均衡模式
均衡模式确定负载均衡器的后端或 Traffic Director 是可以处理额外的流量还是已完全加载。Google Cloud 有三种均衡模式:
CONNECTION
:根据后端可以处理的并发连接数确定负载的分配方式。RATE
:每秒的目标请求次数 (RPS) 或查询次数 (QPS) 上限。如果所有后端都达到或超过容量,则实际 RPS/QPS 可以超过目标 RPS/QPS 上限。UTILIZATION
:根据实例组中的实例利用率来确定负载的分配方式。
适用于每种负载均衡器的均衡模式
在后端服务中添加后端时可设置均衡模式。负载均衡器可用的均衡模式取决于负载均衡器的类型和后端的类型。
直通式负载均衡器需要 CONNECTION
均衡模式,但不支持设置任何目标容量。
HTTP(S) 代理负载均衡器对于实例组后端支持 RATE
或 UTILIZATION
均衡模式,对于具有 GCE_VM_IP_PORT
端点的可用区级 NEG 支持 RATE
均衡模式,对于混合 NEG(NON_GCP_PRIVATE_IP_PORT
端点)支持 RATE
均衡模式。对于任何其他类型的受支持的后端,必须省略均衡模式。
- 对于全球外部 HTTP(S) 负载均衡器(经典版),系统将根据客户端的位置以及区域是否具有可用容量,根据负载均衡模式的目标容量选择区域。然后,在某个区域内,使用均衡模式的目标容量计算要发送到该区域中的每个后端的请求数的比例。然后,请求或连接会在后端的实例或端点之间以轮询方式分配。
- 对于全球外部 HTTP(S) 负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量,根据负载均衡模式的目标容量选择区域。在一个区域内,使用均衡模式的目标容量计算要发送到该区域中每个后端(实例组或 NEG)的请求数量的比例。在每个实例组或 NEG 中,负载均衡政策 (
LocalityLbPolicy
) 确定流量如何分配到组内的实例或端点。 - 对于区域级外部 HTTP(S) 负载均衡器和内部 HTTP(S) 负载均衡器,使用均衡模式的目标容量计算要发送到每个后端(实例组或 NEG)的请求数。在每个实例组或 NEG 中,负载均衡政策 (
LocalityLbPolicy
) 确定流量如何分配到组内的实例或端点。
TCP/SSL 代理负载均衡器对于实例组后端支持 CONNECTION
或 UTILIZATION
均衡模式,对于具有 GCE_VM_IP_PORT
端点的可用区级 NEG 支持 CONNECTION
均衡模式,对于混合 NEG(NON_GCP_PRIVATE_IP_PORT
端点)支持 CONNECTION
均衡模式。对于任何其他类型的受支持的后端,必须省略均衡模式。
对于外部 TCP 代理负载均衡器和外部 SSL 代理负载均衡器,系统会根据客户端的位置以及区域是否具有可用容量(基于负载均衡模式的目标容量确定)来选择区域。然后,系统会在某个区域内使用负载均衡模式的目标容量来计算传送至该区域中每个后端(实例组或 NEG)的请求或连接数的比例。在负载均衡器选择后端后,系统会在每个后端中的虚拟机实例或网络端点之间以轮循方式分配请求或连接。
对于区域级内部 TCP 代理负载均衡器,系统会使用负载均衡模式的目标容量计算要传送至每个后端(实例组或 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(NON_GCP_PRIVATE_IP_PORT 端点)(仅支持内部区域级 TCP 代理负载均衡器) |
CONNECTION |
|
网络负载均衡器 | 实例组 | CONNECTION |
内部 TCP/UDP 负载均衡器 | 实例组 | CONNECTION |
可用区级 NEG(GCE_VM_IP 端点) |
CONNECTION |
如果与后端服务相关联的所有虚拟机的平均利用率低于 10%,则 Google Cloud 可能会首选特定区域。当您使用代管式区域实例组、不同可用区中的代管式可用区实例组以及非代管式可用区实例组时,可能会发生这种情况。随着发送到负载均衡器的流量越来越多,这种区域不均衡问题会自动得以解决。
如需了解详情,请参阅 gcloud compute backend-services add-backend。
目标容量
每个均衡模式都有一个对应的目标容量,用于定义下列目标最大值之一:
- 连接数
- 费率
- CPU 占用率
对于每种均衡模式,目标容量都不是断路器。在某些情况下,负载均衡器将超过最大值,例如在所有后端虚拟机或端点都已达到最大值的情况下。
连接均衡模式
对于 CONNECTION
均衡模式,目标容量可定义目标最大并发连接数。除了内部 TCP/UDP 负载均衡器和网络负载均衡器之外,您必须使用以下某一设置来指定目标连接数上限:
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
均衡模式还支持更复杂的目标容量,如下一部分表中所述。
更改负载均衡器的平衡模式
对于某些负载均衡器或负载均衡器配置,您无法更改均衡模式,因为后端服务可能只有一种均衡模式。对于其他负载均衡器,您可以更改均衡模式,因为那些后端服务可以使用多个模式。
如需查看每个负载均衡器支持的均衡模式,请参阅表格:每个负载均衡器可用的均衡模式
均衡模式和目标容量设置
此表总结了针对给定负载均衡器和后端类型的所有可能的均衡模式。它还显示了您必须使用均衡模式指定的可用或必需的容量设置。
负载均衡器 | 后端类型 | 均衡模式 | 目标容量 |
---|---|---|---|
|
实例组 | RATE |
您必须指定以下其中一项:
|
UTILIZATION |
您可以选择指定以下其中一项:
|
||
可用区级 NEG (GCP_VM_IP_PORT ) |
RATE |
您必须指定以下其中一项:
|
|
混合 NEG (NON_GCP_PRIVATE_IP_PORT ) |
RATE |
您必须指定以下其中一项:
|
|
|
实例组 | CONNECTION |
您必须指定以下其中一项:
|
UTILIZATION |
您可以选择指定以下其中一项:
|
||
可用区级 NEG (GCP_VM_IP_PORT ) |
CONNECTION |
您必须指定以下其中一项:
|
|
混合 NEG (NON_GCP_PRIVATE_IP_PORT )(受支持内部区域级 TCP 代理负载均衡器) |
CONNECTION |
您必须指定以下其中一项:
|
|
内部 TCP/UDP 负载均衡器 | 实例组 | CONNECTION |
您不能指定目标连接数上限。 |
可用区级 NEG (GCP_VM_IP ) |
CONNECTION |
您不能指定目标连接数上限。 | |
外部 TCP/UDP 网络负载均衡器 | 实例组 | CONNECTION |
您不能指定目标连接数上限。 |
容量扩缩器
对于某些代理负载均衡器配置,您可以调整容量扩缩器以扩缩有效目标容量(有效目标利用率、有效目标速率或有效目标连接),而无需明确更改其中一个 --max-*
参数。
默认情况下,容量扩缩器的值为 1.0
(100%)。您可以将容量扩缩器设置为以下任一值:
- 确切的
0.0
(可防止所有新连接) - 一个介于
0.1
(10%) 和1.0
(100%) 之间的值
以下示例演示了容量调节器如何与目标容量设置搭配使用。
如果均衡模式是
RATE
,则最大速率设置为 80 RPS,且容量扩缩器为1.0
,有效目标容量也是 80 RPS。如果均衡模式是
RATE
,则最大利用率设置为 80 RPS,且容量扩缩器为0.5
,有效目标容量为 40 RPS (0.5 times 80
)。如果均衡模式是
RATE
,则最大利用率设置为 80 RPS,且容量扩缩器为0.0
,有效目标容量为零。容量扩缩器为零将使后端不执行轮替。
Traffic Director 和流量分配
Traffic Director 也会使用后端服务资源。具体来说,Traffic Director 使用负载均衡方案为 INTERNAL_SELF_MANAGED
的后端服务。对于内部自行管理的后端服务,流量分配依据负载均衡模式和负载均衡政策的组合。后端服务根据后端的均衡模式将流量定向到后端。然后,Traffic Director 根据负载均衡政策分配流量。
内部自行管理的后端服务支持以下均衡模式:
UTILIZATION
(如果所有后端都是实例组)RATE
(如果所有后端都是实例组或可用区级 NEG)
如果您选择 RATE
均衡模式,则必须指定最大速率、每个实例的最大速率或每个端点的最大速率。
如需详细了解 Traffic Director,请参阅 Traffic Director 概念。
后端子集
后端子集化是一项可选功能,通过为每个代理实例分配后端子集来提高性能和可扩缩性。
以下服务支持后端子集化:
- 内部 HTTP(S) 负载均衡
- 内部 TCP/UDP 负载均衡
内部 HTTP(S) 负载均衡器的后端子集化
对于内部 HTTP(S) 负载均衡器,后端子集化仅将区域后端服务中的某个后端子集分配给每个代理实例。
默认情况下,每个内部 HTTP(S) 负载均衡器代理实例都会打开与后端服务中所有后端的连接。如果代理实例和后端的数量都较大,那么打开与所有后端的连接便可能会导致性能问题。启用子集化后,每个代理仅打开与后端中某个子集的连接,从而减少在每个后端上保持打开的连接数。减少每个后端同时打开的连接数可以提高后端和代理的性能。
下图展示了包含两个代理的负载均衡器。如果没有后端子集化,来自这两个代理的流量便会分配到后端服务 1 中的所有后端。启用后端子集化后,来自每个代理的流量将分配到后端的某个子集。来自代理 1 的流量会分配到后端 1 和 2,来自代理 2 的流量则分配到后端 3 和 4。
此外,您还可以设置 localityLbPolicy
政策,优化流向后端的负载均衡流量。如需了解详情,请参阅流量政策。
如需了解如何为内部 HTTP(S) 负载均衡器设置后端子集化,请参阅配置后端子集化。
对内部 HTTP(S) 负载均衡器使用后端子集化相关的注意事项
- 虽然后端子集化旨在确保所有后端实例都得到充分利用,但它可能会为每个后端接收的流量引入一些偏差。对于对后端负载均衡敏感的后端服务,建议将
localityLbPolicy
设置为LEAST_REQUEST
。 - 启用并稍后停用子集会破坏现有连接。
- 后端子集化要求会话亲和性为
NONE
(5 元组哈希)。只有在后端子集化已停用的情况下才能使用其他会话亲和性选项。--subsetting-policy
和--session-affinity
标志的默认值都是NONE
,并且一次只能将其中一个设置为不同的值。
内部 TCP/UDP 负载均衡器的后端子集化
借助内部 TCP/UDP 负载均衡器的后端子集化,您可以扩缩内部 TCP/UDP 负载均衡器以支持每个内部后端服务的更多后端虚拟机实例。
如需了解子集如何影响此限制,请参阅负载均衡资源配额和限制的“后端服务”部分。
默认情况下,子集功能会停用,这会将后端服务的分配范围限制为最多 250 个后端实例或端点。如果后端服务需要支持超过 250 个后端,您可以启用子集。启用子集后,系统将为每个客户端连接选择一个后端实例子集。
下图显示了两种操作模式之间的差异的缩减模型。
如果没有子集,系统将更好地利用一组健康的后端,并根据流量分配在所有健康的后端之间分配新的客户端连接。这种子集存在负载均衡限制,但允许负载均衡器支持超过 250 个后端。
如需了解配置说明,请参阅子集。
对内部 TCP/UDP 负载均衡器使用后端子集化相关的注意事项
- 启用子集设置后,即使后端数量较小,也并非所有后端都能接收来自给定发送者的流量。
- 如需了解启用子集时的最大后端实例数,请参阅配额页面。
- 子集化仅支持 5 元组会话亲和性。
- 子集不支持数据包镜像。
- 启用并稍后停用子集会破坏现有连接。
- 如果本地客户端需要访问内部 TCP/UDP 负载均衡器,则子集化可以显著减少从本地客户端接收连接的后端数量。这是因为 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接的区域决定了负载均衡器后端的子集。特定区域中的所有 Cloud VPN 和 Cloud Interconnect 端点使用相同的子集。不同的子集用于不同的区域。
后端子集化价格
使用后端子集化无需付费。如需了解详情,请参阅所有网络流量价格。
会话亲和性
借助会话亲和性,只要运行状况良好的后端数量保持不变,您就可以控制负载均衡器如何采用可预测的方式为新连接选择后端。这对于需要将给定用户发出的多个请求定向到同一个后端或端点的应用非常有用。此类应用通常包括广告投放、游戏或具有大量内部缓存的服务所使用的有状态服务器。
Google Cloud 负载均衡器会尽最大努力提供会话亲和性。更改后端健康检查状态、添加或移除后端或者更改后端完整度的因素(以平衡模式衡量)可能会破坏会话亲和性。
当唯一连接有“合理大量”的分布时,具有会话亲和性的负载均衡很实用。“合理大量”是指至少是后端数量的几倍。使用少量连接测试负载均衡器不能准确地表示后端之间的客户端连接分配。
默认情况下,所有 Google Cloud 负载均衡器都使用五元组哈希 (--session-affinity=NONE
) 来选择后端,如下所示:
- 数据包的来源 IP 地址
- 数据包的来源端口(如果位于数据包的标头中)
- 数据包的目标 IP 地址
- 数据包的目的地端口(如果数据包的标头中出现)
- 数据包的协议
对于直通式负载均衡器,新连接会分配到运行状况良好的后端实例或端点(如果配置了故障切换政策,则选择活跃池中的后端实例或端点)。您可以控制以下各项:
- 已建立的连接是否运行状况不佳。如需了解详情,请参阅内部 TCP/UDP 负载均衡器文档中运行状况不佳的后端的连接持久性和基于后端服务的外部网络负载均衡器文档中运行状况不佳的后端的连接持久性。
- 如果配置了故障切换政策,已建立的连接在故障切换和故障恢复期间是否持久存在。有关详情,请参阅内部 TCP/UDP 负载均衡器文档中有关故障切换和故障恢复的连接排空和基于后端服务的外部网络负载均衡器文档中故障切换和故障恢复期间的连接排空。
- 从负载均衡器中移除后端时已建立的连接可以保留多长时间。如需了解详情,请参阅启用连接排空。
对于基于代理的负载均衡器,只要运行状况良好的后端实例或端点的数量保持不变,并且之前选择的后端实例或端点未达到容量上限,后续请求或连接将转到同一个后端虚拟机或端点。均衡模式的目标容量决定了后端达到容量上限的条件。
下表显示了每个产品支持的会话亲和性选项:
产品 | 会话亲和性选项 |
---|---|
另请注意:
|
|
全球外部 HTTP(S) 负载均衡器(经典版) |
|
内部 HTTP(S) 负载均衡器 |
仅当负载均衡位置政策 ( |
内部 TCP/UDP 负载均衡器 |
如需详细了解内部 TCP/UDP 负载均衡和会话亲和性,请参阅内部 TCP/UDP 负载均衡概览。 |
网络负载均衡器1 |
如需了解网络负载均衡和会话亲和性的具体信息,请参阅外部 TCP/UDP 网络负载均衡概览。 |
|
|
Traffic Director |
如果配置了无代理 gRPC 服务,Traffic Director 不支持会话亲和性。 |
1 此表记录基于后端服务的网络负载均衡器支持的会话亲和性。基于目标池的网络负载均衡器不使用后端服务。而是通过目标池中的 sessionAffinity
参数为网络负载均衡器设置会话亲和性。
配置会话亲和性时请注意以下几点:
为进行身份验证或为了安全起见,请勿依赖会话亲和性。会话亲和性设计为在服务后端和运行状况良好的后端数量发生变化时被破坏。导致破坏会话亲和性的活动包括:
- 将后端实例组或 NEG 添加到后端服务
- 从后端服务中移除后端实例组或 NEG
- 将实例添加到现有后端实例组(当您通过代管式实例组启用自动扩缩时,此过程会自动发生)
- 从现有后端实例组中移除实例(在您通过代管式实例组启用自动扩缩功能时,此过程会自动发生)
- 将端点添加到现有后端 NEG
- 从现有后端 NEG 中移除端点
- 当运行状况良好的后端未通过健康检查并且变得运行状况不佳时
- 当运行状况不佳的后端通过其健康检查并且恢复正常时
- 对于直通式负载均衡器:在故障切换和故障恢复期间,如果配置了故障切换政策
- 对于代理负载均衡器:当后端达到或超过容量时
不建议将
None
以外的会话亲和性与UTILIZATION
平衡模式一起使用。这是因为实例利用率的更改可能会导致负载均衡服务将新请求或连接定向到不太完整的后端虚拟机。这会破坏会话亲和性。请改用RATE
或CONNECTION
平衡模式,以降低破坏会话亲和性的可能性。 如需了解详情,请参阅失去会话亲和性。对于外部和内部 HTTP(S) 负载均衡器,当预期端点或实例超出其均衡模式的目标最大值时,会话亲和性可能会被破坏。请思考以下示例:
- 一个负载均衡器有一个 NEG 和三个端点。
- 每个端点的目标容量为 1 RPS。
- 均衡模式为
RATE
。 - 目前,每个端点分别处理 1.1、0.8 和 1.6 RPS。
- 当最后一个端点具有亲和性的 HTTP 请求到达负载均衡器时,会话亲和性会声明以 1.6 RPS 处理的端点。
- 新请求可能会发送到 RPS 为 0.8 的中间端点。
--session-affinity
和--subsetting-policy
标志的默认值都是NONE
,并且一次只能将其中一个设置为不同的值。
以下几个部分介绍了不同类型的会话亲和性。
客户端 IP、无目标亲和性
“客户端 IP、无目标亲和性”(CLIENT_IP_NO_DESTINATION
) 会将来自同一客户端来源 IP 地址的请求定向到同一个后端实例。
使用“客户端 IP、无目标亲和性”时,请注意以下几点:
“客户端 IP、无目标亲和性”是一个由客户端的来源 IP 地址组成的元组哈希。
如果客户端从一个网络切换到另一个网络,其 IP 地址会发生变化,导致粘性被破坏。
“客户端 IP、无目标亲和性”只是内部 TCP/UDP 负载均衡器的一个选项。
客户端 IP 亲和性
客户端 IP 地址亲和性 (CLIENT_IP
) 会将来自同一客户端 IP 地址的请求定向到同一个后端实例。客户端 IP 地址亲和性适用于所有使用后端服务的 Google Cloud 负载均衡器。
使用客户端 IP 亲和性时,请注意以下几点:
客户端 IP 亲和性是一个二元组哈希,由客户端的 IP 地址以及客户端连接的负载均衡器转发规则的 IP 地址组成。
如果原始客户端位于 NAT 后面或通过代理发出请求,则负载均衡器看到的客户端 IP 地址可能不是原始客户端。通过 NAT 或代理发出的请求会将 NAT 路由器或代理的 IP 地址用作客户端 IP 地址。这会导致传入的流量无谓汇集到同一个后端实例上。
如果客户端从一个网络切换到另一个网络,其 IP 地址会发生变化,导致粘性被破坏。
如需了解哪些产品支持客户端 IP 亲和性,请参阅表格:受支持的会话亲和性设置。
生成的 Cookie 亲和性
如果设置了生成的 Cookie 亲和性,则负载均衡器会针对第一个请求发出一个 Cookie。对于具有相同 Cookie 的每个后续请求,负载均衡器会将请求定向到同一个后端虚拟机或端点。
- 对于全球外部 HTTP(S) 负载均衡器,Cookie 名为
GCLB
。 - 对于区域级外部 HTTP(S) 负载均衡器、内部 HTTP(S) 负载均衡器和 Traffic Director,Cookie 名为
GCILB
。
与基于客户端 IP 地址的亲和性相比,基于 Cookie 的亲和性可更准确地识别负载均衡器的客户端。例如:
使用基于 Cookie 的亲和性时,负载均衡器可以唯一标识共享同一来源 IP 地址的两个或更多客户端系统。使用基于客户端 IP 地址的亲和性,负载均衡器会处理来自同一来源 IP 地址的所有连接,就像它们来自同一客户端系统一样。
如果客户端更改其 IP 地址,则基于 Cookie 的亲和性可让负载均衡器识别来自该客户端的后续连接,而不是将此连接视为新连接。例如,当移动设备从一个网络切换到另一个网络时,客户端会更改其 IP 地址。
在负载均衡器为基于生成的 Cookie 亲和性创建一个 Cookie 时,它会将该 Cookie 的 path
特性设置为 /
。如果网址映射的路径匹配器拥有一个主机名的多个后端服务,则所有后端服务会共用同一个会话 Cookie。
负载均衡器生成的 HTTP Cookie 的生命周期是可配置的。您可以将该生命周期设置为 0
(默认值,这意味着 Cookie 只是会话 Cookie)。也可以将 Cookie 的生命周期设置为一个介于 1
到 86400
秒(24 小时)之间的值(含边界值)。
如需了解哪些产品支持生成的 Cookie 亲和性,请参阅表格:受支持的会话亲和性设置。
标头字段亲和性
如果同时满足以下两个条件,则可以使用 Traffic Director 和内部 HTTP(S) 负载均衡器:
- 负载均衡位置政策是 RING_HASH 或 MAGLEV。
- 后端服务的
consistentHash
指定 HTTP 标头的名称 (httpHeaderName
)。
如需了解哪些产品支持标头字段亲和性,请参阅表格:受支持的会话亲和性设置。
HTTP Cookie 亲和性
在同时满足以下两个条件时,Traffic Director 和内部 HTTP(S) 负载均衡器可以使用标头字段亲和性:
- 负载均衡位置政策是 RING_HASH 或 MAGLEV。
- 后端服务的一致性哈希指定 HTTP Cookie 的名称。
HTTP Cookie 亲和性根据 HTTP_COOKIE 标志中指定的 HTTP Cookie,将请求路由到 NEG 中的后端虚拟机或端点。如果客户端未提供 Cookie,则代理会生成 Cookie 并通过 Set-Cookie
标头将其返回给客户端。
如需了解哪些产品支持 HTTP Cookie IP 亲和性,请参阅表格:受支持的会话亲和性设置。
失去会话亲和性
无论选择哪种类型的亲和性,在以下情况下,客户端都可能会失去与后端的亲和性:
- 如果后端实例组或可用区级 NEG 的容量不足(根据均衡模式的目标容量定义)。在这种情况下,Google Cloud 会将流量定向到可能位于不同区域的其他后端实例组或可用区级 NEG。为解决此问题,请务必根据自己的测试为每个后端指定正确的目标容量。
- 自动扩缩功能会向代管实例组添加实例或从中移除实例。发生这种情况时,实例组中的实例数量会发生变化,因此后端服务会为会话亲和性重新计算哈希值。为解决此问题,请确保代管实例组的最小大小可以应对典型负载。仅当负载意外增加时,系统才会执行自动扩缩功能。
- 如果 NEG 中的后端虚拟机或端点未通过健康检查,则负载均衡器会将流量定向到其他健康状况良好的后端。如需详细了解当所有后端都未通过健康检查时负载均衡器如何应对,请参阅每个 Google Cloud 负载均衡器对应的文档。
- 当
UTILIZATION
均衡模式适用于后端实例组时,会话亲和性会因后端利用率的变化而被破坏。您可以使用RATE
或CONNECTION
均衡模式(具体取决于负载均衡器类型支持哪种模式)来解决此问题。
使用 HTTP(S) 负载均衡、外部 SSL 代理负载均衡或外部 TCP 代理负载均衡时,请额外注意以下几点:
- 如果从互联网上的客户端到 Google 的路由路径在请求或连接之间发生变化,则系统可能会选择其他 Google Front End (GFE) 前端作为代理。这可能会破坏会话亲和性。
- 当您使用
UTILIZATION
均衡模式时(尤其是未定义目标最大容量时),如果负载均衡器的流量较低,会话亲和性可能会被破坏。请切换到所选负载均衡器支持的RATE
或CONNECTION
均衡模式。
后端服务超时
大多数 Google Cloud 负载均衡器都具有后端服务超时。默认值是 30 秒。 允许的超时值的完整范围为 1 - 2,147,483,647 秒。
对于使用 HTTP、HTTPS 或 HTTP/2 协议的外部 HTTP(S) 负载均衡器和内部 HTTP(S) 负载均衡器,后端服务超时为 HTTP(S) 流量的请求/响应超时。
如需详细了解每个负载均衡器的后端服务超时,请参阅以下内容:
对于外部 SSL 代理负载均衡器和外部 TCP 代理负载均衡器,超时为空闲超时。如需在删除连接之前允许更多或更少时间,请更改超时值。此空闲超时也用于 WebSocket 连接。
对于内部 TCP/UDP 负载均衡器和网络负载均衡器,您可以使用
gcloud
或 API 设置后端服务超时的值,但系统会忽略该值。后端服务超时对于这些直通负载均衡器没有任何意义。对于 Traffic Director,无代理 gRPC 服务不支持后端服务超时字段(使用
timeoutSec
指定)。对于此类服务,请使用maxStreamDuration
字段配置后端服务超时。这是因为 gRPC 不支持timeoutSec
的语义,该函数指定了在发出请求后等待后端返回完整响应的时间。gRPC 的超时指定了从数据流开头直到响应完全处理的时间(包括所有重试)。
健康检查
后端为实例组或可用区级 NEG 的每个后端服务都必须进行相关的健康检查。使用无服务器 NEG 或互联网 NEG 作为后端的后端服务不得引用健康检查。
如果使用 Google Cloud 控制台创建负载均衡器,您可以在创建负载均衡器时创建健康检查(如果需要),也可以引用现有健康检查。
当您通过 Google Cloud CLI 或 API 创建使用实例组或可用区 NEG 后端的后端服务时,必须引用现有健康检查。如需详细了解所需健康检查的类型和范围,请参阅“健康检查概览”中的负载均衡器指南。
如需了解详情,请参阅以下文档:
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 保护。
在后端服务资源上启用的额外功能
某些可选的 Google Cloud 功能(例如 Cloud CDN 和 Google Cloud Armor)适用于全球外部 HTTP(S) 负载均衡器使用的后端服务。外部 SSL 代理负载均衡器和外部 TCP 代理负载均衡器也支持 Google Cloud Armor。
有关详情,请参阅:
流量管理功能
只有部分产品支持以下功能:
- ROUND_ROBIN 之外的负载均衡政策 (
localityLbPolicy
) maxRequests
字段之外的熔断- 离群值检测
以下负载均衡器支持这些功能:
- 全球外部 HTTP(S) 负载均衡器(不支持熔断)
- 区域级外部 HTTP(S) 负载均衡器
- 内部 HTTP(S) 负载均衡器
- Traffic Director(但无代理 gRPC 服务不提供此支持)
API 与 gcloud
参考文档
如需详细了解后端服务资源的属性,请参阅以下参考文档:
后续步骤
如需获得说明如何在负载均衡中使用后端服务的相关文档和信息,请查看以下内容:
对于相关视频: