Elastic Load Balancing 的工作原理 - Elastic Load Balancing

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

Elastic Load Balancing 的工作原理

负载均衡器接受来自客户端的传入流量,并将请求路由到其在一个或多个可用区中的注册目标(例如EC2实例)。负载均衡器还会监控已注册目标的运行状况,并确保它只将流量路由到正常运行的目标。当负载均衡器检测到不正常目标时,它会停止将流量路由到该目标。然后,当它检测到目标再次正常时,它会恢复将流量路由到该目标。

您可通过指定一个或多个侦听器将您的负载均衡器配置为接受传入流量。侦听器是用于检查连接请求的进程。它配置了用于从客户端连接到负载均衡器的协议和端口号。同样,它配置了用于从负载均衡器连接到目标的协议和端口号。

Elastic Load Balancing 支持以下类型的负载均衡器:

  • Application Load Balancer

  • Network Load Balancer

  • 网关负载均衡器

  • 经典负载均衡器

负载均衡器类型的配置方式具有一个关键区别。对于 Application Load Balancer、Network Load Balancer 和 Gateway Load Balancer,可以在目标组中注册目标,并将流量路由到目标组。通过经典负载均衡器,可以在负载均衡器中注册实例。

可用区与负载均衡器节点

当您为负载均衡器启用可用区时,Elastic Load Balancing 会在该可用区中创建一个负载均衡器节点。如果您在可用区中注册目标但不启用可用区,这些已注册目标将无法接收流量。当您确保每个启用的可用区均具有至少一个已注册目标时,负载均衡器将具有最高效率。

我们建议为所有负载均衡器启用多个可用区。但对于 Application Load Balancer,要求您至少启用两个或更多可用区。此配置有助于确保负载均衡器可以继续路由流量。如果一个可用区变得不可用或没有正常目标,则负载均衡器会将流量路由到其他可用区中的正常目标。

在禁用一个可用区后,该可用区中的目标将保持已注册到负载均衡器的状态。但是,即使它们保持已注册状态,负载均衡器也不会将流量路由到它们。

跨区域负载均衡

负载均衡器的节点将来自客户端的请求分配给已注册目标。启用了跨区域负载均衡后,每个负载均衡器节点会在所有启用的可用区中的已注册目标之间分配流量。禁用了跨区域负载均衡后,每个负载均衡器节点会仅在其可用区中的已注册目标之间分配流量。

下图演示了以轮询为默认路由算法的跨可用区负载均衡效果。有 2 个已启用的可用区,其中可用区 A 中有 2 个目标,可用区 B 中有 8 个目标。客户端发送请求,Amazon Route 53 使用负载均衡器节点之一的 IP 地址响应每个请求。基于轮询路由算法,系统会分配流量,以便每个负载均衡器节点接收来自客户端 50% 的流量。每个负载均衡器节点会在其范围中的已注册目标之间分配其流量份额。

如果启用了跨区域负载均衡,则 10 个目标中的每个目标接收 10% 的流量。这是因为每个负载均衡器节点可将其 50% 的客户端流量路由到所有 10 个目标。

启用跨区域负载均衡时

如果禁用了跨区域负载均衡:

  • 可用区 A 中的两个目标中的每个目标接收 25% 的流量。

  • 可用区 B 中的八个目标中的每个目标接收 6.25% 的流量。

这是因为每个负载均衡器节点只能将其 50% 的客户端流量路由到其可用区中的目标。

禁用跨区域负载均衡时

对于应用程序负载均衡器,跨可用区负载均衡始终在负载均衡器级别启用。在目标组级别,可以禁用跨可用区负载均衡。有关更多信息,请参阅《应用程序负载均衡器用户指南》中的关闭跨可用区负载均衡

对于 Network Load Balancer 和 Gateway Load Balancer,默认情况下会禁用跨区域负载均衡。创建负载均衡器后,您随时可以启用或禁用跨区域负载均衡。有关更多信息,请参阅《网络负载均衡器用户指南》中的 Cross-zone load balancing

在创建经典负载均衡器时,跨区域负载均衡的默认值取决于创建负载均衡器的方式。使用API或CLI,默认情况下跨区域负载平衡处于禁用状态。使用时 AWS Management Console,默认情况下会选择启用跨区域负载平衡的选项。创建经典负载均衡器后,您随时可以启用或禁用跨区域负载均衡。有关更多信息,请参阅《经典负载均衡器用户指南》中的启用跨区域负载均衡

可用区转移

区域转移是 Amazon 应用程序恢复控制器 (ARC) (ARC) 中的一项功能。通过可用区转移,只需执行一次操作即可将负载均衡器资源从受损的可用区转移出去。这样,您就可以继续从 AWS 区域中的其他运行状况良好的可用区运行。

当您启动可用区转移时,负载均衡器会停止向受影响的可用区发送这些资源的流量。ARC立即创建区域偏移。但是,可能需要很短时间(通常长达几分钟)才能完成受影响可用区中正在进行的现有连接。有关更多信息,请参阅 A mazon 应用程序恢复控制器 (ARC) 开发者指南中的区域转移的工作原理:运行状况检查和区域 IP 地址

在使用可用区转移之前,请查看以下内容:

  • 当您在已开启跨区域负载均衡的情况下使用应用程序负载均衡器时,不支持可用区转移。当您在已开启或关闭跨区域负载均衡的情况下使用网络负载均衡器时,不支持可用区转移。

  • 在 AWS Global Accelerator中将应用程序负载均衡器用作加速器端点时,不支持可用区转移。

  • 只能为单个可用区中的特定负载均衡器启动可用区转移。无法为多个可用区启动可用区转移。

  • AWS DNS当多个基础设施问题影响服务时,主动删除区域负载均衡器 IP 地址。在开始可用区转移之前,请务必检查当前的可用区容量。如果您的负载均衡器已关闭跨可用区负载均衡,而您使用可用区转移来删除可用区负载均衡器 IP 地址,则受可用区转移影响的可用区也会失去目标容量。

  • 当应用程序负载均衡器是网络负载均衡器的目标时,请始终从网络负载均衡器启动可用区转移。如果从应用程序负载均衡器启动可用区转移,则网络负载均衡器将不会识别转移,并继续向应用程序负载均衡器发送流量。

有关更多指导和信息,请参阅《Ama ARC zon 应用程序恢复控制器 (ARC) 开发人员指南》中的 Route 53 区域转移的最佳实践

请求路由

在客户端向您的负载均衡器发送请求之前,它会使用域名系统 (DNS) 服务器解析负载均衡器的域名。该DNS条目由 Amazon 控制,因为您的负载均衡器位于amazonaws.com域中。Amazon DNS 服务器向客户端返回一个或多个 IP 地址。这些是您的负载均衡器的负载均衡器节点的 IP 地址。对于网络负载均衡器,Elastic Load Balancing 将为您启用的每个可用区创建一个网络接口,并使用该网络接口来获取静态 IP 地址。在您创建网络负载均衡器时,可以选择将一个弹性 IP 地址关联到每个网络接口。

随着应用程序的流量随时间的推移而变化,Elastic Load Balancing 会扩展您的负载均衡器并更新DNS条目。该DNS条目还将 time-to-live (TTL) 指定为 60 秒。这有助于确保可以快速重新映射 IP 地址以响应不断变化的流量。

客户端可以确定使用哪个 IP 地址将请求发送到负载均衡器。用于接收请求的负载均衡器节点会选择一个正常运行的已注册目标,并使用其私有 IP 地址将请求发送到该目标。

有关更多信息,请参阅 Amazon Route 53 开发人员指南中的将流量路由到ELB负载均衡器

路由算法

借助 Application Load Balancer,接收请求的负载均衡器节点使用以下过程:

  1. 按优先级顺序评估侦听器规则以确定要应用的规则。

  2. 使用为目标组配置的路由算法,从目标组中为规则操作选择目标。默认路由算法是轮询。每个目标组的路由都是单独进行的,即使某个目标已在多个目标组中注册。

借助 Network Load Balancer,接收连接的负载均衡器节点使用以下过程:

  1. 使用流哈希算法从目标组中为默认规则选择目标。它使算法基于:

    • 协议

    • 源 IP 地址和源端口

    • 目标 IP 地址和目标端口

    • TCP序列号

  2. 在TCP连接生命周期内,将每个单独的连接路由到单个目标。来自客户端的TCP连接具有不同的源端口和序列号,并且可以路由到不同的目标。

借助 经典负载均衡器,接收请求的负载均衡器节点按照以下方式选择注册实例:

  • 对TCP监听器使用循环路由算法

  • 对HTTP和HTTPS侦听器使用未完成请求最少的路由算法

HTTP连接

经典负载均衡器使用提前打开的连接,但 Application Load Balancer 不使用。经典负载均衡器和 Application Load Balancer 均使用多路复用连接。也就是说,来自多个前端连接上的多个客户端的请求可通过单一的后端连接路由到指定目标。多路复用连接可缩短延迟并减少您的应用程序上的负载。为防止连接多路传输,请在HTTPkeep-alive响应中设置标题来禁用Connection: close标头。HTTP

应用程序负载均衡器和经典负载均衡器支持在前端连接上进行管道连接。HTTP它们不支持后端连接HTTP上的流水线。

应用程序负载均衡器支持以下HTTP请求方法:GET、HEAD、POST、PUT、DELETEOPTIONS、和。PATCH

应用程序负载均衡器在前端连接上支持以下协议:HTTP/0.9、/1.0、/HTTP1.1 和 /2。HTTP HTTP您只能将 HTTP /2 与HTTPS监听器一起使用,并且可以使用一个 HTTP /2 连接并行发送最多 128 个请求。应用程序负载均衡器还支持从HTTP到 WebSockets的连接升级。但是,如果连接升级,Application Load Balancer 侦听器路由规则和 AWS WAF 集成将不再适用。

默认情况下,应用程序负载均衡器在后端连接(到注册目标的负载均衡器)上使用 HTTP /1.1。但是,您可以使用协议版本通过 HTTP /2 或 g RPC 将请求发送到目标。有关更多信息,请参阅协议版本。默认情况下,keep-alive 标头在后端连接上受支持。对于来自没有主机标头的客户端的 HTTP /1.0 请求,负载均衡器会为在后端连接上发送的 HTTP /1.1 请求生成主机标头。主机标头包含负载均衡器的DNS名称。

经典负载均衡器在前端连接(客户端到负载均衡器)上支持以下协议:HTTP/0.9、/1.0 和 /1.1 HTTP。HTTP他们在后端连接(注册目标的负载均衡器)上使用 HTTP /1.1。默认情况下,keep-alive 标头在后端连接上受支持。对于来自没有主机标头的客户端的 HTTP /1.0 请求,负载均衡器会为在后端连接上发送的 HTTP /1.1 请求生成主机标头。主机标头包含负载均衡器节点的 IP 地址。

HTTP标题

Application Load Balancer 和经典负载均衡器会将 X-Forwarded-ForX-Forwarded-ProtoX-Forwarded-Port 标头自动添加到请求。

应用程序负载均衡器在将主机标头中的HTTP主机名发送到目标之前,将其转换为小写。

对于使用 HTTP /2 的前端连接,标头名称使用小写。在使用 HTTP /1.1 将请求发送到目标之前,以下标头名称将转换为混合大小写:X-Forwarded-For、X-Forwarded-Proto、X-Forwarded-Port、Host、X - Amzn-Trace-Id、Upgr ade 和 Connection所有其他标头名称是小写的。

Application Load Balancer 和经典负载均衡器将响应代理返回客户端后,遵守来自传入客户端请求的连接标头。

当使用 HTTP /1.1 的应用程序负载均衡器和经典负载均衡器收到 Expect: 100-Continue 标头时,它们会立即以 HTTP/1.1 100 继续响应,无需测试内容长度标头。Expect: 100-Continue 请求标头不会转发到其目标。

使用 HTTP /2 时,应用程序负载均衡器不支持来自客户端请求的 Exp ect: 100-Continu e 标头。Application Load Balancer 不会以 HTTP/2 100 继续或将此标头转发给其目标。

HTTP标题限制

应用程序负载均衡器的以下大小限制是无法更改的硬限制:

  • 请求行:16K

  • 单个标头:16K

  • 整个响应标头:32 K

  • 整个请求标头:64 K

负载均衡器模式

在创建负载均衡器时,您必须选择使其成为内部负载均衡器还是面向 Internet 的负载均衡器。

面向 Internet 的负载均衡器的节点具有公共 IP 地址。面向 Internet 的负载均衡器的DNS名称可以公开解析为节点的公有 IP 地址。因此,面向 Internet 的负载均衡器可以通过 Internet 路由来自客户端的请求。

内部负载均衡器的节点只有私有 IP 地址。内部负载均衡器的DNS名称可以公开解析为节点的私有 IP 地址。因此,内部负载均衡器只能路由来自有权访问负载均衡器的客户端的请求。VPC

面向 Internet 的负载均衡器和内部负载均衡器均使用私有 IP 地址将请求路由到您的目标。因此,您的目标无需使用公有 IP 地址从内部负载均衡器或面向 Internet 的负载均衡器接收请求。

如果您的应用程序具有多个层,则可以设计一个同时使用内部负载均衡器和面向 Internet 的负载均衡器的架构。例如,如果您的应用程序使用必须连接到 Internet 的 Web 服务器,以及仅连接到 Web 服务器的应用程序服务器,则可以如此。创建一个面向 Internet 的负载均衡器并向其注册 Web 服务器。创建一个内部负载均衡器并向它注册应用程序服务器。Web 服务器从面向 Internet 的负载均衡器接收请求,并将对应用程序服务器的请求发送到内部负载均衡器。应用程序服务器从内部负载均衡器接收请求。

IP 地址类型

您为负载均衡器指定的 IP 地址类型决定了客户端如何与负载均衡器通信。

  • IPv4仅限 — 客户端使用公用地址和私有IPv4地址进行通信。您为负载均衡器选择的子网必须具有IPv4地址范围。

  • Dualstack — 客户端使用公共和私有地址和地址进行通信IPv4。IPv6您为负载均衡器选择的子网必须具有IPv4和IPv6地址范围。

  • 不带公共地址的 Dualstack IPv4 — 客户端使用公有和私有地址以及私有IPv6地址进行通信。IPv4您为负载均衡器选择的子网必须具有IPv4和IPv6地址范围。internal 负载均衡器方案不支持此选项。

下表描述了每种负载均衡器类型支持的 IP 地址类型。

负载均衡器类型 IPv4只有 双堆栈 没有公开的双重堆栈 IPv4
应用程序负载均衡器
网络负载均衡器 没有
Gateway Load Balancer 没有
Classic 负载均衡器 没有 没有

您为目标组指定的 IP 地址类型决定了负载均衡器如何与目标通信。

  • IPv4仅限 — 负载均衡器使用私有IPv4地址进行通信。必须将带有IPv4地址的目标注册到IPv4目标组。

  • IPv6仅限 — 负载均衡器使用IPv6地址进行通信。必须将带有IPv6地址的目标注册到IPv6目标组。目标组必须与双堆栈负载均衡器一起使用。

下表描述了每个目标组协议支持的 IP 地址类型。

目标组协议 IPv4只有 IPv6只有
HTTP和 HTTPS
TCP
TLS
UDP和 TCP _ UDP
GENEVE - -

您的MTU负载均衡器的网络

最大传输单位 (MTU) 决定了可以通过网络发送的最大数据包的大小(以字节为单位)。连接越MTU大,单个数据包中可以传递的数据就越多。以太网帧由数据包(即您发送的实际数据)以及相关网络开销信息组成。通过互联网网关发送MTU的流量为 1500。这意味着,如果数据包超过 1500 字节,则将其分段以使用多个帧发送,或者如果在 IP 标头中设置 Don't Fragment,则将其丢弃。

负载平衡器节点上的MTU大小不可配置。巨型帧 (9001MTU) 是应用程序负载均衡器、网络负载均衡器和经典负载均衡器的负载均衡器节点的标准配置。网关负载均衡器支持 8500 MTU。有关更多信息,请参阅《网关负载均衡器用户指南》中的最大传输单位 (MTU)

该路径MTU是源主机和接收主机之间路径上支持的最大数据包大小。路径MTU发现 (PMTUD) 用于确定两台设备MTU之间的路径。如果客户端或目标不支持巨型帧,则路径MTU发现尤其重要。

当主机发送的数据包大于接收主机的数据包或大于路径上设备的数据包时,接收主机或设备会丢弃该数据包,然后返回以下ICMP消息:Destination Unreachable: Fragmentation Needed and Don't Fragment was Set (Type 3, Code 4)。MTU MTU这将指示传输主机将有效负载拆分为多个较小的数据包,并重新传输。

如果继续丢弃大于客户端或目标接口MTU大小的数据包,则 Path MTU Discovery (PMTUD) 可能无法正常工作。为避免这种情况,请确保 Path MTU Discovery 端到端运行,并且已在客户端和目标上启用了巨型帧。有关路径MTU发现和启用巨型帧的更多信息,请参阅 Amazon EC2 用户指南中的路径MTU发现