Network Load Balancer 的目标组 - Elastic Load Balancing

Network Load Balancer 的目标组

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

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

路由配置

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

Network Load Balancer 的目标组支持以下协议和端口:

  • 协议:TCP、TLS、UDP TCP_UDP

  • 端口:1-65535

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

下表总结了侦听器协议和目标组设置的组合。

侦听器协议 目标组协议 目标组类型 运行状况检查协议

TCP

TCP | TCP_UDP

实例 | ip

HTTP | HTTPS | TCP

TCP

TCP

alb

HTTP | HTTPS

TLS

TCP | TLS

实例 | ip

HTTP | HTTPS | TCP

UDP

UDP | TCP_UDP

实例 | ip

HTTP | HTTPS | TCP

TCP_UDP

TCP_UDP

实例 | ip

HTTP | HTTPS | TCP

Target type

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

以下是可能的目标类型:

instance

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

ip

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

alb

目标是 Application Load Balancer。

当目标类型为 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 块,向目标组注册以下目标:

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

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

为您的目标组禁用客户端 IP 保留后,针对网络负载均衡器 IP 地址和唯一目标(IP 地址和端口)的组合,负载均衡器可支持每分钟约 5.5 万个连接。如果连接数超过该值,则会增大出现端口分配错误的几率。如果您收到端口分配错误,请将多个目标添加到目标组。

在共享 Amazon VPC 中启动 Network Load Balancer 时(作为参与者),您只能在已共享的子网中注册目标。

当目标类型为 alb 时,您可以将单个 Application Load Balancer 注册为目标。有关更多信息,请参阅 使用应用程序负载均衡器作为网络负载均衡器的目标

Network Load Balancer 不支持 lambda 目标类型。Application Load Balancer 是支持 lambda 目标类型的唯一负载均衡器。有关更多信息,请参阅应用程序负载均衡器用户指南中的 Lambda 函数作为目标

如果在向网络负载均衡器注册的实例中存在微服务,则不能使用负载均衡器在这些服务之间提供通信,除非该负载均衡器是面向互联网的,或者实例是通过 IP 地址注册的。有关更多信息,请参阅 从目标到其负载均衡器的请求连接超时

请求路由和 IP 地址

如果使用实例 ID 指定目标,则使用实例的主网络接口中指定的主私有 IP 地址将流量路由到实例。负载均衡器在将数据包转发到目标实例之前重写目的地 IP 地址。

如果使用 IP 地址指定目标,则可以使用来自一个或多个网络接口的任何私有 IP 地址将流量路由到实例。这使一个实例上的多个应用程序可以使用同一端口。请注意,每个网络接口都可以有自己的安全组。负载均衡器在将数据包转发到目标之前重写目的地 IP 地址。

有关允许实例的流量的更多信息,请参阅目标安全组

将本地资源作为目标

当目标类型为 ip 时,通过 AWS Direct Connect 或 Site-to-Site VPN 连接链接的本地资源可作为目标。

使用 AWS Direct Connect 或 AWS Site-to-Site VPN 将网络负载均衡器与本地服务器连接。

使用本地资源时,这些目标的 IP 地址必须仍来自下列 CIDR 块之一:

  • 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)

有关 AWS Direct Connect 的更多信息,请参阅什么是 AWS Direct Connect?

有关 AWS Site-to-Site VPN 的更多信息,请参阅什么是 AWS Site-to-Site VPN?

IP 地址类型

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

Network Load Balancer 支持 IPv4 和 IPv6 目标组。默认选择为 IPv4。IPv6 目标组只能与双堆栈网络负载均衡器关联。

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

  • IPv6 目标组只能用于具有 TCP 或 TLS 侦听器的dualstack负载均衡器。

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

已注册目标

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

如果应用程序需求增加,您可以向一个或多个目标组注册其他目标以便满足该需求。一旦注册过程完成,并且目标通过了第一项初始运行状况检查,负载均衡器就会开始将流量路由到新注册的目标,而不管配置的阈值如何。

如果应用程序需求减少或者您需要为目标提供服务,您可以从目标组取消注册目标。取消注册目标将从目标组中删除目标,但不会影响目标。一旦取消注册,负载均衡器就会停止将流量路由到目标。目标将进入 draining 状态,直至进行中请求完成。当您准备好恢复接收流量时,可以再次向目标组注册目标。

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

要求和注意事项
  • 如果实例采用以下实例类型,则不能利用实例 ID 注册实例:C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3 或 T1。

  • 当按实例 ID 为 IPv6 目标组注册目标时,必须为目标分配主 IPv6 地址。要了解更多信息,请参阅《Amazon EC2 用户指南》中的 IPv6 地址

  • 按实例 ID 注册目标时,实例必须与网络负载均衡器位于同一个 Amazon VPC 中。如果实例所在的 VPC 与负载均衡器 VPC 是对等的(位于同一区域或不同区域),则不能按实例 ID 注册实例。可以用 IP 地址注册这些实例。

  • 如果您按 IP 地址注册目标,并且该 IP 地址与负载均衡器位于同一 VPC 中,则负载均衡器会验证其是否来自可以访问的子网。

  • 负载均衡器仅将流量路由到已启用的可用区中的目标。未启用的区域中的目标未使用。

  • 对于 UDP 和 TCP_UDP 目标组,如果实例位于负载均衡器 VPC 之外,或者采用以下实例类型之一,则不要用 IP 地址注册实例:C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3 或 T1。如果目标驻留在负载均衡器 VPC 之外或者采用不受支持的实例类型,则目标可能能够接收来自负载均衡器的流量,但随后无法响应。

目标组属性

您可以通过编辑目标组的属性来对其进行配置。有关更多信息,请参阅 编辑目标组属性

支持以下目标组属性。只有当目标组类型为 instanceip 时,才能修改这些属性。如果目标组类型为 alb,则这些属性将始终使用其默认值。

deregistration_delay.timeout_seconds

Elastic Load Balancing 在将取消注册目标的状态从 draining 更改为 unused 之前需等待的时间。范围为 0-3600 秒。默认值为 300 秒。

deregistration_delay.connection_termination.enabled

指示负载均衡器是否在取消注册超时结束时终止连接。该值为 truefalse。对于新的 UDP/TCP_UDP 目标组,默认值为 true。否则,默认值为 false

load_balancing.cross_zone.enabled

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

preserve_client_ip.enabled

指示是否启用客户端 IP 保留。该值为 truefalse。如果目标组类型为 IP 地址且目标组协议是 TCP 或 TLS,则默认处于禁用状态。否则,默认处于启用状态。无法为 UDP 和 TCP_UDP 目标组禁用客户端 IP 保留。

proxy_protocol_v2.enabled

指示是否已启用代理协议版本 2。默认情况下,禁用代理协议。

stickiness.enabled

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

stickiness.type

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

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 到 100 之间的整数。当 off 时,DNS 故障转移被禁用,这意味着即使目标组中的所有目标都运行状况不佳,也不会从 DNS 中移除该区域。默认为 off

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

target_health_state.unhealthy.connection_termination.enabled

指示负载均衡器是否终止与运行状况不佳的目标的连接。该值为 truefalse。默认为 true

target_health_state.unhealthy.draining_interval_seconds

弹性负载均衡在将运行状况不佳目标的状态从 unhealthy.draining 更改为 unhealthy 之前需等待的时间。范围为 0-360000 秒。默认值为 0 秒。

注意:只有在 target_health_state.unhealthy.connection_termination.enabledfalse 时才能配置此属性。

目标组运行状况

默认情况下,只要目标组至少有一个运行状况良好的目标,就会被视为运行状况良好。如果您的实例集很大,则仅有一个运行状况良好的目标为流量提供服务是不够的。相反,您可以指定必须运行状况良好的目标数量下限或最低百分比,以及当运行状况良好的目标低于指定阈值时负载均衡器将采取哪些操作。这样可以提高可用性。

运行状况不佳状态的操作

您可以为以下操作配置运行状况良好阈值:

  • DNS 故障转移 — 当某区域中运行状况良好的目标低于阈值时,我们会在 DNS 中将该区域的负载均衡器节点的 IP 地址标记为运行状况不佳。因此,当客户端解析负载均衡器 DNS 名称时,流量将会仅路由到运行状况良好的区域。

  • 路由故障转移 - 当某区域中运行状况良好的目标低于阈值时,负载均衡器会将流量发送到负载均衡器节点可用的所有目标(包括运行状况不佳的目标)。这增加了客户端连接成功的机会,尤其是在目标暂时未能通过运行状况检查时,并降低了运行状况良好的目标过载的风险。

要求和注意事项

  • 如果为某项操作指定了两种类型的阈值(计数和百分比),则负载均衡器会在违反任一阈值时执行该操作。

  • 如果为这两项操作都指定了阈值,则 DNS 故障转移的阈值必须大于或等于路由故障转移的阈值,以便 DNS 故障转移会在路由故障转移时或之前发生。

  • 如果您将阈值指定为百分比,我们将根据在目标组中注册的目标总数动态计算该值。

  • 目标总数取决于关闭还是打开跨区域负载均衡。如果跨区域负载均衡处于关闭状态,则每个节点仅向自己区域中的目标发送流量,这意味着阈值将分别应用于每个已启用区域中的目标数量。如果跨区域负载均衡处于打开状态,则每个节点将流量发送到所有已启用区域中的所有目标,这意味着指定的阈值将应用于所有已启用区域中的目标总数。有关更多信息,请参阅 跨可用区负载均衡

  • 通过 DNS 故障转移,我们会从负载均衡器的 DNS 主机名中删除运行状况不佳区域的 IP 地址。但是,本地客户端 DNS 缓存中可能会包含这些 IP 地址,直到 DNS 记录中的生存时间 (TTL) 到期(60 秒)。

  • 当发生 DNS 故障转移时,这会影响与负载均衡器关联的所有目标组。请确保剩余区域中有足够的容量来处理这些额外流量,尤其是在跨区域负载均衡关闭的情况下。

  • 使用 DNS 故障转移时,如果所有负载均衡器区域都被视为运行状况不佳,则负载均衡器会将流量发送到所有区域(包括运行状况不佳的区域)。

  • 除了是否有足够运行状况良好的目标可能会导致 DNS 故障转移之外,还有其他因素,例如区域的运行状况。

示例

以下示例演示了如何应用目标组运行状况设置。

场景
  • 支持 A 和 B 两个可用区的负载均衡器

  • 每个可用区中包含 10 个注册目标

  • 目标组具有以下目标组运行状况设置:

    • DNS 故障转移 - 50%

    • 路由故障转移 - 50%

  • 可用区 B 中有六个目标失败

如果跨区域负载均衡关闭
  • 每个可用区中的负载均衡器节点只能将流量发送到其可用区内的 10 个目标。

  • 可用区 A 中有 10 个运行状况良好的目标,符合所需的运行状况良好的目标百分比。负载均衡器继续在 10 个运行状况良好的目标之间分配流量。

  • 可用区 B 中只有 4 个运行状况良好的目标,占可用区 B 中负载均衡器节点目标的 40%。由于这低于所需的运行状况良好的目标百分比,负载均衡器会执行以下操作:

    • DNS 故障转移 - 可用区 B 在 DNS 中被标记为运行状况不佳。由于客户端无法将负载均衡器名称解析为可用区 B 中的负载均衡器节点,并且可用区 A 运行状况良好,因此客户端会向可用区 A 发送新连接。

    • 路由故障转移 - 当新连接明确发送到可用区 B 时,负载均衡器会将流量分配到可用区 B 中的所有目标(包括运行状况不佳的目标)。这样可以防止剩余运行状况良好的目标发生中断。

如果跨区域负载均衡打开
  • 每个负载均衡器节点可以向两个可用区中的所有 20 个注册目标发送流量。

  • 可用区 A 中有 10 个运行状况良好的目标,可用区 B 中有 4 个运行状况良好的目标,总共有 14 个运行状况良好的目标。这是两个可用区中负载均衡器节点目标的 70%,符合所需的运行状况良好的目标百分比。

  • 负载均衡器将在两个可用区内 14 个运行状况良好的目标之间分配流量。

为负载均衡器使用 Route 53 DNS 故障转移

如果使用 Route 53 将 DNS 查询路由到您的负载均衡器,您也可以使用 Route 53 为您的负载均衡器配置 DNS 故障转移。在失效转移配置中,Route 53 将检查负载均衡器的目标组目标的运行状况以确定目标是否可用。如果没有已注册到负载均衡器的运行状况正常的目标,或如果负载均衡器本身运行状况不佳,则 Route 53 会将流量路由到其他可用资源,例如 Amazon S3 中运行状况正常的负载均衡器或静态网站。

例如,假设您有一个用于 www.example.com 的 Web 应用程序,并且您希望使用在不同区域内的两个负载均衡器之后运行的冗余实例。您希望流量主要路由到一个区域中的负载均衡器,并且您希望在发生故障期间将另一个区域中的负载均衡器用作备份。如果配置 DNS 故障转移,则可以指定您的主和辅助 (备份) 负载均衡器。如果主负载均衡器可用,则 Route 53 会将流量定向到主负载均衡器,否则会将流量定向到辅助负载均衡器。

使用评估目标运行状况功能
  • 当网络负载均衡器别名记录上的“评估目标运行状况”设置为 Yes 时,Route 53 将评估 alias target 值指定的资源的运行状况。对于网络负载均衡器,Route 53 使用与负载均衡器关联的目标组运行状况检查。

  • 当网络负载均衡器中的所有目标组均运行正常时,Route 53 会将别名记录标记为运行正常。如果目标组至少包含一个运行正常的目标,目标组将通过运行状况检查。然后,Route 53 会根据您的路由策略返回记录。如果使用失效转移路由策略,则 Route 53 返回主记录。

  • 如果网络负载均衡器中的任何目标组运行状况不佳,则别名记录无法通过 Route 53 运行状况检查(失效时开放)。如果使用评估目标运行状况功能,则失效转移路由策略会失败。

  • 如果网络负载均衡器中的所有目标组均为空(无目标),则 Route 53 会认为此记录运行状况不佳(失效时开放)。如果使用评估目标运行状况功能,则失效转移路由策略会失败。

有关更多信息,请参阅 Amazon Route 53 开发人员指南中的配置 DNS 故障转移