Как сделать избыточные балансировщики нагрузки?

27

Я понимаю, что целью балансировщиков нагрузки является балансировка нагрузки между вашими серверами и отслеживание работоспособности экземпляров и т. Д. Но что, если сам балансировщик нагрузки выходит из строя? Как настроить резервные балансировщики нагрузки? (балансировка нагрузки балансировки нагрузки?)

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

Это предполагает, что вы не используете сторонние сервисы, такие как AWS ELB или что-то подобное. Что делать, если вы просто используете, скажем, Nginx?

Шерзод
источник
На самом верху вашей архитектуры нет «балансировщиков нагрузки» , вы просто резервируете свои LB и настраиваете решение High Availability для обработки сбоев, как это делают большинство типологий кластеризации.
Ксавье Лукас

Ответы:

32

Существует несколько способов достижения высокой доступности (высокой доступности) балансировщика нагрузки - или в отношении любой услуги. Предположим, у вас есть две машины с IP-адресами:

  • 192.168.100.101
  • 192.168.100.102

Пользователи подключаются к IP-адресу, поэтому вы хотите отделить IP-адрес от определенного поля - например, создать виртуальный IP-адрес. Этот IP будет 192.168.100.100.

Теперь вы можете выбрать сервис HA, который позаботится об автоматическом восстановлении после сбоя / восстановлении IP-адреса. Некоторые из самых простых сервисов для Unix: (u) carp и keepalived, некоторые из более сложных - например, RedHat Cluster Suite или Pacemaker.

Давайте возьмем keepalived в качестве примера - две службы keepalived, каждая из которых работает на своей собственной машине, и они взаимодействуют друг с другом. Это общение часто называют биением сердца.

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

Если один keepalived перестает отвечать (либо служба отключается по какой-либо причине, либо ящик отскакивает, либо выключается) - keepalived на другом блоке заметит пропущенные тактовые импульсы и предположит, что другой узел не работает, и предпримет действия по восстановлению после сбоя. Это действие в нашем случае будет поднимать плавающий 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

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

Надеюсь это поможет.

user4657
источник
2

Аппаратные балансировщики нагрузки поддерживают установки «активный / пассивный» или «активный / активный» в течение многих лет, в обоих случаях они затем устанавливаются параллельно с точки зрения уровня 1/2 ... активный / пассивный использует механизмы мониторинга / поддержки активности, как описано , активный / активный может быть реализован различными способами. Чтобы отображаться как один IP-адрес во внешнем интерфейсе, два или более балансировщика могут, если они все / оба подключены к сети, выполнять следующие действия:

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

А затем измените их режим на прием всего или большего трафика, когда связь с устройством-партнером потеряна.

на внутренней стороне:

  • каждый из балансировщиков может при нормальной работе использовать только данный подпул серверов приложений
  • или дублированные запросы могут быть просто сгенерированы и здесь ...
  • или могут быть проведены переговоры между балансировщиками
rackandboneman
источник