Application Load Balancer 的目标组 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Application Load Balancer 的目标组

每个目标组均用于将请求路由到一个或多个已注册的目标。在创建每个侦听器规则时,可以指定目标组和条件。满足规则条件时,流量会转发到相应的目标组。您可以为不同类型的请求创建不同的目标组。例如,为一般请求创建一个目标组,为应用程序的微服务请求创建其他目标组。有关更多信息,请参阅 应用程序负载均衡器组件

您基于每个目标组定义负载均衡器的运行状况检查设置。每个目标组均使用默认运行状况检查设置,除非您在创建目标组时将其覆盖或稍后对其进行修改。在侦听器规则中指定一个目标组后,负载均衡器将持续监控已注册到该目标组的所有目标 (这些目标位于已为负载均衡器启用的可用区中) 的运行状况。负载均衡器将请求路由到正常运行的已注册目标。

路由配置

默认情况下,负载均衡器会使用您在创建目标组时指定的协议和端口号将请求路由到其目标。此外,您可以覆盖在将目标注册到目标组时用于将流量路由到目标的端口。

目标组支持以下协议和端口:

  • 协议:HTTP、HTTPS

  • 端口:1-65535

如果目标组配置了 HTTPS 协议或使用 HTTPS 运行状况检查,则 TLS 和目标之间的连接将使用 ELBSecurityPolicy-2016-08 策略中的安全设置。负载均衡器将使用您在目标上安装的证书与目标建立 TLS 连接。负载均衡器不验证这些证书。因此,您可以使用自签名证书或已过期的证书。由于负载均衡器位于虚拟私有云 (VPC) 中,因此负载均衡器与目标之间的流量将在数据包级别进行身份验证,这样即使目标上的证书无效,它也不会面临中间人攻击或欺骗风险。

Target type

创建目标组时,指定其目标类型,此类型将确定您在向此目标组注册目标时指定的目标的类型。创建目标组后,将无法更改其目标类型。

以下是可能的目标类型:

instance

这些目标通过实例 ID 指定。

ip

目标是 IP 地址。

lambda

目标是 Lambda 函数。

当目标类型为 ip 时,您可以指定来自以下 CIDR 块之一的 IP 地址:

  • 目标组的 VPC 的子网

  • 10.0.0.0/8 (RFC 1918)

  • 100.64.0.0/10 (RFC 6598)

  • 172.16.0.0/12 (RFC 1918)

  • 192.168.0.0/16 (RFC 1918)

凭借这些支持的 CIDR 块,您可以将以下内容注册到目标组:ClassicLink 实例、与负载均衡器 VPC 对等的 VPC(位于同一区域或不同区域)中的实例、可通过 IP 地址和端口寻址的 Amazon 资源(例如数据库)以及通过 Amazon Direct Connect 或 Site-to-Site VPN 连接链接到 Amazon 的本地资源。

重要

不能指定可公开路由的 IP 地址。

如果使用实例 ID 指定目标,则使用实例的主网络接口中指定的主私有 IP 地址将流量路由到实例。如果使用 IP 地址指定目标,则可以使用来自一个或多个网络接口的任何私有 IP 地址将流量路由到实例。这使一个实例上的多个应用程序可以使用同一端口。每个网络接口都可以有自己的安全组。

如果您的目标组的目标类型为 lambda,则可注册单个 Lambda 函数。当负载均衡器收到 Lambda 函数的请求时,它会调用 Lambda 函数。有关更多信息,请参阅 Lambda 函数即目标

协议版本

默认情况下,Application Load Balancer 使用 HTTP/1.1 向目标发送请求。您可以通过协议版本使用 HTTP/2 或 gRPC 向目标发送请求。

下表汇总了请求协议和目标组协议版本组合的结果。

请求协议 协议版本 结果
HTTP/1.1 HTTP/1.1 成功
HTTP/2 HTTP/1.1 成功
gRPC HTTP/1.1 错误
HTTP/1.1 HTTP/2 错误
HTTP/2 HTTP/2 成功
gRPC HTTP/2 如果目标支持 grPC,则成功
HTTP/1.1 gRPC 错误
HTTP/2 gRPC 如果 POST 请求,则成功
gRPC gRPC 成功

gRPC 协议版本的注意事项

  • 唯一支持的侦听器协议是 HTTPS。

  • 监听器规则唯一支持的操作类型是 forward

  • 唯一支持的目标类型是 instanceip

  • 负载均衡器解析 gRPC 请求并根据程序包、服务和方法将 gRPC 调用路由到相应的目标组。

  • 负载均衡器支持一元、客户端流媒体、服务器端流媒体和双向流媒体。

  • 您必须提供格式为 /package.service/method 的自定义运行状况检查方法。

  • 在检查来自目标的成功响应时,必须指定 gRPC 状态代码。

  • 不能将 Lambda 函数用作目标。

HTTP/2 协议版本的注意事项

  • 唯一支持的侦听器协议是 HTTPS。

  • 监听器规则唯一支持的操作类型是 forward

  • 唯一支持的目标类型是 instanceip

  • 负载均衡器支持从客户端流式传输。负载均衡器不支持流式传输到目标。

已注册目标

您的负载均衡器充当客户端的单一接触点,并跨其正常运行的已注册目标分发传入流量。您可以将每个目标注册到一个或多个目标组中。

如果应用程序需求增加,您可以向一个或多个目标组注册其他目标以便满足该需求。只要注册过程完成且新注册的目标通过初始运行状况检查,负载均衡器就会开始将请求路由至此目标。

如果应用程序需求减少或者您需要为目标提供服务,您可以从目标组取消注册目标。取消注册目标将从目标组中删除目标,但不会影响目标。取消注册某个目标后,负载均衡器立即停止将请求路由到该目标。目标将进入 draining 状态,直至进行中请求完成。在您准备好目标以继续接收请求时,可以重新将目标注册到目标组。

如果要通过实例 ID 来注册目标,则可以将负载均衡器与 Auto Scaling 组一同使用。将一个目标组挂接到 Auto Scaling 组后,Auto Scaling 在启动目标时会为您向该目标组注册目标。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的将负载均衡器挂接到 Auto Scaling 组

Limits

  • 您无法在同一 VPC 中注册另一个 Application Load Balancer 的 IP 地址。如果另一个 Application Load Balancer 位于与负载均衡器 VPC 对等的 VPC 中,则可以注册其 IP 地址。

目标组属性

如果目标组类型为 instanceip,则支持以下目标组属性:

deregistration_delay.timeout_seconds

Elastic Load Balancing 在取消注册目标之前等待的时间量。范围为 0–3600 秒。默认值为 300 秒。

load_balancing.algorithm.type

负载均衡算法确定在路由请求时,负载均衡器如何选择目标。该值为 round_robinleast_outstanding_requests。默认为 round_robin

slow_start.duration_seconds

一个时间段 (秒),在此期间,负载均衡器将进入目标组的流量的线性增加份额发送给新注册的目标。范围为 30–900 秒 (15 分钟)。默认值为 0 秒 (已禁用)。

stickiness.enabled

指示是否启用粘性会话。该值为 truefalse。默认为 false

stickiness.app_cookie.cookie_name

应用程序 Cookie 的名称。应用程序 Cookie 名称不能具有以下前缀:AWSALBAWSALBAPP、或 AWSALBTG;它们将保留以供负载均衡器使用。

stickiness.app_cookie.duration_seconds

基于应用程序的 Cookie 有效期(以秒为单位)。经过这个有效期后,Cookie 即过期。最小值为 1 秒,最大值为 7 天 (604800 秒)。默认值为 1 天 (86400 秒)。

stickiness.lb_cookie.duration_seconds

基于持续时间的 Cookie 有效期(以秒为单位)。经过这个有效期后,Cookie 即过期。最小值为 1 秒,最大值为 7 天 (604800 秒)。默认值为 1 天 (86400 秒)。

stickiness.type

粘性的类型。可能的值为 lb_cookieapp_cookie

如果目标组类型为 lambda,则支持以下目标组属性:

lambda.multi_value_headers.enabled

指示在负载均衡器和 Lambda 函数之间交换的请求和响应标头是否包含值或字符串的数组。可能的值为 truefalse。默认值为 false。有关更多信息,请参阅 多值标头

路由算法

默认情况下,轮循路由算法用于路由目标组级别的请求。可以改为指定最少未完成请求路由算法。

当应用程序的请求复杂度不一或目标的处理容量不同时,考虑使用最少未完成请求。当请求和目标相同,或需要在目标间均匀分发请求时,最好选择轮询。可以使用以下 CloudWatch 指标比较轮询与最少未完成请求的效果:RequestCountTargetConnectionErrorCountTargetResponseTime

Considerations

  • 您不能同时启用最少未完成请求和慢启动模式。

  • 如果您启用粘性会话,这将在初始目标选择之后覆盖目标组的路由算法。

  • 对于 HTTP/2,负载均衡器将此请求转换为多个 HTTP/1.1 请求,因此最少未完成请求将每个 HTTP/2 请求视为多个请求。

  • 当您将最少未完成请求与 WebSockets 配合使用时,将会使用最少未完成请求来选择目标。负载均衡器会创建与此目标的连接,并通过此连接发送所有消息。

New console

使用新控制台修改路由算法

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组的名称以打开其详细信息页面。

  4. 组详细信息选项卡的属性部分中,选择编辑

  5. 编辑属性页面上,对于负载均衡算法,选择轮询最少未完成请求

  6. 选择保存更改

Old console

使用旧控制台修改路由算法

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组。

  4. Description 选项卡上,选择 Edit attributes

  5. Edit attributes (编辑属性) 页面上,对于 Load balancing algorithm (负载均衡算法),选择 Round robin (轮询)Least outstanding requests (最少未完成请求),然后选择 Save (保存)

使用 Amazon CLI 修改路由算法

使用带 load_balancing.algorithm.type 属性的 modify-target-group-attributes 命令。

取消注册延迟

Elastic Load Balancing 停止将请求发送到正在取消注册的目标。默认情况下,Elastic Load Balancing 在取消注册过程完成前会等待 300 秒,这有助于完成针对目标的进行中的请求。要更改 Elastic Load Balancing 等待的时间,请更新取消注册延迟值。

取消注册的目标的初始状态为 draining。取消注册延迟结束后,取消注册过程完成,目标状态变为 unused。如果目标是 Auto Scaling 组的一部分,便可以将其终止或替换。

如果取消注册的目标没有进行中的请求且没有活动连接,则 Elastic Load Balancing 将立即完成取消注册过程,而不等待取消注册延迟结束。但是,即使目标注销已完成,目标的状态也会显示为 draining,直至注销延迟超时期限过期。超时期限过期后,目标转换为 unused 状态。

如果正在取消注册的目标在取消注册延迟结束前终止连接,客户端将收到 500 级错误响应。

New console

使用新控制台更新注销延迟值

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组的名称以打开其详细信息页面。

  4. 组详细信息选项卡的属性部分中,选择编辑

  5. 编辑属性页面上,根据需要更改注销延迟的值。

  6. 选择保存更改

Old console

使用旧控制台更新注销延迟值

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组。

  4. Description 选项卡上,选择 Edit attributes

  5. Edit attributes 页面上,根据需要更改 Deregistration delay 的值,然后选择 Save

使用 Amazon CLI 更新取消注册延迟值

使用带 deregistration_delay.timeout_seconds 属性的 modify-target-group-attributes 命令。

慢启动模式

默认情况下,目标只要注册到目标组并通过了初始运行状况检查,就会开始接收其完整的请求份额。使用慢启动模式可给目标时间进行预热,然后负载均衡器向其发送完整的请求份额。

为目标组启用慢启动后,当目标组认为其目标正常时,其目标会进入慢启动模式。慢启动模式下的目标在配置的慢启动持续时间过去或目标变得不正常时退出慢启动模式。负载均衡器线性增加它可以向慢启动模式下的目标发送的请求数量。在正常目标退出慢启动模式后,负载均衡器可以向它发送完整的请求份额。

Considerations

  • 为目标组启用慢启动之后,注册到目标组的正常目标不会进入慢启动模式。

  • 当您为空的目标组启用慢启动,然后使用单一注册操作注册目标时,这些目标不会进入慢启动模式。仅当至少有一个正常目标未处于慢启动模式时,新注册的目标才会进入慢启动模式。

  • 如果您在慢启动模式下取消注册目标,目标将退出慢启动模式。如果您再次注册同一目标,则当目标组认为该目标正常时,它将进入慢启动模式。

  • 如果处于慢启动模式的目标变得不正常,则该目标将退出慢启动模式。当目标变得正常时,它将再次进入慢启动模式。

  • 您不能同时启用慢启动模式和最少未完成请求。

New console

使用新控制台更新慢启动持续时间值

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组的名称以打开其详细信息页面。

  4. 组详细信息选项卡的属性部分中,选择编辑

  5. 编辑属性页面上,根据需要更改慢启动持续时间的值。要禁用慢启动模式,请将持续时间设置为 0。

  6. 选择保存更改

Old console

使用旧控制台更新慢启动持续时间值

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组。

  4. Description 选项卡上,选择 Edit attributes

  5. Edit attributes (编辑属性) 页面上,根据需要更改 Slow start duration (慢启动持续时间) 的值,然后选择 Save (保存)。要禁用慢启动模式,请将持续时间设置为 0。

使用 Amazon CLI 更新慢启动持续时间值

使用带 slow_start.duration_seconds 属性的 modify-target-group-attributes 命令。