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

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

Network Load Balancer

负载均衡器 充当客户端的单一接触点。客户端将请求发送到负载均衡器,然后负载均衡器将请求发送到一个或多个可用区中的目标 (例如 EC2 实例)。

要配置您的负载均衡器,可以创建目标组,然后将目标注册到目标组。如果您确保每个启用的可用区均具有至少一个注册目标,则负载均衡器将具有最高效率。您还可以创建侦听器来检查来自客户端的连接请求,并将来自客户端的请求路由到目标组中的目标。

Network Load Balancer 通过 VPC 对等连接、Amazon托管 VPN、Amazon Direct Connect 和第三方 VPN 解决方案支持来自客户端的连接。

负载均衡器状态

负载均衡器具有下列状态之一:

provisioning

正在设置负载均衡器。

active

负载均衡器已完全设置并准备好路由流量。

failed

无法设置负载均衡器。

负载均衡器属性

负载均衡器具有以下属性:

access_logs.s3.enabled

指示是否启用存储在 Amazon S3 中的访问日志。默认为 false

access_logs.s3.bucket

访问日志所用的 Amazon S3 存储桶的名称。如果启用访问日志,则此属性是必需的。有关更多信息,请参阅 存储桶要求

access_logs.s3.prefix

Amazon S3 存储桶中位置的前缀。

deletion_protection.enabled

指示是否启用删除保护。默认为 false

ipv6.deny_all_igw_traffic

阻止互联网网关 (IGW) 访问负载均衡器,以防通过互联网网关意外访问内部负载均衡器。对于面向互联网的负载均衡器,它设置为 false;对于内部负载均衡器,它设置为 true。此属性不会阻止非 IGW(例如,通过对等连接、中转网关、Amazon Direct Connect 或者 Amazon VPN)访问互联网。

load_balancing.cross_zone.enabled

指示是否启用了跨可用区负载均衡。默认为 false

dns_record.client_routing_policy

指示将如何在负载均衡器可用区之间进行分配流量。可能的值为 availability_zone_affinity(100% 可用区亲和性)、partial_availability_zone_affinity(85% 可用区亲和性)和 any_availability_zone(0% 可用区亲和性)。

IP 地址类型

您可以设置客户端可与您的负载均衡器结合使用的 IP 地址类型。以下是 IP 地址类型:

ipv4

客户端必须使用 IPv4 地址连接到负载均衡器(例如 192.0.2.1)。启用 IPv4 的负载均衡器(面向互联网和内部)支持 TCP、UDP、TCP_UDP 和 TLS 侦听器。

dualstack

客户端可以同时使用 IPv4 地址(例如 192.0.2.1)和 IPv6 地址(例如,2001:0db8:85a3:0:0:8a2e:0370:7334)连接到负载均衡器。启用双堆栈的负载均衡器(面向互联网和内部)支持 TCP 和 TLS 侦听器。

双堆栈负载均衡器注意事项
  • 负载均衡器根据目标组的 IP 地址类型与目标进行通信。

  • 当您为负载均衡器启用双堆栈模式时,Elastic Load Balancing 为负载均衡器提供 AAAA DNS 记录。使用 IPv4 地址与负载均衡器通信的客户端解析 A DNS 记录。使用 IPv6 地址与负载均衡器通信的客户端解析 AAAA DNS 记录。

  • 阻止通过互联网网关对内部双堆栈负载均衡器的访问,以防意外访问互联网。但是,这不会阻止通过其他方式(例如,通过对等连接、Transit Gateway、Amazon Direct Connect 或者 Amazon VPN)访问互联网。

有关负载均衡器 IP 地址类型的更多信息,请参阅 更新地址类型

可用区

在创建负载均衡器时,可为其启用一个或多个可用区。如果为负载均衡器启用多个可用区,则可以提高应用程序的容错能力。您无法在创建可用区后对网络负载均衡器禁用这些可用区,但可以启用其他可用区。

当启用某个可用区时,应指定该可用区中的一个子网。Elastic Load Balancing 会在该可用区中创建一个负载均衡器节点,并为子网创建一个网络接口(描述以“ELB net”开头并包括负载均衡器的名称)。可用区内的每个负载均衡器节点使用该网络接口来获取一个 IPv4 地址。请注意,您可以查看此网络接口,但是不能修改它。

在您创建面向 Internet 的负载均衡器时,可以选择为每个子网指定一个弹性 IP 地址。如果您不选择自己的弹性 IP 地址之一,Elastic Load Balancing 将为每个子网提供一个弹性 IP 地址。这些弹性 IP 地址为您的负载均衡器提供静态 IP 地址,这些地址在负载均衡器的生命周期内不会更改。创建负载均衡器后,您无法更改这些弹性 IP 地址。

在您创建内部负载均衡器时,可以选择为每个子网指定一个私有 IP 地址。如果您没有从子网指定 IP 地址,Elastic Load Balancing 将为您选择一个 IP 地址。这些私有 IP 地址为您的负载均衡器提供静态 IP 地址,这些地址在负载均衡器的生命周期内不会更改。创建负载均衡器后,您无法更改这些私有 IP 地址。

注意事项
  • 对于面向 Internet 的负载均衡器,您指定的子网必须至少具有 8 个可用 IP 地址。对于内部负载均衡器,仅当您让 Amazon 从子网中选择私有 IPv4 地址时,才需要执行此操作。

  • 无法指定受约束可用区中的子网。错误消息为“Load balancers with type 'network' are not supported in az_name (az_name 中不支持“网络”类型的负载均衡器)”。您可以在不受约束的其他可用区中指定子网,并使用跨可用区负载均衡将流量分发至受约束d 可用区中的目标。

  • 您可以指定已经与您共享的子网。

  • 您无法在本地区域中指定子网。

在启用一个可用区后,负载均衡器会开始将请求路由到该可用区中的已注册目标。如果您确保每个启用的可用区均具有至少一个注册目标,则负载均衡器将具有最高效率。

使用控制台添加可用区
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器的名称以打开其详细信息页面。

  4. Network mapping(网络映射)选项卡上,选择 Edit subnets(编辑子网)。

  5. 要启用一个可用区,请选中该可用区的复选框。如果该可用区有一个子网,则将选择此子网。如果该可用区有多个子网,请选择其中一个子网。请注意,您只能为每个可用区选择一个子网。

    对于面向 Internet 的负载均衡器,您可以为每个可用区选择弹性 IP 地址。对于内部负载均衡器,您可以从每个子网的 IPv4 范围分配私有 IP 地址,而不是让 Elastic Load Balancing 分配一个 IP 地址。

  6. 选择保存更改

使用 Amazon CLI 添加可用区

使用 set-subnets 命令。

跨可用区负载均衡

默认情况下,每个负载均衡器节点仅在其可用区中的已注册目标之间分配流量。如果您开启了跨区域负载均衡,则每个负载均衡器节点会在所有启用的可用区中的注册目标之间分配流量。您也可以开启目标组级别的跨区域负载均衡。有关更多信息,请参阅 Elastic Load Balancing 用户指南中的 目标组的跨区域负载均衡跨区域负载均衡

删除保护

为了防止您的负载均衡器被意外删除,您可以启用删除保护。默认情况下,已为负载均衡器禁用删除保护。

如果您为负载均衡器启用删除保护,则必须先禁用删除保护,然后才能删除负载均衡器。

使用控制台启用删除保护
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器的名称以打开其详细信息页面。

  4. 属性选项卡上,选择编辑

  5. 配置下,打开删除保护

  6. 选择保存更改

使用控制台禁用删除保护
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器的名称以打开其详细信息页面。

  4. 属性选项卡上,选择编辑

  5. 配置下,打开删除保护

  6. 选择保存更改

使用 Amazon CLI 启用或禁用删除保护

使用带有deletion_protection.enabled属性的modify-load-balancer-attributes命令。

连接空闲超时

对于客户端通过 Network Load Balancer 发出的每个 TCP 请求,都将跟踪该连接的状态。如果客户端或目标通过连接发送数据的间隔超过空闲超时期限,则连接将关闭。如果客户端或目标在空闲超时期限后发送数据,则会收到一个 TCP RST 数据包,以指示连接不再有效。

我们将 TCP 流的空闲超时值设置为 350 秒。您无法修改此值。客户端或目标可以使用 TCP keepalive 数据包重置空闲超时值。为维护 TLS 连接而发送的 Keepalive 数据包不能包含数据或负载。

当 TLS 侦听器收到来自客户端或目标的 TCP keepalive 数据包时,负载均衡器会生成 TCP keepalive 数据包,并每 20 秒将它们发送到前端和后端连接。您不能修改此行为。

虽然 UDP 无连接,但是负载均衡器将根据源和目标 IP 地址和端口保持 UDP 流状态。这可确保属于同一个流中的数据包始终发送到相同的目标。空闲超时期限后,负载均衡器会考虑将传入的 UDP 数据包作为新流,并路由到新的目标。Elastic Load Balancing 将 UDP 流的空闲超时值设置为 120 秒。

EC2 实例必须在 30 秒内响应新请求,才能建立退回路径。

DNS 名称

每个 Network Load Balancer 都会收到具有以下语法的默认域名系统 (DNS) 名称:name-id.elb.region.amazonaws.com。例如, my-load-balancer-1234567890abcdef。elb.us-east-2.amazonaws.com。

如果您更喜欢使用更容易记住的 DNS 名称,则可以创建自定义域名并将其与负载均衡器的 DNS 名称相关联。在客户端使用此自定义域名进行请求时,DNS 服务器将它解析为负载均衡器的 DNS 名称。

首先,向经认可的域名注册商注册域名。下一步,通过您的 DNS 服务(如您的域注册商)创建一条 DNS 记录将请求路由到您的负载均衡器。有关更多信息,请参阅您的 DNS 服务的文档。例如,如果您将 Amazon Route 53 用作 DNS 服务,请创建一条指向负载均衡器的别名记录。有关更多信息,请参阅 Amazon Route 53 开发人员指南中的将流量路由到 ELB 负载均衡器

负载均衡器针对每个启用的可用区都有一个 IP 地址。这些是负载均衡器节点的 IP 地址。负载均衡器的 DNS 名称解析为这些地址。例如,假设您的负载均衡器的自定义域名是 example.networkloadbalancer.com。使用以下 dignslookup 命令确定负载均衡器节点的 IP 地址。

Linux 或 Mac

$ dig +short example.networkloadbalancer.com

Windows

C:\> nslookup example.networkloadbalancer.com

负载均衡器具有其负载均衡器节点的 DNS 记录。您可以使用具有以下语法的 DNS 名称来确定负载均衡器节点的 IP 地址:az.name-id.elb.region.amazonaws.com。

Linux 或 Mac

$ dig +short us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com

Windows

C:\> nslookup us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com

可用区 DNS 亲和性

使用默认客户端路由策略时,发送到网络负载均衡器 DNS 名称的请求将收到任何运行正常的负载均衡器 IP 地址。这会导致跨负载均衡器可用区分配客户端连接。使用可用区亲和性路由策略时,客户端 DNS 查询会优先考虑自身可用区中的负载均衡器 IP 地址。这有助于降低延迟和提高弹性,因为客户端在连接到目标时无需跨越可用区边界。

使用 Amazon Route 53 Resolver 的网络负载均衡器的可用客户端路由策略:
  • 可用区亲和性100% 可用区亲和性

    客户端 DNS 查询将优先使用自身可用区中的负载均衡器 IP 地址。如果自身可用区中没有运行正常的负载均衡器 IP 地址,则查询可能会解析到其他可用区。

  • 部分可用区亲和性85% 可用区亲和性

    85% 的客户端 DNS 查询会优先选择自身可用区中的负载均衡器 IP 地址,剩余的查询会解析到任何运行正常的可用区。如果自身可用区中没有运行正常的 IP 地址,则查询可能会解析到其他运行正常的可用区。如果所有可用区中都没有运行正常的 IP 地址,则查询会解析到任何可用区。

  • 任意可用区(默认值)– 0% 可用区亲和性

    客户端 DNS 查询将在所有负载均衡器可用区中运行正常的负载均衡器 IP 地址中进行解析。

注意

可用区亲和性路由策略仅适用于使用 Route 53 Resolver 解析网络负载均衡器 DNS 名称的客户端。有关更多信息,请参阅《Amazon Route 53 开发人员指南》中的 什么是 Amazon Route 53 Resolver?

可用区亲和性有助于将请求从客户端路由到负载均衡器,而跨可用区负载平衡有助于将请求从负载均衡器路由到目标。使用可用区关联性时,应关闭跨区域负载平衡,这样可以确保从客户端到目标的负载均衡器流量保持在同一个可用区内。使用此配置,客户端流量将发送到同一个网络负载均衡器可用区,因此建议将您的应用程序配置为在每个可用区中独立扩展。当每个可用区域的客户端数量或每个可用区的流量不同时,这是一个重要的考虑因素。有关更多信息,请参阅 目标组的跨区域负载均衡

当可用区被认为运行不正常或开始可用区转移时,除非故障打开生效,否则该可用区 IP 地址将被视为运行不正常,并且不会返回至客户端。当 DNS 记录处于故障打开状态时,可用区亲和性将保持不变。这有助于保持可用区的独立性,并防止潜在的跨可用区故障。

使用可用区亲和性时,预计可用区之间有时会出现不平衡的情况。建议确保目标在可用区级别进行扩展,以支持每个可用区工作负载。如果不平衡情况十分严重,则建议关闭可用区亲和性。这样将可以在 60 秒内在所有负载均衡器可用区之间均匀分配客户端连接,或者在 DNS TTL 之间均匀分配。

在使用可用区亲和性之前,应注意以下几点:
  • 可用区亲和性会导致使用 Route 53 Resolver 的所有网络负载均衡器客户端发生变化。

    • 客户端无法决定是要使用本可用区 DNS 解析,还是多可用区解析,相关决定由可用区亲和性代为作出。

    • 客户端并没有可靠的方法来确定其何时受到可用区亲和性的影响,也没有可靠的方法来确定 IP 地址所位于的具体可用区。

  • 在 DNS 运行状况检查认为其可用区本地 IP 地址完全不正常并将其从 DNS 中移除前,客户端将继续分配该本地地址。

  • 如果在开启跨区域负载平衡的情况下使用可用区亲和性,则可能会导致可用区之间的客户端连接分配失衡。建议将应用程序堆栈配置为在每个可用区中独立扩展,从而确保其可以支持相应的可用区客户端流量。

  • 如果开启了跨可用区负载平衡,网络负载均衡器将受到跨可用区影响。

  • 每个网络负载均衡器可用区的负载将与客户端请求的可用区位置成正比。如果您未配置在特定可用区中运行的客户端数量,则必须以被动方式独立扩展每个可用区。

监控

建议使用可用区负载均衡器指标来跟踪可用区之间的连接分配情况。您可以使用指标来查看每个可用区的新连接数和活跃连接数。

我们建议跟踪以下指标:

  • ActiveFlowCount – 从客户端发往目标的并发流(或连接)总数。

  • NewFlowCount – 指定时间段内建立的从客户端到目标的新流(或连接)总数。

  • HealthyHostCount – 被视为运行正常的目标数量。

  • UnHealthyHostCount – 被视为运行不正常的目标数量。

有关更多信息,请参阅 CloudWatch 您的 Network Load Balancer 的指标

开启可用区亲和性

本过程中的步骤说明了如何使用 Amazon EC2 控制台开启可用区亲和性。

使用控制台开启可用区亲和性
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器的名称以打开其详细信息页面。

  4. 属性选项卡上,选择编辑

  5. 可用区路由配置客户端路由策略(DNS 记录)下,选择可用区亲和性部分可用区亲和性

  6. 选择保存更改

使用 Amazon CLI 开启可用区亲和性

使用带有dns_record.client_routing_policy属性的modify-load-balancer-attributes命令。

关闭可用区亲和性

本过程中的步骤说明了如何使用 Amazon EC2 控制台关闭可用区亲和性。

使用控制台关闭可用区亲和性
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择负载均衡器

  3. 选择负载均衡器的名称以打开其详细信息页面。

  4. 属性选项卡上,选择编辑

  5. 可用区路由配置客户端路由策略(DNS 记录)下,选择任何可用区亲和性

  6. 选择保存更改

使用 Amazon CLI 关闭可用区亲和性

使用带有dns_record.client_routing_policy属性的modify-load-balancer-attributes命令。