Я знаю, что некоторые люди используют keepalived и heartbeat для активного / ждущего режима, но что делать, если процесс haproxy умирает?
Было бы неплохо, если бы виртуальный IP-адрес переключал серверы, если бы процесс haproxy прекратил работу и / или возникла проблема с сетью. В настоящее время мы изучаем сердцебиение и коросинхронизацию с кардиостимулятором. Может ли кто-нибудь подробно объяснить свое решение этой проблемы?
ОБНОВИТЬ: Спасибо, Кайл, см. Ответ и ссылки в нем.
Я бы сказал, что heartbeat
это то, что вы ищете.
Если отслеживаемая служба (haproxy
в вашем случае) имеет lsb-совместимый сценарий инициализации - сердцебиение будет работать initscript status
. Если он сообщает, что служба не работает, он попытается запустить ее. Если он не сможет запустить его пару раз - он выполнит переключение на другой узел. Пока узлы имеют возможность связываться друг с другом, это будет выполняться очень контролируемым образом - адреса удаляются на одном узле и выводятся на другой.
Если две контрольные машины теряют связь друг с другом, они обе могут попытаться выполнить аварийное переключение. Один из способов решить эту проблему - настроить плагин STONITH (Shoot The Other Node In The Head). Это будет использовать интерфейс управления и пытаться отключить другую службу перед запуском ее служб. Такой механизм имеет решающее значение, если вы задействуете совместно используемое хранилище для отработки отказа.
Лично я никогда не испытывал haproxy
die - считаю очень стабильным сервисом. я использую heartbeat
для переключения IP-адресов только при работе на haproxy-узлах.
Спасибо, Квисле и Кайл! В итоге мы остановились на keepalived, поскольку, как сказал Кайл, это решение, рекомендованное создателями haproxy. Keepalived включает возможность запускать сценарий пользовательского пространства по вашему выбору и определять доступность ресурсов на основе статуса выхода. Таким образом, вы можете легко выполнить аварийное переключение с помощью мониторинга процессов. Еще одно преимущество - простота по сравнению с тактом с кардиостимулятором / corosync, всего одно приложение / процесс и один файл конфигурации.
В наших тестах мы видели, что аварийное переключение происходит так быстро, что не падает ни одного эхо-запроса. Еще раз спасибо!
Отличная статья о keepalived и VRRP
Также см: связанный ответ serverfault