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

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

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

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

Один 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 в вопросе. На самом деле у меня их три, по одному на каждую зону доступности в регионе, где он развернут.

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

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

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

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

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

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

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

С уважением.

ОБНОВИТЬ

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