у меня есть 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 предлагает два разных типа балансировщиков нагрузки:
Для вашего случая использования Application Load Balancer кажется идеальным. Однако он ограничен 10 правилами, поэтому он будет работать легко, только если ваш N
не больше 10.
В вашем списке экземпляров ec2 вы видите два экземпляра, верно? Но в каждом случае у вас много веб-приложений? Вы используете виртуальный хост для развертывания каждого из них?
Вам понадобится всего один ELB, чтобы разделить плату между вашими хостами. Пример:
External request > ELB (based on CNAME pointer) > EC2 Instance.
Думаю, лучше расскажи мне подробнее о своем сценарии, и, возможно, я смогу тебе помочь.
С уважением.
ОБНОВИТЬ
Если у вас есть разные веб-приложения на экземплярах EC2, вам необходимо иметь два эластичных балансировщика нагрузки (ELB). Каждый по паре экземпляров. Всего четыре экземпляра