Друзья.
Поделитесь пожалуйста опытом, кто какие решения по HA для сайтов использовал.
Задача примерно следующая:
2 физических web сервера с приватными IP,
2 виртуалки с приватными приватными IP и одним Виртуальным WAN IP.
Доступность прокси на виртуал IP
балансировка нагрузки между 2 веб серверами
липкие соединения (ну очень желательно что бы зайдя на 1 сервер пользователь, скорее всего по кукам (может как-то еще можно?), в следующий раз зашел бы туда же.)
Насколько я понял, есть только 2 открытых решения:
— LVS (давным давно не обновлялся, может ему и не надо?)) )
— linux-ha (мне показалось что это как гвозди микроскопом забивать, применительно к моей задаче)
— keepalived
Есть так же близкие но «не совсем то»:
— haproxy (Вроде как не умеет виртуальный IP)
— всяческие реализации CARP, VRRP
Правильно ли я понимаю ситуацию? Есть ли какие-то еще решения? Что лучше выбрать?
haproxy + keepalived. Разруливаем весьма хороший трафик.
HAproxy для балансировки трафика, keepalived для переключения виртуального IP на резервную ноду при падении основной.
Кстати, keepalived — это и есть реализация VRRP, и он вырос из LVS.
задача тривиальна на самом деле. carp/vrrp на внешний адрес виртуалки, дальше на виртуалках nginx, распределяющий запросы. Если в nginx, в настройках апстрима указано 2 сервера и опция ip_hash, то один и тот же пользователь всегда будет попадать на один и тот же бекенд.
При падении виртуалки внешний адрес уйдёт на вторую, и всё продолжит работать штатно. при падении физического сервера с приложением nginx переправляет запросы на оставшийся в живых и всё опять же продолжает работать
iphash будет цеплять 1 IP на один сервер, а на этом 1 IP может быть целый город, в российских реалиях, да и не только российских. Склоняюсь к методу основанному на куках.
по моему разумению, метод привязки по IP будет гораздо менее трудоёмок как с точки зрения настройки, так и с точки зрения потреблённых ресурсов. Как показывает практика, неравномерностью нагрузки из за сеток, натящихся в один адрес, вполне можно пренебречь. одна сетка попадёт на один апстрим, другая на другой, 1024я опять на первый. Если конечно Вы не делаете региональный портал, на который будет ходить всего одна такая сеть :)
я бы взял LVS, если вам надо просто tcp разбросать.
насчёт «давно не обновлялся» — это вы, мягко говоря, не правы: советую посмотреть в netdev@ или же просто в git.