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 个实例。如果禁用跨区域负载均衡,则会在us-west-2a和us-west-2b之间平均分配请求。因此,us-west-2b中的 2 个实例便会与us-west-2a中的 10 个实例承担相同的流量。不过,如果启用跨区域负载均衡,则负载均衡器会在所有 12 个实例之间平均分配传入请求。

 跨区域负载均衡和可用区。

请求路由选择

在客户端将请求发送到负载均衡器之前,它会利用域名系统 (DNS) 服务器解析负载均衡器的域名。DNS 条目由 Amazon 控制,因为您的实例位于 amazonaws.com 域中。Amazon DNS 服务器会返回一个或多个 IP 地址到客户端,这些 IP 地址属于负载均衡器的负载均衡器节点。当流向应用程序的流量随时间变化时,Elastic Load Balancing 会扩展负载均衡器并更新 DNS 条目。请注意,DNS 条目也将生存时间 (TTL) 指定为 60 秒,这可确保 IP 地址可以迅速重新映射以响应不断变化的流量。

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

路由算法

使用传统负载均衡器,接受请求的负载均衡器节点利用不同算法来选择已注册的实例。它对 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 请求生成一个主机标头。对于传统负载均衡器,主机标头包含负载均衡器节点的 IP 地址。对于应用程序负载均衡器,主机标头包含负载均衡器的 DNS 名称。

传统负载均衡器和应用程序负载均衡器均可设置空闲超时值。默认值为 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 的负载均衡器的请求,并将数据库服务器的请求发送到内部负载均衡器。数据库服务器接收来自内部负载均衡器的请求。

 多层架构,使用面向 Internet 的负载均衡器和内部负载均衡器。