Як зробити зайві балансири навантаження?


27

Я розумію, що мета балансирів навантаження полягає в тому, щоб збалансувати навантаження між вашими серверами та відстежувати стан здоров’я екземплярів тощо. Але що робити, якщо сам балансир навантаження не вийде з ладу? Як налаштувати зайві балансири навантаження? (балансування навантаження балансирів навантаження?)

Я міг бачити, як перевірки здоров’я DNS можуть бути корисними, але, очевидно, є основні проблеми із затримкою, чи не так?

Це передбачається, що ви не використовуєте жодних сторонніх служб, таких як AWS ELB, або чогось подібного. Що робити, якщо ви просто використовуєте скажімо Nginx?


У самій вершині вашої архітектури немає "балансуючих навантажувачів балансування навантаження" , ви просто зробите ваші LB надлишковими і створили рішення з високою доступністю для вирішення несправностей, як це робить більшість типологій кластеризації.
Ксав'є Лукас

Відповіді:


32

Існує кілька способів досягти HA (високої доступності) балансира навантаження - або, що стосується будь-якої послуги. Припустимо, у вас є два машини з IP-адресами:

  • 192.168.100.101
  • 192.168.100.102

Користувачі підключаються до IP-адреси, тому те, що ви хочете зробити, це відокремити IP-адресу від конкретного вікна - наприклад, створити віртуальний IP-адресу. Цей IP буде 192.168.100.100.

Тепер ви можете обрати службу HA, яка подбає про автоматичне відключення / відмова IP-адреси. Деякі з найпростіших сервісів для Unix - це (u) короп та кепапаль, деякі більш складні - наприклад, RedHat Cluster Suite або Pacemaker.

Давайте візьмемо для прикладу збережений вміст - два сервіси з збереженою підтримкою - кожен працює на своєму вікні - і вони спілкуються разом. Це спілкування часто називають серцебиттям.

|   VIP   |                           |         |
|  Box A  | ------v^-----------v^---- |  Box B  |
|   IP1   |                           |   IP2   |

Якщо один зберігач перестає реагувати (або служба припиняється з будь-якої причини, або вікно відскакує або закривається) - зберігач на іншому боці помітить пропущене серцебиття, і припустить, що інший вузол загинув, і вчинить аварійні дії. Ця дія в нашому випадку буде викликати плаваючий IP.

                                      |   VIP   |
    ------------------ -------------- |  Box B  |
                                      |   IP2   |

Найгірший випадок, який може статися в цьому випадку, - це втрата сеансів для клієнтів, але вони зможуть знову підключитися. Якщо ви хочете цього уникнути, два балансири навантаження повинні мати змогу синхронізувати дані сеансу між ними, і якщо вони можуть це зробити, користувачі нічого не помітять, крім, можливо, порушеної короткої затримки.

Ще одна помилка цієї установки - це розділений мозок - коли обидва вікна в Інтернеті, але посилання розірвано, і обидва вікна містять однаковий IP. Це часто вирішується через якийсь механізм огородження (резервування SCSI, перезапуск IPMI, інтелектуальне відключення живлення PDU, ...) або непарна кількість вузлів, для більшості членів кластера необхідна активація для запуску послуги.

|   VIP   |                           |   VIP   |
|  Box A  |                           |  Box B  |
|   IP1   |                           |   IP2   |

Більш складне програмне забезпечення для управління кластерами (як Pacemaker) може переміщувати всю послугу (наприклад: зупинити її на одному вузлі та запустити на іншому) - і це спосіб досягнення HA для таких служб, як бази даних.

Ще один можливий спосіб - якщо ви керуєте маршрутизаторами поблизу балансирів навантаження, - це використовувати ECMP. Цей підхід також дозволяє горизонтально масштабувати балансири навантажень. Це працює у кожному з ваших двох вікон, які спілкуються на BGP з вашим маршрутизатором. Кожне поле має рекламувати віртуальний IP (192.168.100.100), і маршрутизатор завантажить балансовий трафік через ECMP. Якщо машина загине, вона зупинить рекламу VIP, що, в свою чергу, зупинить маршрутизатори від надсилання на неї трафіку. Єдине, про що ви повинні подбати під час цього налаштування - це припинити рекламувати IP, якщо сам балансир навантаження загине.


3

Використання Nginx як балансира завантаження повинно дозволяти вам слідувати за перенаправленням, детально описаним у цій публікації, змінюючи конфігурацію, щоб виявити тайм-аут відповіді:

автоматичне балансування навантаження nginx

Теоретично, якщо у вас є середовище HA, багато кластерів навантажень повинні кластеризуватись, щоб сервіс міг підтримуватись, якщо один вийшов з ладу.

Сподіваюся, це допомагає.


2

Балансири навантажень апаратного забезпечення підтримують "активні / пасивні" або "активні / активні" установки протягом багатьох років, в обох випадках вони встановлюються паралельно з точки зору 1/2 ... активний / пасивний використовує механізми моніторингу / зберігання, як описано , активний / активний може бути реалізований численними способами. Для того, щоб відображатись як єдиний IP на фронті, два або більше балансирів можуть, якщо вони всі / обидва в черзі, робити такі дії:

  • вибірково відповідати на запити ARP на спільний IP на основі асистентної MAC або IP адреси, коли клієнти перебувають у одній мережі
  • домовлятися між собою, хто обробляє трафік даного нового TCP-з'єднання
  • нехай повторюваний або помилковий трафік шару 3-7 трапляється безрозсудно і покладайтеся на TCP-стеки клієнта / маршрутизатора, щоб розібратися

А потім змінити їх режим на прийняття всього або більше трафіку, коли втрачається зв’язок із / партнерським пристроєм.

на стороні повернення:

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