Начиная с версии 2.6 в ECCM реализована поддержка отказоустойчивой кластерной конфигурации. Кластер строится на основе двух механизмов: обеспечения отказоустойчивости базы данных и обеспечения отказоустойчивости сервисов системы. Каждый из них использует собственный принцип переключения ролей (failover).
ЕССМ использует две основные базы данных: PostgreSQL и Redis. Для переключения мастерства в PostgreSQL используется механизм Repmgr (Replication Manager), для Redis — Redis Sentinel. Для переключения мастерства в базе данных должны быть задействованы три узла (ноды) системы:
Witness-node выполняет постоянный мониторинг состояния основного и резервных мастеров (проверка работоспособности). В случае если Witness-node замечает отсутствие ответов от текущего мастера, он начинает процедуру кворума (голосования).
На первом этапе определяется группа участников голосования. Кворум рассчитывается на основе всех узлов, зарегистрированных в кластере со статусом активного. Это Master, все Slave и Witness-узлы.
Неактивные или исключённые узлы в расчете кворума не участвуют.
При потере связи с мастером кандидат (один из Slave) инициирует процедуру выборов:
Подсчет голосов — учитываются ответившие узлы и голос самого кандидата.
После выполнения процедуры принимается решение о переключении мастерства в кластере:
В Redis Sentinel кворум рассчитывается на основе количества Sentinel-процессов, следящих за кластером. В отказоустойчивой системе ЕССМ Sentinel-процесс запускается на Witness-node.
Только те Sentinel-ы, которые настроены на мониторинг данного мастера и находятся в состоянии «активного мониторинга» (субъективно считают мастер доступным или недоступным), участвуют в голосовании. Sentinel-ы, которые вышли из строя, потеряли связь или были исключены, в расчете кворума на момент выборов не участвуют.
При обнаружении недоступности мастера Sentinel инициирует процедуру выборов лидера среди Sentinel-ов:
После завершения выборов лидера принимается решение о запуске процедуры переключения:
Если Sentinel набрал более 50% голосов от общего числа Sentinel-ов в кластере, он объявляется лидером и имеет право инициировать failover;
В Redis Sentinel и Repmgr после смены мастерства автоматически роль мастера не назначается изначальному узлу мастера. Повторная смена мастерства будет проходить по ранее описанным кворумам и мастер будет назначаться тому узлу, который будет иметь наименьший разрыв по количеству данных с последним мастером кластера.
Для обеспечения отказоустойчивой системы в ЕССМ предусмотрено использование механизма Keepalived. Его использование позволяет на одном виртуальном IP-адресе (VIP) продолжать работу даже при ошибках на одном из узлов. Для переключения мастерства в кластере должно быть два узла:
На каждом из узлов должен быть установлен механизм Keepalived.
Если мастер перестал отвечать или несколько сервисов на нем перестали функционировать, то происходит переключение VIP с мастера на резервный узел. Мастером становится узел с наибольшим приоритетом.
В Keepalived после смены мастерства новый мастер забирает VIP на свою систему.
Поведение ролей изменяется в зависимости от настроек конфигурации Keepalived. За характер изменения поведения отвечает выставленный приоритет на узле в конфигурационном файле: