Когда нам нужна служба высокой доступности (она не учитывает, какой вид службы: это может быть база данных, система очередей, наше приложение), мы распространяем ее на множество машин, чтобы убедиться, что, когда одна машина не работает, остальные из них могут занять это дополнительная нагрузка.
Довольно просто.
Но как распределить балансировщики нагрузки на множество машин?
Запись DNS может указывать на один или несколько наших серверов. Но когда наш сервер не работает, DNS и любой клиент не знает, что конкретная машина не работает. Клиенты обратятся к нему с запросом и получат информацию, что наша веб-страница не работает.
Как кластеризовать уровень балансировщика нагрузки?
Во-первых, рассмотрите сложность, которую вы готовы взять на себя, чтобы обеспечить доступность выше единого средства балансировки нагрузки. Загрузка обычно не проблема, один хост может передать очень большое количество соединений.
Балансировщики нагрузки можно кластеризовать, как и все остальное, для устранения сбоев оборудования или других узлов. Примером с открытым исходным кодом может быть haproxy с поддержкой активности на основе VRRP. Как правило, для нескольких локальных проектов высокой доступности требуется один и тот же уровень 2. Что означает альтернативные решения для облаков, которые дают вам только уровень 3.
Уровень 2 не помогает Интернету добраться до исправного узла или если ваш центр обработки данных отключится. Это подразумевает умение использовать DNS или IP-маршрутизацию.
DNS может возвращать другую запись на основе автоматической проверки работоспособности или вручную. Однако клиенты могут кэшировать результаты на несколько часов, что слишком долго для многих целей восстановления.
Направление одного и того же IP-адреса по другому пути является проблемой маршрутизации. Объявить маршрут к рабочему балансировщику нагрузки.
См. HAPROXY или аналогичную нагрузку / баланс. haproxy
ДОБАВИТЬ к вопросу ответа:
Хорошо, вам нужна только одна запись DNS
клиент <-> HAPROXY <-> сервер A <-> сервер B
HAPROXY находится на середине клиентских серверов.
Конфигурация HAPROXY вроде
bind *:80
acl host_mysite hdr(host) -i mysite.com
use_backend mysite if host_mysite
backend mysite
mode http
balance roundrobin
option httpclose
option forwardfor
server serverA ip:port check inter 2000
server serverB ip:port check inter 2000