Elastic Load Balancing
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Elastic Load Balancing 如何工作

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

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

Elastic Load Balancing 支持三种类型的负载均衡器:应用程序负载均衡器、网络负载均衡器 和 传统负载均衡器。以下是这些负载均衡器的配置方式之间的主要区别。通过 应用程序负载均衡器 和 网络负载均衡器,可以在目标组中注册目标,并将流量路由到目标组。通过 传统负载均衡器,可以在负载均衡器中注册实例。

可用区与负载均衡器节点

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

我们建议您启用多个可用区。(请注意,使用 应用程序负载均衡器 时,我们需要您启用多个可用区。)借助此配置,如果一个可用区变得不可用或没有正常运行的目标,负载均衡器会继续将流量路由到其他可用区中正常运行的目标。

在禁用一个可用区后,该可用区中的目标仍将注册负载均衡器,但负载均衡器不会将流量路由到这些目标。

跨区域负载均衡

如果负载均衡器的节点可以分配请求,而不考虑可用区,这称为跨区域负载均衡。借助跨区域负载均衡,负载均衡器会在所有启用的可用区中的所有已注册目标之间平均分配流量。否则,每个负载均衡器节点会仅向其可用区中的已注册目标分配流量。例如,假设您在 us-west-2a 中具有 10 个实例,并且在 us-west-2b 中具有 2 个实例。借助跨区域负载均衡,负载均衡器会在所有 12 个实例之间平均分配传入请求。否则,us-west-2b 中的 2 个实例便会与 us-west-2a 中的 10 个实例承担等量的流量。

使用 应用程序负载均衡器,跨区域负载均衡会始终启用。

使用 网络负载均衡器,每个负载均衡器节点仅在其可用区中的注册目标之间分配流量。

在创建 传统负载均衡器 时,跨区域负载均衡的默认值取决于创建负载均衡器的方式。默认情况下,使用 API 或 CLI 时将禁用跨区域负载均衡。默认情况下,使用 AWS 管理控制台 时启用跨区域负载均衡的选项处于选中状态。创建 传统负载均衡器 后,您随时可以启用或禁用跨区域负载均衡。

请求路由选择

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

当流向应用程序的流量随时间变化时,Elastic Load Balancing 会扩展负载均衡器并更新 DNS 条目。请注意,DNS 条目也将生存时间 (TTL) 指定为 60 秒,这可确保 IP 地址可以迅速重新映射以响应不断变化的流量。

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

路由算法

使用 应用程序负载均衡器,用于接收请求的负载均衡器节点会按照优先级顺序评估侦听器规则以确定应用哪个规则,然后使用轮询路由算法从目标组中选择一个目标以实施规则操作。每个目标组的路由都是单独进行的,即使某个目标已在多个目标组中注册。

使用 网络负载均衡器,用于接收连接的负载均衡器节点会根据协议、源 IP 地址、源端口、目标 IP 地址、目标端口和 TCP 序列号,使用流式哈希算法从目标组中选择一个目标作为默认规则。来自客户端的 TCP 连接具有不同的源端口和序列号,可以路由到不同的目标。每个单独的 TCP 连接在连接的有效期内路由到单个目标。

使用 传统负载均衡器,用于接收请求的负载均衡器节点利用不同算法来选择已注册的实例。它对 TCP 侦听器使用轮询路由算法,对 HTTP 和 HTTPS 侦听器使用未完成请求最少路由算法。

HTTP 连接

传统负载均衡器使用提前打开的连接,但应用程序负载均衡器不使用。

对于前端连接 (客户端到负载均衡器),传统负载均衡器支持以下协议:HTTP/0.9、HTTP/1.0 和 HTTP/1.1。

对于前端连接,应用程序负载均衡器支持以下协议:HTTP/0.9、HTTP/1.0、HTTP/1.1 和 HTTP/2。HTTP/2 仅适用于 HTTPS 侦听器,使用一个 HTTP/2 连接最多只能并行发送 128 个请求。应用程序负载均衡器还支持将连接从 HTTP 升级到 Websockets。

对于后端连接 (负载均衡器到已注册目标),应用程序负载均衡器 和 传统负载均衡器 均使用 HTTP/1.1。对于后端连接,默认支持保持连接。如果 HTTP/1.0 请求来自没有主机标头的客户端,负载均衡器会对后端连接发送的 HTTP/1.1 请求生成一个主机标头。对于应用程序负载均衡器,主机标头包含负载均衡器的 DNS 名称。对于传统负载均衡器,主机标头包含负载均衡器节点的 IP 地址。

应用程序负载均衡器和传统负载均衡器均可设置空闲超时值。默认值为 60 秒。对于应用程序负载均衡器,空闲超时值只适用于前端连接。对于传统负载均衡器,如果前端连接或后端连接的空闲时间超过了空闲超时值,连接会断开,客户端会收到一条错误响应。已注册的目标可以使用保持连接超时保持后端连接处于开启状态,直到它准备就绪再断开。

应用程序负载均衡器和传统负载均衡器均针对前端连接支持管道化 HTTP。对于后端连接它们均不支持管道化 HTTP。

HTTP 标头

应用程序负载均衡器和传统负载均衡器均支持 X-Forwarded-ForX-Forwarded-ProtoX-Forwarded-Port 标头。

对于使用 HTTP/2 的前端连接,标头名称是小写的。使用 HTTP/1.1 将请求发送到目标之前,以下标头名称将转换为混合大小写:X-Forwarded-ForX-Forwarded-ProtoX-Forwarded-PortHostX-Amzn-Trace-IdUpgradeConnection。所有其他标头名称是小写的。

应用程序负载均衡器和传统负载均衡器将响应代理返回客户端后,遵守来自传入客户端请求的连接标头。

应用程序负载均衡器的 HTTP 标头具有以下大小限制:

  • 请求行:16K

  • 单个标头:16K

  • 完整标头:64K

负载均衡器模式

在创建负载均衡器时,您必须选择使其成为内部负载均衡器还是面向 Internet 的负载均衡器。请注意,当您在 EC2-Classic 中创建传统负载均衡器时,它必须是面向 Internet 的负载均衡器。

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

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

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

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