Як налаштувати перевірку стану здоров'я ELB за допомогою декількох додатків, що працюють у кожному екземплярі EC2?


11

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

Однак на даний час AWS Elastic Balancers Balancers дозволяє лише перевірити стан здоров'я для перевірки стану здоров’я.

Який був би найкращий спосіб здійснення перевірок здоров’я з ELB, який враховує стан декількох додатків, розгорнутих у кожному екземплярі EC2?


4
Одним із способів було б здійснити власну перевірку стану здоров’я шляхом створення сценарію повернення статусу на основі його перевірок обох додатків.
Натан C,

1
ELB - керована послуга. Створіть інший ELB для другої програми з власною перевіркою здоров’я. Більша частина витрат здійснюється за запит, тому для експлуатації 2 ELB обійдеться вам майже стільки ж.
Хлопець

Я думаю, що відповідь @ NathanC - найкраще рішення; У мене є аналогічний випадок, коли в разі невдачі будь-якого з двох умов перевірка здоров’я повинна бути невдалою. Додавання ще одного ELB дозволить вам пройти ще одну перевірку стану здоров’я, але AFAIK лише один ELB може бути використаний для маршрутного руху (чи ні)
Tom Harrison Jr

@Guy насправді, враховуючи, що ELB-години стягуються незалежно від запитів, це ~ 20 USD на місяць (залежно від регіону), тому більша частина вартості за запит, лише якщо ви вже обслуговуєте понад 2,5 ТБ даних на місяць ( при $ 0,008 / ГБ)
Йосип Родін

Відповіді:


10

Ось два способи вирішити це;

Перший варіант - додати ще одну перевірку стану здоров’я на хості, яка підтверджує стан здоров'я та повертає HTTP 200s ELB, якщо логіка говорить, що ви хочете підтримувати хоста в Інтернеті. Логіка, звичайно, залежить від вас. Недоліком тут буде те, що якби додаток 2 успішно розгорнувся на деяких хостах, усі хости все ще були б "здоровими" та отримували трафік.

Інший варіант - використовувати додатковий ELB для кожної програми. Ви можете вказати кілька ELB на одні й ті самі екземпляри EC2, і вартість цього досить незначна. Таким чином, ви можете перевіряти стан здоров’я на кожну програму та скасовувати хости з проблемами на рівні програми, а не підходом «все або нічого».

Редагувати: Зауважте, що це відповідь старіше і стосується ELB не ALB. ALB підтримує окремі цілі на одному хості.


7

Використання одного ELB на додаток - це спосіб перейти сюди.

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

Проблема тут полягає в тому, що перевірки здоров'я ELB в даний час не можуть бути спрямовані на певний віртуальний домен, розміщений в екземплярі EC2. (Ні заголовка "Хост:" не надсилається). ELB Health pings завжди переходить до домену за замовчуванням, як якщо б ви завантажили 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 представила балансири завантаження додатків . Вони дозволяють вказати кілька цільових груп, кожна з яких має свій тип перевірки стану здоров’я. Тож це зараз можливо за допомогою одного балансира навантаження!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.