我有一个Amazon,其中有3个EC2实例分布在3个区域。
一审(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"急切地想知道为什么流量来自不同的IP在相同的ELB背后的实例。另外,10.223.33.43出现在两个实例上。为什么是这样?
LB是否存在于启动实例的每个区域?听起来很奇怪,但是在访问日志中有单独的IP让我相信。
发布于 2011-09-18 20:01:58
ELB的工作方式似乎有些违背直觉(至少乍一看是如此),以保持可伸缩性和防止单点故障。
我认为,人们对ELB的第一印象是,它是一个常规的实例设置,带有一些负载平衡软件,它位于应用程序实例的前面并分配通信量--我最近的阅读表明,这与现实相去甚远。
似乎每个可用性区域都有一个(或多个)负载平衡器来服务该区域中的实例。您将设置一个CNAME指向ELB --一个虚拟实体--AWS的内部DNS将此映射到分配给您的负载平衡器之一。然后,负载平衡器将确定将客户机请求发送到何处--无论是发送到同一可用性区域中的实例,还是发送到另一个可用性区域。此外,将增加更多的负载平衡器,以扩大您的应用程序的需求,AWS在“预期”增加流量的情况下这样做。
因此,假设每个可用区域都有两个或更多的负载平衡器,尽管只启动了一个ELB,如果它们的流量足够到您的应用程序。
如果您浏览一下ELB开发人员指南 (在第9页左右),您会发现有人提到请求可以从一个负载均衡器传递到另一个负载均衡器。(在给定的特定示例中,它指的是多个X转发的标头,包括ELB的标头)。
如果在多个可用区域中有后端应用程序实例,则X转发-For请求头可以包含一个或多个负载均衡器IP地址。由于弹性负载平衡对每个可用性区域使用不同的负载均衡器,在到达后端应用程序实例之前,客户端请求可以从一个负载均衡器传递到另一个负载均衡器。例如,如果在可用性区域US-east-1a和US-east-1b中有后端实例,客户端请求可能首先由request 1a中的负载均衡器处理。如果弹性负载平衡确定此请求应路由到US-east-1b,则US 1a中的负载均衡器将请求路由到美国东部1b中的负载均衡器。
希望这解决了您如何拥有多个负载均衡器地址,以及如何在不同的可用性区域显示相同的地址。
我建议把弹性负载平衡中的弹性: ELB弹性及其测试看作是对ELB工作原理的一个很好的概述。
https://serverfault.com/questions/312565
复制相似问题