Как настроить проверки работоспособности ELB для нескольких приложений, работающих на каждом экземпляре EC2?

11

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

Однако AWS Elastic Load Balancers в настоящее время позволяет проверять только одно местоположение для проверки работоспособности.

Каков наилучший способ реализации проверок работоспособности с помощью ELB, который учитывает состояние нескольких приложений, развернутых на каждом экземпляре EC2?

Андрей Фирбинтеану
источник
4
Один из способов - реализовать собственную проверку работоспособности, заставив скрипт возвращать состояние на основе проверок обоих приложений.
Натан C
1
ELB - это управляемый сервис. Создайте еще один ELB для второго приложения с собственной проверкой работоспособности. Большая часть стоимости указана за запрос, поэтому вам будет стоить почти столько же, сколько и 2 ELB.
Парень
Я думаю, что ответ @ NathanC - лучшее решение; У меня есть похожий случай, когда в случае сбоя одного из двух условий проверка работоспособности не пройдена. Добавление еще одного ELB позволит вам пройти еще одну проверку работоспособности, но AFAIK только один ELB может использоваться для маршрутизации трафика (или нет)
Том Харрисон-младший
@ На самом деле, учитывая, что ELB-часы оплачиваются независимо от запросов, это составляет ~ 20 долларов США в месяц (в зависимости от региона), поэтому большая часть затрат приходится на запрос, только если вы уже обслуживаете более 2,5 ТБ данных в месяц ( в $ 0,008 / ГБ)
Йосип Роден

Ответы:

10

Вот два способа решить это;

Первый вариант - добавить еще одну проверку работоспособности на хосте, которая проверяет работоспособность и возвращает HTTP 200 в ELB, если логика говорит, что вы хотите, чтобы хост работал. Логика там, конечно, зависит от вас. Недостатком здесь будет то, что если приложение 2 будет успешно развернуто на некоторых хостах, все хосты будут по-прежнему «исправными» и получающими трафик.

Другой вариант - использовать дополнительный ELB для каждого приложения. Вы можете указать несколько ELB на один и тот же бэкэнд-экземпляр EC2, и затраты на это довольно незначительны. Таким образом, вы можете проверять работоспособность каждого приложения и отбрасывать узлы с проблемами на уровне приложений, а не подход «все или ничего».

Изменить: Обратите внимание, что это более старый ответ и относится к ELB, а не ALB. ALB изначально поддерживает отдельные цели на одном хосте.

Натан V
источник
7

Использование одного ELB для каждого приложения - вот путь сюда.

Во-первых, они вам могут понадобиться в любом случае, если каждое приложение находится в своем домене и вам требуется поддержка SSL. В настоящее время в ELB Amazon разрешается использовать только один сертификат SSL для каждого домена, для чего требуется отдельный ELB для каждого домена с поддержкой SSL. (Сертификаты Wildcard SSL являются исключением).

Проблема в том, что проверки работоспособности ELB в настоящее время не могут быть направлены на конкретный виртуальный домен, размещенный в экземпляре EC2. (Заголовок "Host:" не отправляется). Проверка работоспособности ELB всегда идет в домен по умолчанию, как если бы вы загрузили IP-адрес для экземпляра EC2 в своем браузере. Таким образом, для получения проверок работоспособности в домене по умолчанию требуется некоторое количество клея, а затем ответьте со статусом работоспособности определенного приложения.

Вот рабочий пример конфигурации, которая может быть добавлена ​​в serverдирективу Nginx . Он будет установлен на каждом из экземпляров EC2 с балансировкой нагрузки.

    # This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default

    # All AWS Health Checks from the ELBs arrive at the default server.
    # Forward these requests on the appropriate configuration on this host.
    location /health-check/ {
      rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
      # Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
      #  which would not be considered successful.
      proxy_set_header X-Forwarded-Proto 'https';
      proxy_set_header "Host" $domain;
      proxy_pass http://127.0.0.1;
    }

В настройке «Проверка работоспособности» ELB для «first-application.com» вы должны выбрать «HTTP» и порт 80 и ввести путь, например:

/health-check/first-application.com

Если на узле работает указанная выше конфигурация Nginx, запрос будет получен в домене по умолчанию и прокси-ответ от конфигурации Nginx на том же хосте для https://first-application.com/api/v1/status

При таком подходе нет конфигурации для каждого приложения в Nginx. Поскольку у каждого приложения есть уникальное доменное имя, вам просто нужно убедиться, что вы настроили ELB для каждого приложения соответствующим образом.

Марк Стосберг
источник
3
Спасибо. Похоже, это помогло. Я надеялся избежать необходимости иметь несколько балансировок нагрузки с этим.
тур вниз по
6

11 августа 2016 года Amazon представила балансировщики нагрузки приложений . Они позволяют указать несколько целевых групп, каждая из которых имеет свой тип проверки работоспособности. Так что теперь это возможно с помощью единого балансировщика нагрузки!

Томас
источник