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

应用程序负载均衡器的目标组

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

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

路由配置

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

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

  • 协议:HTTP、HTTPS

  • 端口:1-65535

如果使用 HTTPS 协议配置目标组或使用 HTTPS 运行状况检查,SSL 和目标之间的连接将使用 ELBSecurityPolicy2016-08 策略中的安全设置。

目标类型

在创建目标组时,应指定其目标类型,这决定您如何指定其目标。创建目标组后,将无法更改其目标类型。

以下是可能的目标类型:

instance

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

ip

这些目标通过 IP 地址指定。

当目标类型为 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 中的实例、可通过 IP 地址和端口寻址的 AWS 资源 (例如数据库) 以及通过 AWS Direct Connect 或 VPN 连接链接到 AWS 的本地资源。

重要

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

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

已注册目标

您的负载均衡器充当客户端的单一接触点,并跨其正常运行的已注册目标分发传入流量。您可以将每个目标注册到一个或多个目标组中。您可以使用不同的端口多次向同一目标组注册每个 EC2 实例或 IP 地址,从而使负载均衡器能够将请求路由到微服务。

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

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

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

目标组属性

以下是目标组属性:

deregistration_delay.timeout_seconds

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

slow_start.duration_seconds

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

stickiness.enabled

指示是否启用粘性会话。

stickiness.lb_cookie.duration_seconds

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

stickiness.type

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

取消注册延迟

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

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

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

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

使用控制台更新取消注册延迟值

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 选择目标组。当前值在 Description (描述) 选项卡上显示为 Deregistration delay (取消注册延迟)

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

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

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

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

慢启动模式

默认情况下,目标只要注册到目标组并通过了初始运行状况检查,就会开始接收其完整的请求份额。使用慢启动模式可给目标时间进行预热,然后负载均衡器向其发送完整的请求份额。为目标组启用慢启动之后,当目标注册到目标组时目标将进入慢启动模式,当配置的慢启动持续时间期限已过时目标退出慢启动模式。负载均衡器线性增加它可以向慢启动模式下的目标发送的请求数量。当目标退出慢启动模式后,负载均衡器可以向它发送完整的请求份额。

注意事项

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

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

  • 如果您在慢启动模式下取消注册目标,目标将退出慢启动模式。如果您再次注册同一个目标,它会再次进入慢启动模式。

  • 如果处于慢启动模式下的目标在持续时间期限过去之前变得运行状况不佳,然后再次变为运行状况良好状态,则目标将保持为慢启动模式,并在剩下的持续时间期限过去时退出慢启动模式。如果未处于慢启动模式的目标从运行状况不佳变为运行状况良好,则它不会进入慢启动模式。

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

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 选择目标组。当前值在 Description (描述) 选项卡上显示为 Slow start duration (慢启动持续时间)

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

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

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

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

粘性会话

粘性会话是用于将请求路由到目标组中的同一目标的机制。对于维护状态信息以便向客户端提供持续体验的服务器来说,这很有用。要使用粘性会话,客户端必须支持 Cookie。

当负载均衡器第一次收到来自客户端的请求时,它会将请求路由到目标并生成 Cookie 以包含在对客户端的响应中。来自客户端的下一个请求将包含 cookie。如果为目标组启用粘性会话,并且请求转至同一目标组,则负载均衡器将检测 cookie 并将请求路由到同一目标。

Application Load Balancer 仅支持负载均衡器生成的 Cookie。该 Cookie 的名称是 AWSALB。这些 Cookie 的内容使用轮换密钥进行加密。您无法解密或修改负载均衡器生成的 Cookie。

WebSockets 连接天生具有粘性。如果客户端请求 WebSockets 连接升级,则返回 HTTP 101 状态码以接受连接升级的目标将是在 WebSockets 连接中使用的目标。在 WebSockets 升级完成后,将不会使用基于 Cookie 的粘性。

您在目标组级别启用粘性会话。您还可以设置负载均衡器生成 Cookie 的粘性持续时间,以秒为单位。系统会随每个请求设置持续时间。因此,如果客户端在各个持续时间过期前发送请求,则粘性会话会继续。如果您对多个目标组启用粘性会话,则我们建议您为所有目标组配置相同的时段。

使用控制台启用粘性会话

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 选择目标组。

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

  5. Edit attributes 页上,执行以下操作:

    1. 选择 Enable load balancer generated cookie stickiness

    2. 对于 Stickiness duration,指定一个介于 1 秒和 7 天之间的值。

    3. 选择 Save

使用 AWS CLI 启用粘性会话

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