Amazon Elastic Load Balancer 的工作原理

Amazon Elastic Load Balancer 的工作原理

我有一个 Amazon ELB,其后面有 3 个 EC2 实例分布在 3 个区域。

以下是每个实例的访问日志摘录:

第 1 个实例(区域 A):

10.210.214.231 - - [17/Sep/2011:15:40:16 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"
10.223.33.43 - - [17/Sep/2011:15:40:16 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"
10.210.214.231 - - [17/Sep/2011:15:40:17 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"
10.223.33.43 - - [17/Sep/2011:15:40:17 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"

第二个实例(C区):

10.116.114.11 - - [17/Sep/2011:15:40:16 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"
10.116.114.11 - - [17/Sep/2011:15:40:16 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"

第三个实例(D区):

10.223.33.43 - - [17/Sep/2011:15:40:16 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"
10.223.33.43 - - [17/Sep/2011:15:40:16 -0400] "GET /healthcheck.html HTTP/1.1" 200 194 "-" "ELB-HealthChecker/1.0"

迫切想知道为什么流量来自同一 ELB 后面实例上的不同 IP。此外,10.223.33.43 出现在两个实例上。为什么会这样?

启动实例的每个区域中是否存在 LB?听起来很奇怪,但是访问日志中有单独的 IP 让我相信这一点。

答案1

为了保持可扩展性并防止单点故障,ELB 的工作方式似乎有点违反直觉(至少乍一看是这样)。

我认为,人们对 ELB 的第一印象是它是一个单一的常规实例设置,其中有一些负载平衡软件位于应用程序实例前面并分配流量 - 我最近的阅读表明,这与现实相差甚远。

似乎每个可用区域都有一个(或多个)负载均衡器来为该区域中的实例提供服务。您将设置一个 CNAME 来指向 ELB - 一个虚拟实体 - AWS 的内部 DNS 会将其映射到分配给您的负载均衡器之一。然后,该负载均衡器将确定将客户端请求发送到何处 - 是发送到同一可用区域中的实例还是发送到另一个可用区域。此外,将添加更多负载均衡器以扩展您的应用程序需求,AWS 这样做是为了“预期”流量的增加。

因此,如果有足够的流量流向您的应用程序,那么尽管只启动了一个 ELB,但每个可用区域也可能有 2 个或更多负载均衡器。

如果你看一下ELB 开发者指南(第 9 页左右)你会发现提到了请求可以从一个负载均衡器传递到另一个负载均衡器的想法。(在给出的特定示例中,它指的是多个 X-Forwarded-For 标头,包括 ELB 的标头)。

如果您在多个可用区中有后端应用程序实例,则 X-Forwarded-For 请求标头可以包含一个或多个负载均衡器 IP 地址。由于 Elastic Load Balancing 为每个可用区使用不同的负载均衡器,因此客户端请求可以在到达后端应用程序实例之前从一个负载均衡器传递到另一个负载均衡器。例如,如果您在可用区 US-east-1a 和 US-east-1b 中有后端实例,则客户端请求可能首先由 US-east-1a 中的负载均衡器处理。如果 Elastic Load Balancing 确定应将此请求路由到 US-east-1b,则 US-east-1a 中的负载均衡器会将请求路由到 US-east-1b 中的负载均衡器。

希望这能解决您如何拥有多个负载均衡器地址以及同一地址如何出现在不同的可用区域的问题。

我建议看看“Elastic Load Balancing” 中的“Elastic”:ELB 弹性及其测试方法作为 ELB 工作原理的良好概述。

相关内容