Гаразд, я ніколи не будував рішення для врівноваження навантаження AWS з трафіком на рівнях SmugMug, але просто думаючи про теорію та послуги AWS, приходить на думку кілька ідей.
У початковому запитанні відсутні кілька речей, які, як правило, впливають на конструкцію балансування навантаження:
- Клейкі сеанси чи ні? Дуже бажано не використовувати клейкий сеанс, а просто дозволити всім балансирам навантажень (LB) використовувати круговий запуск (RR) або випадковий вибір. Вибір RR або випадкових резервних копій простий, масштабований і забезпечує рівномірний розподіл навантаження за будь-яких обставин.
- SSL чи ні? Використовується чи ні SSL та над яким відсотком запитів, як правило, впливає на конструкцію балансування навантаження. Часто бажано припинити SSL якомога раніше, щоб спростити обробку сертифікатів і не допустити завантаження процесора SSL від серверів веб-додатків.
Я відповідаю з точки зору того, як підтримувати рівень шару балансування навантаження високодоступним. Збереження серверів додатків HA просто робиться за допомогою перевірок здоров’я, вбудованих у ваші балансири навантаження L7.
Добре, кілька ідей, які повинні працювати:
1) "Шлях AWS":
- Перший шар, на самому фронті, використовує ELB в режимі L4 (TCP / IP).
- Другий рівень, використовуйте екземпляри EC2 з вашим балансиром навантаження L7 (Nginx, HAProxy, Apache тощо).
Переваги / ідея: балансири навантаження L7 можуть бути досить простими ECI AMI, усі вони клоновані з одного AMI та використовують ту саму конфігурацію. Таким чином, інструменти Amazon справляються з усіма потребами HA: ELB контролює балансири навантаження L7. Якщо L7 LB вмирає або стає невідповідним, ELB & Cloudwatch разом нерестово створюють новий екземпляр і вносять його в пул ELB.
2) "Кругла робота DNS з моніторинговим способом:"
- Використовуйте базовий круглень DNS для отримання грубозернистого розподілу навантаження на пару IP-адрес. Скажімо, ви публікуєте 3 IP-адреси свого сайту.
- Кожен з цих 3 IP-адрес - це AWS-еластична IP-адреса (EIA), пов'язана з екземпляром EC2, з балансором навантаження L7 на ваш вибір.
- Якщо EC2 L7 LB помирає, сумісний користувальницький агент (браузер) повинен просто використовувати один з інших IP-адрес замість цього.
- Налаштування зовнішнього сервера моніторингу. Контролюйте кожен із 3 ЕІП. Якщо хтось не реагує, використовуйте інструменти командного рядка AWS та деякі сценарії для переміщення EIP до іншого екземпляра EC2.
Переваги / ідея: Сумісні користувацькі агенти повинні автоматично переходити на іншу IP-адресу, якщо хтось не відповідає. Таким чином, у разі відмови лише одна третина ваших користувачів має бути порушена, і більшість із них нічого не повинні помітити, оскільки їх UA мовчки переходить на інший IP. І ваше зовнішнє вікно моніторингу помітить, що EIP не відповідає, і виправить ситуацію протягом декількох хвилин.
3) DNS RR до пар серверів HA:
В основному це власне припущення Дона про просто серцебиття між парою серверів, але спрощене для декількох IP-адрес.
- Використовуючи DNS RR, опублікуйте ряд IP-адрес для послуги. Слідуючи наведеному вище прикладу, скажімо, що ви публікуєте 3 IP-адреси.
- Кожен із цих IP-адрес надходить на пару серверів EC2, тож загалом 6 екземплярів EC2.
- Кожна з цих пар використовує Heartbeat або інше рішення HA разом з інструментами AWS, щоб підтримувати 1 IP-адресу в прямому ефірі в активній / пасивній конфігурації.
- У кожному екземплярі EC2 встановлено ваш балансир навантаження L7 на вибір.
Переваги / ідея: У повністю віртуалізованому середовищі AWS міркувати про послуги L4 та режими переходу з режиму відключення насправді не так просто. Спростивши до однієї пари однакових серверів, підтримуючи лише 1 IP-адресу, стає простішим міркувати та перевіряти.
Висновок: Знову ж таки, я насправді нічого не пробував у виробництві. Щойно з мого відчуття кишечника, варіант один із ELB у режимі L4 та екземпляри EC2, що керуються самоврядуваннями, як LB LB, здається, найбільше узгоджуються з духом платформи AWS, і де Amazon, швидше за все, інвестує та розширюватиметься згодом. Це, мабуть, мій перший вибір.