Как сделать избыточные балансировщики нагрузки?
Я понимаю, что целью балансировщиков нагрузки является балансировка нагрузки между вашими серверами и отслеживание работоспособности экземпляров и т. Д. Но что, если сам балансировщик нагрузки выходит из строя? Как настроить резервные балансировщики нагрузки? (балансировка нагрузки балансировки нагрузки?)
Я мог понять, как проверки работоспособности DNS могут быть полезны, но есть очевидные проблемы с задержкой, не так ли?
Это предполагает, что вы не используете сторонние сервисы, такие как AWS ELB или что-то подобное. Что делать, если вы просто используете, скажем, Nginx?
3 ответа
Существует несколько способов достижения высокой доступности (высокой доступности) балансировщика нагрузки - или в отношении любой услуги. Предположим, у вас есть две машины с 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, если сам балансировщик нагрузки умирает.
Использование Nginx в качестве балансировщика нагрузки должно позволить вам выполнить перенаправление, подробно описанное в этом посте, изменив конфигурацию для определения времени ожидания отсутствия ответа:
Автоматическое распределение нагрузки при отказе nginx
Теоретически, если у вас есть среда высокой доступности, кластеризация с несколькими балансировщиками нагрузки должна позволять поддерживать обслуживание в случае сбоя.
Надеюсь это поможет.
Аппаратные балансировщики нагрузки поддерживают установки "активный / пассивный" или "активный / активный" в течение многих лет, в обоих случаях они затем устанавливаются параллельно с точки зрения уровня 1/2... активный / пассивный использует механизмы мониторинга / поддержки активности, как описано, активный / активный может быть реализован различными способами. Чтобы отображаться как один IP-адрес во внешнем интерфейсе, два или более балансировщика могут, если они все / оба подключены к сети, выполнять следующие действия:
- выборочно отвечать на ARP-запросы к общему IP-адресу на основе значения MAC-адреса источника или IP-адреса, когда клиенты находятся в одной сети
- согласовывать между собой, кто обрабатывает трафик данного нового соединения TCP
- пусть дублирующийся или ошибочный трафик уровня 3-7 происходит безрассудно и полагается на TCP / стеки клиента / маршрутизатора, чтобы разобраться в этом
А затем измените их режим на прием всего или большего трафика, когда связь с устройством-партнером потеряна.
на внутренней стороне:
- каждый из балансировщиков может при нормальной работе использовать только данный подпул серверов приложений
- или дублированные запросы могут быть просто сгенерированы и здесь...
- или могут быть проведены переговоры между балансировщиками