Pull to refresh

Простая настройка репликации в PostgreSQL

Reading time3 min
Views17K
image
Возникла необходимость быстро и как можно проще организовать репликацию данных с сервера БД на резервный сервер. Простой и понятный способ на просторах Сети так и не нашелся, по этому пришлось по частям собрать информацию, которая и стала этой статьёй.

Решаемая задача. Исходные данные


Итак, имеем сервер БД, с которым работают клиенты, и резервный сервер, на который надо настроить репликацию с основной базы данных.
В моём случае используется PostgreSQL 9.2.1, который установлен на обоих серверах и поддерживает потоковую репликацию. Предположим что база данных на основном сервере развернута и работает, на резервном только установлен, но не настроен PostgreSQL. Для примера возьмем IP-адрес 192.168.1.1 за адрес основного сервера, IP-адрес 192.168.1.2 — за адрес резервного.

Настраиваем основной сервер БД


В разделе «Роли входа», через PgAdmin создаем пользователя (роль) repl с правами «Может создавать потоковую репликацию и резервные копии». Дописываем в pg_hba или через «Конфигурацию сервера» в PgAdmin создаем строку, разрешающую пользователю repl подключение к БД.

host replication repl 192.168.1.2/32 trust

В файле postgresql.conf сделали следующие изменения:
Первоначальное значение Сменили значение Описание
#max_wal_senders = 1 max_wal_senders = 2 Число резервных серверов, которое может подключится к основному серверу
#wal_keep_segments = 32 wal_keep_segments = 32 (можно поставить 256) Сколько хранить сегментов. Нужно количество надо выбрать такое, чтобы резервный сервер успевал все забирать и обрабатывать. Я поставил 256 чтобы за сутки wal-файлы не затирались
#wal_level = hot_standby wal_level = hot_standby hot_standby добавляет информацию, необходимую для запуска только для чтения запросов на резервный сервер
#checkpoint_segments = 3 checkpoint_segments = 16 Можно увеличить количество сегментов в WAL-логе

Настраиваем резервный сервер


Останавливаем сервис Postgresql 9.2 на резервном сервере и очищаем папку с данными, которые создаются при установке PostgreSQL, например D:\database. После этого запускаем бекап из командной строки:

"C:\PostgreSQL\bin\pg_basebackup.exe" --host=192.168.1.1 --port=5432 --username=repl -D "D:\database"

Настраиваем postgresql.conf в D:\database
Первоначальное значение Сменили значение Описание
#hot_standby = off hot_standby = on Разрешит read-only запросы к СУБД во время процесса восстановления

Настраиваем recovery.conf в D:\database
Значение Описание
standby_mode = 'on' Включить режим восстановления и работать как резервный сервер (slave)
primary_conninfo = 'host=192.168.1.1 port=5432 user=repl' Параметры для соединения с основным сервером
trigger_file = 'D:\\database\\end_trig' Если создадим файл с именем end_trig в указанной папке, то сервер выйдет из режима репликации и станет обычным сервером

Запускаем сервис Postgresql на резервном сервере. Должно стартовать без ошибок. Проверяем работу репликации: производим изменения в таблице на основном сервере, и проверяем — отразились ли они на резервном.

Настройка архивирования логов (если нужно)


В файле postgresql.conf на основном сервере включаем следующее:
archive_mode = on archive_command = 'copy "%p" «e:\\Backup\\%f»'

В папку e:\Backup будут падать архивы логов. (Внимание, они могут забить все место на диске, нужно настроить очистку при переполнении)

Чтобы воспользоваться архивами логов, нужно cкопировать логи в папку из которой будем восстанавливаться и в recovery.conf дописать строчку

restore_command = 'copy "e:\\Backup\\%f" "%p"'

Действия при сбоях


Если вышел из строя резервный сервер, то останавливаем на нем службу Postgres и выполняем все действия как в пункте «Настраиваем резервный сервер».
Если вышел из строя основной сервер, то необходимо перевести резервный сервер в обычный режим работы: для этого необходимо создать файл end_trig в папке как указано в recovery.conf trigger_file = 'D:\\database\\end_trig' b сделать vacuum и reindex базы.

Примечания


Репликации можно настраивать как с Windows XP на Windows 7, так и наоборот.
Для Windows 7 и Wndows XP в pg_hba разные настройки, т.к. в XP нет протокола ip6, то строка с ним должна быть закомментирована.
Tags:
Hubs:
+4
Comments4

Articles