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