Начиная с версии 2.6, в ECCM реализована поддержка отказоустойчивой кластерной конфигурации. Кластер строится на основе двух механизмов: обеспечения отказоустойчивости базы данных и обеспечения отказоустойчивости сервисов системы. Каждый из них использует собственный принцип переключения ролей (failover)
ЕССМ включает в себя две основные базы данных: PostgreSQL и Redis. Для переключения мастерства в PostgreSQL используется механизм Repmgr (Replication Manager), для Redis — Redis Sentinel. Для переключения мастерства в базе данных должны участвовать три узла (ноды) системы:
Узел-наблюдатель выполняет постоянный мониторинг состояния основного и резервных мастеров (проверка работоспособности). В случае, если наблюдатель замечает отсутствие ответов от текущего мастера, то наблюдатель начинает процедуру кворума (голосование).
На первом этапе определяется группа участников голосования. Кворум рассчитывается на основе всех узлов, зарегистрированных в кластере со статусом активного. Это включает в себя 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. За характер изменения поведения отвечает выставленный приоритет на узле в конфигурационном файле: