Elastic Load Balancer для нескольких веб-приложений

13

У меня есть Nвеб-приложения. Каждое веб-приложение обслуживается другим именем хоста в моем домене и развертывается в 2 экземплярах, работающих в AWS. Другими словами, у меня есть 2Nэкземпляры, разделенные на пары, которые запускают Nразличные веб-приложения.

Я хотел бы настроить один AWS Elastic Load Balancer, который будет передавать запрос одному из двух экземпляров, обслуживающих его, на основе Hostзаголовка. Возможно ли это с использованием одного ELB или мне потребуется развернуть NELB, по одному для каждой пары экземпляров?

thesamet
источник

Ответы:

19

Один ELB направляет трафик ровно одному набору экземпляров и распределяет входящий трафик всем экземплярам, ​​находящимся за ним. Он не осуществляет выборочную маршрутизацию трафика на основе анализа трафика любого уровня 7, такого как Host:заголовок.

Вам нужен один ELB для каждого набора экземпляров. Как вы описываете, это один ELB для каждого веб-приложения.

Если вашей основной целью запуска ELB является разгрузка SSL с использованием подстановочного сертификата (у меня есть одна система, спроектированная таким образом, с десятками приложений, расположенных по адресу many-different-domains.my-wildcard-cert-domain.com), тогда экземпляры «позади» ELB может работать обратный прокси-сервер, такой как HAProxy (или несколько других альтернатив, таких как Varnish), который может принимать решения о маршрутизации уровня 7, а затем перенаправлять трафик на соответствующее подмножество машин позади них, что также позволяет использовать более сложные балансировка нагрузки и имеет преимущество, предоставляя вам статистику и счетчики трафика, совокупные и раздельные.

       /-- HAProxy \  /----- instances hosting app #1  
ELB ---|            >> ----- instances hosting app #2 
       \-- HAProxy /  \----- instances hosting app #n 

Промежуточные экземпляры ^^^^ могут оценивать Host:заголовки (помимо всего прочего) и даже записывать значение файла cookie сеанса в свои журналы для анализа.

Эта настройка также позволяет мне запускать несколько приложений на перекрывающихся подмножествах экземпляров, где это уместно, и делать много других вещей, которые ELB не поддерживает напрямую. Он также возвращает пользовательскую страницу «503» в случае, если приложение перегружено или иным образом становится недоступным, что ELB не делает самостоятельно. Здесь я изобразил 2 прокси-сервера, и ни по какой другой причине, кроме вашего упоминания номера 2 в вопросе. В моей настройке фактически 3, по одному на каждую зону доступности в регионе, где это развернуто.

Майкл - sqlbot
источник
3
В августе 2016 года Amazon запустил AWS Application Load Balancer, который позволяет маршрутизировать различные целевые группы на основе заголовков HTTP.
Йенс Баннманн
2
@JensBannmann, это правда. Когда они выпустили его, единственные поддерживаемые правила маршрутизации были основаны на пути. В 2017 году они добавили возможность маршрутизации на основе Host:заголовка. Этот ответ был верным, когда я писал его в 2014 году, но, похоже, пришло время для обновления. Спасибо, что снова обратили на это мое внимание.
Майкл - sqlbot
3

По состоянию на август 2016 года Amazon ELB предлагает два разных типа балансировщиков нагрузки:

  • Классический балансировщик нагрузки направляет весь трафик к одному набору экземпляров без учета содержимого протокола приложения. Раньше это был единственный доступный тип ELB.
  • Балансировщик нагрузки приложений может направлять трафик в разные целевые группы в соответствии с настраиваемыми правилами на основе URL-путей. В блоге New - AWS Application Load Balancer упоминает приложения, состоящие из нескольких микросервисов, в качестве основного варианта использования и дает подробные инструкции по настройке.

Для вашего случая применение Application Load Balancer кажется идеальным. Однако он ограничен 10 правилами, поэтому он будет работать легко, только если ваш Nразмер не превышает 10.

Йенс Баннманн
источник
0

В вашем списке экземпляров ec2 вы видите два экземпляра, верно? Но в каждом случае у вас много веб-приложений? Вы используете виртуальный хост для развертывания каждого?

Вам нужен всего один ELB, чтобы разделить плату на ваших хостах. Пример:

External request > ELB (based on CNAME pointer)  > EC2 Instance. 

Я думаю, что лучше, ты дашь мне больше своего сценария и, возможно, я смогу тебе помочь.

С уважением.

ОБНОВИТЬ

Если у вас есть разные веб-приложения на экземплярах EC2, вам необходимо иметь два эластичных балансировщика нагрузки (ELB). Каждый на пару экземпляров. Всего четыре экземпляра

Джуниор Роча
источник
В моем списке экземпляров я вижу 2Nприложения. Есть N веб-приложений, по два экземпляра для каждого. Я отредактирую вопрос, чтобы уточнить это.
TheSamet
Обновленный ответ.
младший Роча