среда, 14 декабря 2011 г.

Репликация PostgreSQL с помощью repmrg

Как известно, начиная с версии 9.0 в PostgreSQL появилась поддержка streaming replication. В отличии от традиционной репликации на тригерах она дает значительно меньший оверхед на мастер и поэтому может быть использована не только для резервирования, но и для масштабирования.

Процесс настройки, приведенный в официальной вики достаточно сложен, к счатью есть скрипт repmgr, позволяющий значительно упростить отдельные этапы.

Подготовка
Необходимо установить на оба сервера (мастер и слейв) postgres версии 9.0 или 9.1, а также repmgr:
make install clean -C /usr/ports/databases/postgresql91-server
make install clean -C /usr/ports/databases/postgresql-repmgr
Проинициализировать каталог данных на мастере:
      /usr/local/etc/rc.d/postgres initdb
Убедиться, что слейв может подключиться к мастеру. Для этого задать значение директива listen_addresses в postgresql.conf, кроме того разрешить доступ в pg_hba.conf:
host replication pgsql 192.168.0.0/24 trust
 Далее нужно сделать некоторые изменения в конфиге на мастере:


wal_level = hot_standby
wal_keep_segments = 320
 Значение wal_keep_segments должно быть достаточно велико, чтобы в случае временной остановки слейва или же потери связи с мастером, он мог "догнать" пропущенные сегменты. Каждый сегмент имеет размер в 16 мегабайт.
max_wal_senders = 5
 Максимальное количество слейвов на данном мастере.
archive_mode    = on
archive_command = 'exit 0'
Архивирование сегментов. Можно указать реальную команду копирования на слейв или же третий сервер, но в большинстве случаев это не обязательно.


Авторизация
При начальной синхронизации repmrg использует rsync поверх ssh, поэтому необходимо настроить для слейва доступ по ключам к мастеру пользователю, под которым выполняется postgres (по умолчанию pgsql).

Начальная синхронизация
На слейве необходимо выполнить команду
repmgr -D /var/db/pgsql/data -w 300 standby clone master
 Где -D каталог данных, master - хост мастера. Данная команда выполнит синхронизацию и создаст файл с информацией о мастере.
После этого можно запускать слейв.


Мониторинг
Для мониторинга необходимо выполнить следующие команды на соответсвующих хостах:
repmgr -f /var/db/pgsql/repmgr.conf --verbose master register
repmgr -f /var/db/pgsql/repmgr.conf --verbose standby register
 Будут созданы конфигурационные файлы repmgr.
Теперь запускаем repmgrd:
repmgrd -f /var/db/pgsql/repmgr.conf --verbose > /var/db/pgsql/repmgr.log 2>&1
 В данный файл будет записываться информация о состоянии репликации.

Нештатные ситуации
Сбой мастера. В этом случае нужно сделать слейв новым мастером, для этого на нем нужно выпонлить команду:
repmgr -f /var/db/pgsql/repmgr.conf standby promote
 Когда прежний мастер вернется в строй, необходимо сделать его слейвом, выполнив начальную синхронизацию.

1 комментарий: