Я хочу балансировать нагрузку + резервное копирование при отказе нескольких веб-серверов vps, размещенных на разных провайдерах.
Я слышал, что для HAProxy вам нужно несколько серверов в одной подсети, а также общий (виртуальный) IP-адрес между балансировщиками нагрузки.
Но в моем случае это невозможно, потому что каждый VPS находится на другом узле / сети.
Я знаю о Round Rubin DNS, но он не обеспечивает ни реального решения для аварийного переключения, ни балансировки нагрузки между серверами.
Балансировка нагрузки и высокая доступность (HA) - это разные вещи.
Да, вы можете настроить балансировку нагрузки с помощью NginX для двух или более узлов, независимо от того, где они расположены.
Для балансировки нагрузки у вас есть:
DNS -> IP-адрес службы -> Балансировщик нагрузки -> AppSrv1, AppSrv2, ..., AppSrvn -> Один или несколько бэкэндов
Для высокой доступности (HA) у вас есть:
По сути, Load Balancer создает хэши на основе IP-адреса клиента и перенаправляет весь трафик с этим хешем в тот же AppSrv (для сохранения сеансов и т. Д.). Вы можете настроить предпочтительный AppSrv, отказоустойчивый AppSrv и т. Д.
Вы можете настроить LB на всех своих VPS, которые перенаправляют трафик на локальный AppSrv (тот же VPS), и, если этот AppSrv недоступен, перенаправить на «резервный» VPS. Но есть проблемы с такой реализацией на очень многих уровнях ...
Вы имеете в виду разные фермы, расположенные в разных районах?
Затем вы должны направить их через DNS в конкретную географическую ферму, где HAProxy может балансировать нагрузку:
webfarm1 -> HAProxy -> appsrv ..
webfarm2 -> HAProxy -> appsrv ..
Вы также можете балансировать нагрузку между vps, распределенными по географическим регионам, но конечный результат не будет таким хорошим: такие серверы установки обычно статический контент, такой как CDN.
Вы перепутали HSRP / VRRP / LVS с HAProxy. Виртуальный IP-адрес полностью отделен от HAProxy.
Если вам нужен единый общий IP-адрес между двумя разными провайдерами VPS, вы не можете. Лучшее, что вы можете сделать, это получить два VPS от одного и того же провайдера, запустить heartbeat + haproxy на обоих, тогда у них могут быть IP-адреса в одной подсети.