Назад | Перейти на главную страницу

Работа Amazon Elastic Load Balancers

У меня есть Amazon ELB, за которым стоят 3 инстанса EC2, распределенные по 3 зонам.

Ниже приведены выдержки из журналов доступа для каждого экземпляра:

1-я инстанция (зона А):

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"

2-й экземпляр (зона 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"

3-я инстанция (зона 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-адресов в журналах доступа заставляет меня в это поверить ..

Кажется, что ELB работают несколько нелогично (по крайней мере, на первый взгляд), чтобы поддерживать масштабируемость и предотвращать единую точку отказа.

Я думаю, что первое впечатление, которое складывается из ELB, заключается в том, что это настройка одного обычного экземпляра с некоторым программным обеспечением для балансировки нагрузки, которое находится перед экземплярами вашего приложения и распределяет трафик - мои недавние чтения показывают, что это довольно далеко от реальности.

Похоже, что в каждой зоне доступности есть один (или несколько) балансировщиков нагрузки для обслуживания ваших экземпляров в этой зоне. Вам нужно настроить CNAME, чтобы указать на ELB - виртуальный объект - внутренний DNS AWS сопоставит его с одним из назначенных вам балансировщиков нагрузки. Затем этот балансировщик нагрузки определит, куда отправить клиентский запрос - в экземпляр в той же зоне доступности или в другую зону доступности. Кроме того, будет добавлено больше балансировщиков нагрузки, чтобы масштабировать потребности ваших приложений, и AWS делает это в «ожидании» увеличения трафика.

Следовательно, гипотетически возможно иметь 2 или более балансировщиков нагрузки на зону доступности, несмотря на то, что запущен только один ELB, если их трафик достаточен для вашего приложения.

Если вы посмотрите на Руководство разработчика ELB (около стр. 9) вы найдете упоминание о том, что запрос может передаваться от одного балансировщика нагрузки к другому. (В приведенном конкретном примере это относится к нескольким заголовкам X-Forwarded-For, включая заголовки ELB).

Если у вас есть экземпляры серверных приложений в нескольких зонах доступности, заголовок запроса X-Forwarded-For может содержать один или несколько IP-адресов балансировщика нагрузки. Поскольку эластичная балансировка нагрузки использует разные балансировщики нагрузки для каждой зоны доступности, клиентский запрос может быть передан от одного балансировщика нагрузки к другому до достижения экземпляра серверного приложения. Например, если у вас есть серверные экземпляры в зонах доступности US-east-1a и US-east-1b, запрос клиента может первоначально обрабатываться балансировщиком нагрузки в US-east-1a. Если Elastic Load Balancing определяет, что этот запрос должен быть направлен на US-east-1b, балансировщик нагрузки в US-east-1a направляет запрос на балансировщик нагрузки в US-east-1b.

Надеюсь, это касается того, как у вас есть несколько адресов балансировщика нагрузки, а также как один и тот же адрес может отображаться в разных зонах доступности.

Я бы посоветовал посмотреть на «Эластичность» в «балансировке эластичной нагрузки»: эластичность ELB и способы ее тестирования как хороший обзор того, как работают ELB.