Страницы

Сохранить статью у себя в соцсети:

понедельник, 6 октября 2014 г.

PostgreSQL stand-by promote

PostgreSQL: Как превратить stand-by в master

В ходе эксплуатации потоковой репликации, может возникнуть необходимость переключения standby сервера в режим мастера. Причины могут быть самые разные, например выход мастера из строя, обновление hardware сервера и т.п. Для выполнения этой операции существует несколько способов.
  1. через перезапуск postgresql
  2. через создание триггер файла
  3. через утилиту 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"

2 комментария:

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика