负载均衡器在多个可用区中的多个 EC2 实例间分配应用程序的传入流量。这可以提高应用程序的容错能力。Elastic Load Balancing 将检测不正常实例,并且仅将流量路由到正常实例。
创建面向 Internet 的负载均衡器有一个可公开解析的 DNS 名称,客户端可使用该名称发送请求。DNS 服务器将您的负载均衡器的 DNS 名称解析为您负载均衡器的负载均衡器节点的公有 IP 地址。每个负载均衡器节点均使用私有 IP 地址连接到后端实例。
应用程序负载均衡器在应用程序层(app-layer)正常工作,该层是开放系统互连 (OSI) 模型的第 7 层。负载均衡器收到请求后,将按照优先级顺序评估侦听器规则以确定应用哪个规则,然后从目标组中选择规则操作目标。可以配置侦听器规则,以根据应用程序流量的内容,将请求路由至不同的目标组。每个目标组的路由都是单独进行的,即使某个目标已在多个目标组中注册。可以配置目标组级别使用的路由算法。默认路由算法为轮询路由算法;或者,可以指定最少未完成请求路由算法。
可以根据需求变化在负载均衡器中添加和删除目标,而不会中断应用程序的整体请求流。Elastic Load Balancing 根据传输到应用程序的流量随时间的变化对负载均衡器进行扩展。Elastic Load Balancing 能够自动扩展以处理绝大部分工作负载。
网络负载均衡器在开放系统互连 (OSI) 模型的第四层运行。它每秒可以处理数百万个请求。在负载均衡器收到连接请求后,它会从默认规则的目标组中选择一个目标。它尝试在侦听器配置中指定的端口上打开一个到该选定目标的 TCP 连接。
当您为负载均衡器启用可用区(AZ)时,Elastic Load Balancing 会在该可用区中创建一个负载均衡器节点。如果为负载均衡器启用多个可用区,并确保每个目标组在每个启用的可用区中至少有一个目标,那么这将提高应用程序的容错能力。例如,如果一个或多个目标组在可用区中没有运行状况良好的目标,我们会从 DNS 中删除相应子网的 IP 地址,但其他可用区中的负载均衡器节点仍可用于路由流量。如果一个客户端不遵守生存时间 (TTL) 而将请求发送到已从 DNS 删除的 IP 地址,则请求会失败。
对于 TCP 流量,负载均衡器基于协议、源 IP 地址、源端口、目标 IP 地址、目标端口和 TCP 序列号,使用流哈希算法选择目标。来自客户端的 TCP 连接具有不同的源端口和序列号,可以路由到不同的目标。每个单独的 TCP 连接在连接的有效期内路由到单个目标。
对于 UDP 流量,负载均衡器基于协议、源 IP 地址、源端口、目标 IP 地址和目标端口,使用流哈希算法选择目标。UDP 流具有相同的源和目标,因此始终在其整个生命周期内路由到单个目标。不同 UDP 流具有不同的源 IP 地址和端口,因此它们可以路由到不同的目标。
Elastic Load Balancing 为您启用的每个可用区创建一个网络接口。可用区内的每个负载均衡器节点使用该网络接口来获取一个静态 IP 地址。在您创建面向 Internet 的负载均衡器时,可以选择将一个弹性 IP 地址与每个子网关联。
每个目标组均用于将请求路由到一个或多个已注册的目标。在创建每个侦听器规则时,可以指定目标组和条件。满足规则条件时,流量会转发到相应的目标组。您可以为不同类型的请求创建不同的目标组。例如,为一般请求创建一个目标组,为应用程序的微服务请求创建其他目标组。
您基于每个目标组定义负载均衡器的运行状况检查设置。每个目标组均使用默认运行状况检查设置,除非您在创建目标组时将其覆盖或稍后对其进行修改。在侦听器规则中指定一个目标组后,负载均衡器将持续监控已注册到该目标组的所有目标 (这些目标位于已为负载均衡器启用的可用区中) 的运行状况。
粘性会话是用于将请求路由到目标组中的同一目标的机制。对于维护状态信息以便向客户端提供持续体验的服务器来说,这很有用。要使用粘性会话,客户端必须支持 Cookie。
当负载均衡器首次收到来自客户端的请求时,它将请求路由到目标,生成对所选目标的相关信息进行编码的名为 AWSALB 的 cookie,对 cookie 进行加密,并将 cookie 包含在对客户端的响应中。客户端应该在向负载均衡器的后续请求中包含它收到的 cookie。当负载均衡器收到来自客户端的包含 cookie 的请求时,如果为目标组启用了粘性会话,并且请求转至同一目标组,则负载均衡器将检测 cookie 并将请求路由到同一目标。如果 cookie 存在但无法解码,或者它指的是已取消注册或不正常的目标,则负载均衡器会选择一个新目标并使用有关新目标的信息更新 cookie。