Конкурс на замещение главного сервера

В случае отказа главного сервера его функции должен взять на себя один из резервных серверов. Для этого среди оставшихся резервных серверов проводится конкурс на выбор лучшего кандидата на роль главного.

Если выбрано сравнение баз данных по системному журналу, то конкурс производится не сразу, а с некоторой задержкой. Эта задержка необходима для получения самой последней информации о состоянии баз данных резервных серверов. Задержка обусловлена разницей моментов времени обнаружения выхода из строя главного сервера разными резервными серверами, а также задержками в сети.

Алгоритм выбора преемника главного сервера практически такой же, как и при старте системы резервирования. Отличие в том, что конкурс проводится только среди серверов с состоянием SLAVE, SLAVE_OK, SLAVE_WAIT, а в конкурсе БД участвуют только актуальные БД.

БД является актуальной только в том случае, если она изменялась или могла изменяться с момента старта управляющей программы сервера резервирования. Таким образом, актуальными могут быть:

  • БД, которые были рабочими на главном сервере (если когда-либо этот сервер был главным);

  • рабочие БД резервных серверов, полученные с главного сервера после старта управляющей программы;

  • резервные БД резервных серверов, полученные копированием актуальных рабочих БД.

Понятие актуальности введено для исключения потери данных при завершении работы главного сервера. Если главный сервер завершил работу, и при этом ни на одном резервном сервере нет актуальной БД, то система резервирования завершит функционирование. Поэтому данные, добавленные на главный сервер непосредственно после его старта до получения актуальной БД хотя бы одним из резервных серверов, не будут потеряны.

Отличаются также состояния в процессе переключения. Если при старте управляющая программа проходит через состояние STARTMONO, то при переключении она проходит через состояние SW_TO_MONO.

Серверы, не прошедшие конкурс на главного, переводятся в состояние старта резервного сервера SLAVE_WAIT и начинают заново свою работу в режиме резервного сервера.