PostgreSQL: Как превратить stand-by в master
В ходе эксплуатации потоковой репликации, может возникнуть необходимость переключения standby сервера в режим мастера. Причины могут быть самые разные, например выход мастера из строя, обновление hardware сервера и т.п. Для выполнения этой операции существует несколько способов.
- через перезапуск postgresql
- через создание триггер файла
- через утилиту pg_ctl
1) Перезапуск postgresql
Одним из способов является остановка postrgesql сервиса и удаление специального recovery.conf файла из каталога кластера и запуск postgresql сервиса. Способ этот не всегда приемлем из-за обязательной остановки сервиса. Однако этот способ используется в repmgr и позволяет старый мастер подключить в качестве standby сервера к новому мастер серверу без повторения процесса полной инициализации.
Однако если мастер потерян в случае аварии, или его использование в дальнейшем не планируется можно использовать другие способы:
2) Использование триггер файла
Для использования этого способа необходимо наличие опции trigger_file в recovery.conf файле.
trigger_file = '/var/lib/postgresql/9.3/main/failover'
При такой конфигурации, postmaster будет отслеживать наличие файла с указанным именем в указанной директории. В случае когда она появится там, postmaster процесс завершит репликации и перейдет в режим мастера. Перезагрузка при этом не требуется. Однако и запуск старого мастера в качестве standby сервера потребует либо полной инициализации (rsync или pg_basebackup) либо использования pg_rewind.
Однако у этого способа есть свои недостатки. Если вы обнаружили что параметра trigger_file нет в recovery.conf, то чтобы добавить его и чтобы он вступил в силу требуется перезапуск сервиса. Таким образом при инициализации standby сервера надо помнить и не забыть определить эту опцию в recovery.conf.
Тем не менее остается третий способ - использование pg_ctl.
3) Использование pg_ctl
Это тот случай когда trigger_file в recovery.conf отсутствует. Перезапуск сервиса, при использовании этого способа также не требуется.
# sudo -u postgres pg_ctl -D /var/lib/postgresql/9.3/main promote
Самый простой и удобный, на мой взгляд способ, однако доступен он только с версии 9.1.
4) Четвертый бонусный способ
В сущности этот способ повторяет третий способ и представляет собой то, что делает pg_ctl на более низком уровне.
# touch /var/lib/postgresql/9.3/main/promote
# kill -USR1 $(head -n 1 /var/lib/pgsql/9.4/data/postmaster.pid)
Способ этот отличается лишь тем что его можно делать как от имени postgres так и от имени root. Заключается он в создании promote файла в каталоге кластера и отправке USR1 сигнала процессу postmaster.
Спасибо за внимание!
На главную "Virtualizing Linux"
4 -- злой зхак
ОтветитьУдалитьнедокументированная возможность, да
Удалить