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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Application Load Balancer 的目标组

目标组使用您指定的协议和端口号将请求路由到个别注册目标,例如 EC2 实例。您可以向多个目标组注册一个目标。您可以对每个目标组配置运行状况检查。在注册到目标组 (它是使用负载均衡器的侦听器规则指定的) 的所有目标上,执行运行状况检查。

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

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

路由配置

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

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

  • 协议:HTTP、HTTPS

  • 端口:1-65535

如果目标组配置了 HTTPS 协议或使用 HTTPS 运行状况检查,则 TLS 和目标之间的连接将使用 ELBSecurityPolicy-2016-08 策略中的安全设置。负载均衡器将使用您在目标上安装的证书与目标建立 TLS 连接。负载均衡器不验证这些证书。因此,您可以使用自签名证书或已过期的证书。由于负载均衡器及其目标位于虚拟私有云 (VPC) 中,因此负载均衡器与目标之间的流量将在数据包级别进行身份验证,因此即使目标上的证书无效,也不会面临 man-in-the-middle 攻击或欺骗的风险。离开的流量Amazon将没有同样的保护,可能需要采取额外的措施来进一步保护流量。

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)

重要

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

您可以使用所有支持的 CIDR 块,向目标组注册以下目标:

  • 实例位于与负载均衡器 VPC 对等的 VPC(位于同一区域或不同区域)中。

  • 可通过 IP 地址和端口寻址的 Amazon 资源(例如,数据库)。

  • 通过 Amazon Direct Connect 或 Site-to-Site VPN 连接链接到 Amazon 的本地资源。

注意

对于部署在本地区域内的应用程序负载均衡器,ip 目标必须位于同一个本地区域中才能接收流量。

有关更多信息,请参阅什么是 Amazon Local Zones?

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

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

您可以将 Amazon Elastic Container Service(Amazon ECS)配置为应用程序负载均衡器的目标。有关更多信息,请参阅《亚马逊弹性容器服务用户指南》中的 “创建应用程序负载均衡器” Amazon Fargate。

IP 地址类型

创建新目标组时,可以选择目标组的 IP 地址类型。此 IP 地址控制用于与目标进行通信并检查其运行状况的 IP 版本。

Application Load Balancer 支持 IPv4 和 IPv6 目标组。默认选择为 IPv4。

注意事项
  • 目标组中的所有 IP 地址均必须具有相同的 IP 地址类型。例如,您无法向 IPv6 目标组注册 IPv4 目标。

  • IPv6 目标组只能用于 dualstack 负载均衡器。

  • IPv6 目标组支持 IP 和实例类型目标。

协议版本

默认情况下,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 组

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

  • 如果实例位于与负载均衡器 VPC 对等的 VPC(位于同一区域或不同区域)中,则不能用实例 ID 注册这些实例。可以用 IP 地址注册这些实例。

目标组属性

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

deregistration_delay.timeout_seconds

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

load_balancing.algorithm.type

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

load_balancing.algorithm.anomaly_mitigation

仅在存在时可load_balancing.algorithm.typeweighted_random。表示是否启用了异常缓解功能。该值为 onoff。默认为 off

load_balancing.cross_zone.enabled

指示是否启用了跨区域负载均衡。该值为 truefalseuse_load_balancer_configuration。默认为 use_load_balancer_configuration

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

target_group_health.dns_failover.minimum_healthy_targets.count

必须运行状况良好的目标数量下限。如果运行状况良好的目标数量低于此值,请在 DNS 中将该区域标记为运行状况不佳,以便流量仅路由到运行状况良好的区域。可能的值是 off 或 1 到目标数量上限之间的整数。当 off 时,DNS 故障转移被禁用,这意味着每个目标组都独立地为 DNS 故障转移做出贡献。默认 为 1。

target_group_health.dns_failover.minimum_healthy_targets.percentage

必须运行状况良好的目标最低百分比。如果运行状况良好的目标百分比低于此值,请在 DNS 中将该区域标记为运行状况不佳,以便流量仅路由到运行状况良好的区域。可能的值是 off,或者是从 1 至最大目标数的整数。当 off 时,DNS 故障转移被禁用,这意味着每个目标组都独立地为 DNS 故障转移做出贡献。默认 为 1。

target_group_health.unhealthy_state_routing.minimum_healthy_targets.count

必须运行状况良好的目标数量下限。如果运行状况良好的目标数量低于此值,则将流量发送到所有目标(包括运行状况不佳的目标)。范围为 1 到目标数量上限。默认 为 1。

target_group_health.unhealthy_state_routing.minimum_healthy_targets.percentage

必须运行状况良好的目标最低百分比。如果运行状况良好的目标百分比低于此值,则将流量发送到所有目标(包括运行状况不佳的目标)。可能的值为 off 或者 1 到 100 之间的整数。默认值为 off

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

lambda.multi_value_headers.enabled

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

路由算法

路由算法是负载均衡器在确定哪些目标将接收请求时使用的方法。默认情况下,循环路由算法用于在目标组级别路由请求。根据您的应用程序的需求,还可以使用未完成最少的请求加权随机路由算法。一个目标组一次只能有一个有效的路由算法,但是可以在需要时更新路由算法。

如果启用粘性会话,则所选的路由算法将用于初始目标选择。来自同一客户机的未来请求将绕过选定的路由算法,转发到同一个目标。

循环赛
  • 循环路由算法按顺序在目标组中的健康目标之间均匀地路由请求。

  • 当收到的请求的复杂性相似、注册的目标的处理能力相似或者您需要在目标之间平均分配请求时,通常使用此算法。

最少未完成请求
  • 未完成请求最少的路由算法将请求路由到处理中请求数最少的目标。

  • 当收到的请求的复杂性各不相同、注册目标的处理能力不同时,通常使用这种算法。

  • 当支持 HTTP/2 的负载均衡器使用仅支持 HTTP/1.1 的目标时,它会将请求转换为多个 HTTP/1.1 请求。在此配置中,未完成请求最少的算法会将每个 HTTP/2 请求视为多个请求。

  • 使用时 WebSockets,将使用未完成请求数最少算法选择目标。选择后,负载均衡器将创建与目标的连接,并通过该连接发送所有消息。

  • 待处理请求最少的路由算法不能用于慢速启动模式。

加权随机
  • 加权随机路由算法按随机顺序将请求均匀地路由到目标组中的健康目标。

  • 该算法支持自动目标权重 (ATW) 异常缓解。

  • 加权随机路由算法不能用于慢速启动模式。

修改目标组的路由算法

您可以随时修改目标群体的路由算法。

New EC2 experience
使用新控制台修改路由算法
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. 在目标群组详情页面的属性选项卡上,选择编辑

  5. 编辑目标组属性页面的流量配置部分的负载平衡算法下,选择循环最少未完成的请求数或加权随机

  6. 选择保存更改

Old EC2 experience
使用旧控制台修改路由算法
  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命令。

自动目标权重 (ATW)

自动目标权重 (ATW) 会持续监控运行应用程序的目标,检测明显的性能偏差,即异常。ATW 能够通过实时数据异常检测来动态调整路由到目标的流量。

自动目标权重 (ATW) 会自动对您账户中的每个 Application Load Balancer 执行异常检测。当发现异常目标时,ATW 可以自动尝试通过减少其路由的流量来稳定它们,这被称为异常缓解。ATW 不断优化流量分布,以最大限度地提高每个目标的成功率,同时最大限度地降低目标组的失败率。

注意事项:
  • 异常检测目前会监控来自目标的 HTTP 5xx 响应代码以及与目标的连接故障。异常检测始终处于开启状态,无法关闭。

  • 使用 Lambda 作为目标时,不支持 ATW。

异常检测

ATW 异常检测会监视任何表现出与目标组中其他目标行为明显偏差的目标。这些偏差称为异常,是通过将一个目标的误差百分比与目标组中其他目标的误差百分比进行比较来确定的。这些错误既可能是连接错误,也可能是HTTP错误代码。因此,报告比同行高得多的目标被视为异常。

异常检测要求目标组中至少有三个健康目标。当目标注册到目标组时,它必须先通过运行状况检查才能开始接收流量。一旦目标接收目标,ATW 就会开始监视目标并持续发布异常结果。对于没有异常的目标,异常结果为。normal对于存在异常的目标,异常结果为。anomalous

ATW 异常检测独立于目标群体的健康检查。目标可以通过所有目标组的健康检查,但由于错误率升高,仍会被标记为异常。目标变为异常不会影响其目标组的健康检查状态。

异常检测状态

ATW 会持续发布其对目标执行的异常检测的状态。您可以使用Amazon Web Services Management Console或随时查看当前状态Amazon CLI。

要使用控制台查看异常检测状态,请执行以下操作:
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. 在目标组详细信息页面上,选择目标选项卡。

  5. 已注册目标表中,您可以在异常检测结果列中查看每个目标的异常状态。

    如果未检测到异常,则结果为。normal

    如果检测到异常,则结果为。anomalous

要查看异常检测结果,请使用 Amazon CLI

使用将Include.member.N属性值设置为的describe-target-health命令AnomalyDetection

异常缓解

重要

ATW 的异常缓解功能仅在使用加权随机路由算法时可用。

ATW 异常缓解功能会自动将流量从异常目标引出,让他们有机会恢复。

缓解期间:
  • ATW 会定期调整路由到异常目标的流量量。当前,周期为每五秒一次。

  • ATW 将路由到异常目标的流量减少到执行异常缓解所需的最低量。

  • 不再被检测为异常的目标将逐渐有更多的流量路由到它们,直到它们与目标组中的其他正常目标达到同等水平。

开启 ATW 异常缓解功能

您可以随时开启异常缓解功能。

要开启异常缓解功能,请执行以下操作:
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. 在目标群组详情页面的属性选项卡上,选择编辑

  5. 编辑目标组属性页面的流量配置部分的负载平衡算法下,确保已选择加权随机

    注意:最初选择加权随机算法时,异常检测默认处于开启状态。

  6. 在 “异常缓解” 下,确保选中 “开启异常缓解”。

  7. 选择保存更改

要开启异常缓解功能,请使用 Amazon CLI

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

异常缓解状态

每当 ATW 对目标执行缓解措施时,您都可以随时使用Amazon Web Services Management Console或Amazon CLI查看当前状态。

要使用控制台查看异常缓解状态,请执行以下操作:
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. 在目标组详细信息页面上,选择目标选项卡。

  5. 已注册目标表中,您可以在 “有效缓解” 列中查看每个目标的异常缓解状态。

    如果缓解未在进行中,则状态为yes

    如果缓解正在进行中,则状态为no

要查看异常缓解状态,请使用 Amazon CLI

使用将Include.member.N属性值设置为的describe-target-health命令AnomalyDetection

取消注册延迟

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

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

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

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

New EC2 experience
使用新的 EC2 体验更新注销延迟值
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

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

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

  6. 选择保存更改

Old EC2 experience
使用旧有的 EC2 体验更新注销延迟值
  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命令。

慢启动模式

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

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

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

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

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

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

  • 使用未完成的请求最少加权随机路由算法时,无法启用慢速启动模式。

New EC2 experience
使用新的 EC2 体验更新慢启动持续时间值
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

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

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

  6. 选择保存更改

Old EC2 experience
使用旧有的 EC2 体验更新慢启动持续时间值
  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命令。