3
Переключение на реплику
Причины
плановое переключение (switchover):
останов основного сервера для проведения технических работ
аварийное переключение (failover):
переход на реплику из-за сбоя основного сервера
Процедура
убедиться, что мастер остановлен
$ pg_ctl promote или
promote_trigger_file или
pg_promote()
автоматическое переключение: отсутствует
(для автоматизации требуется стороннее кластерное ПО)
Причиной перехода на резервный сервер может быть необходимость
проведения технических работ на основном сервере — тогда переход
выполняется в удобное время в штатном режиме (switchover). А может
быть сбой основного сервера, и в таком случае переходить на
резервный сервер нужно как можно быстрее, чтобы сократить время
простоя системы (failover).
В любом случае сначала нужно убедиться, что мастер остановлен. Это
очень важно, иначе данные на разных серверах «разойдутся», и свести
их потом воедино — нетривиальная и неавтоматизируемая задача.
Скорее всего, часть данных придется просто потерять.
Затем выполняется переход на реплику в ручном режиме.
Автоматизация этого процесса возможна, но требует стороннего
кластерного программного обеспечения (это обсуждается в модуле
«Кластерные технологии»).
Переключение состоит в разрыве цикла восстановления. Для этого
реплике посылается команда promote: либо командой pg_ctl promote,
либо вызовом функции pg_promote из SQL. Другой вариант — задать
имя файла в параметре promote_trigger_file. При появлении в системе
файла с таким именем восстановление прерывается.
Еще один вариант: удалить файл standby.signal и перезапустить
резервный сервер. Это не вполне «честный» способ, поскольку в этом
случае реплика не поймет, что восстановление завершено, и не
перейдет на новую линию времени. Дальше мы будем рассматривать
только два первых варианта.