Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Другой возможный способ - если вы управляете маршрутизаторами рядом со своими балансировщиками нагрузки, - это использовать ECMP. Этот подход также позволяет горизонтально масштабировать балансировщики нагрузки. Это работает, когда каждый из ваших двух устройств передает BGP вашему маршрутизатору (-ам). Каждый блок должен объявлять виртуальный IP-адрес (192.168.100.100), и маршрутизатор будет балансировать нагрузку трафика через ECMP. Если машина выйдет из строя, она прекратит рекламировать VIP, что, в свою очередь, не позволит маршрутизаторам отправлять на нее трафик. Единственное, о чем вы должны позаботиться в этой настройке, - это остановить рекламу IP, если сам балансировщик нагрузки умирает.

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

автоматическая балансировка нагрузки nginx при отказе

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

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

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

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

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

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

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