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

в 15:57, , рубрики: postgresql, Администрирование БД, базы данных, Песочница, репликация, хранение данных, метки: , , , ,

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:PostgreSQLbinpg_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, то строка с ним должна быть закомментирована.

Автор: RazdoR

Источник


  1. постгрезчик:

    Чувак, спасибо тебе – ты этой статьёй чуть ли не жизнь мне спас))

  2. Валерий:

    Можно обновить инструкцию до актуальной версии Postgresql 9.5
    После запуска бэкапа сиз командной строки происходят ошибки при копировании лога и конфиг олд, копирую в ручную сервер не стартует!

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js