Репликация Postgresql 11.2 в режиме Master-> Slave

Оцените статью

Задачка довольно типовая, но мы немного усложним условия и сделаем репликацию двух инстансов Postgresql завернутых в Docker.

Операции на мастер-хосте

Первым делом создаем пользователя от имени которого будет осуществляться репликация.

# docker exec -it postgresql /bin/bash
# su postgres
$ psql
postgres=# CREATE ROLE replica_user WITH REPLICATION LOGIN PASSWORD ‘P@SSWORD’;
postgres=# \q
/ $ exit
# exit

В файле pg_hb.conf разрешаем подключения этому пользователю с хоста где будет распологаться реплика.

host  replication   replica_user  10.77.111.108/32   md5

В конфигурационный файл вносим правки.

wal_level = logical
wal_log_hints = on

Так-как мы используем контейнер, по reload и аналогично restart для службы сервера postgresql производится немного иначе.

# docker exec -it postgresql /bin/bash
# su postgres
$ pg_ctl reload

Операции на slave-хосте

Останавливаем контейнер с postgresql, запускаем в интерактивном режиме, удаляем существующую базу и командой pg_basebackup копируем базу с мастер-узла, после чего запускаем контейнер. Обратите внимание, что вместо команды docker-compose я буду использовать алиас dc.

# dc stop postgresql
# dc run postgresql /bin/bash
# rm -rf /var/lib/postgresql/data/*
# pg_basebackup -h 10.51.0.100 -U replica_user -X stream -C -S replica_1 -v -R -W -D /var/lib/postgresql/data/
# exit
# dc start postgresql

Проверяем статус репликации

bash-4.4# su postgres
/ $ psql
psql (11.2)
Type «help» for help.postgres=# SELECT client_addr, state FROM pg_stat_replication;
client_addr  |   state
—————+————
10.77.111.108 | streaming
(1 row)

Опционально создаем общее хранилище WAL-файлов

Создаем общее файловое NFS-хранилище по инструкции «Настройка NFS клиент-сервер в CentOS» и смонтировано оно будет в каталог /mnt/nfs где создадим подкаталог /mnt/nfs/wal.

Добавляем тома монтирования в контейнер.

volumes:
— /mnt/nfs/wal:/wal

В конфигурацию мастер ноды добавляем параметры.

archive_mode = on
archive_command = ‘test ! -f /mnt/nfs/wal/%f && cp %p /mnt/nfs/wal/%f’

В конфигурацию slave ноде докидываем параметры на восстановление и очистку старых архивов.

restore_command = ‘cp /mnt/nfs/wal/%f %p’
archive_cleanup_command = ‘pg_archivecleanup  /mnt/nfs/wal/ %r’

Похожие записи

Настройка взаимодействия RED ADM и Windows Active Directory

Сегодня проведем несколько экспериментов по настройке взаимодействия RED ADM и Windows Active Directory. Есть несколько способов настройки доверия для упрощения миграции с решений Microsoft на Российское ПО и сегодня их…

Установка основного контроллера домена на базе REDADM

Продолжаем наш проект по импортозамещеню Зарубежного ПО на Российское. Я уже рассказывал как работать с доменом FreeIPA, но для полноты картины стоит рассказать и про контроллер домена на базе REDADM.…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка взаимодействия RED ADM и Windows Active Directory

Настройка взаимодействия RED ADM и Windows Active Directory

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Установка основного контроллера домена на базе REDADM

Установка основного контроллера домена на базе REDADM

zVirt работа с шаблонами виртуальных машин

zVirt работа с шаблонами виртуальных машин

Подробная инструкция по работе с томами (volumes) в Docker

Подробная инструкция по работе с томами (volumes) в Docker

Сетевые возможности Docker

Сетевые возможности Docker