Разное

Репликация Postgresql 10 (Hot standby в другом ДЦ)

27.10.2019

Итак. На примере Важной Базы данных Postgresql попробую описать процесс поднятия.

Исходные данные. На обоих серверах стоит ubuntu 16.04 , а также стоит классический postgresql-10  (10.5 если быть точным).

Слейв обязательно видит мастер, мастер может быть за VPN и не видеть слейва.

На мастер сервере:

В файл /etc/postgresql/postgresql.conf добавляем следующие значения:

Далее, в файле /etc/postgresql/pg_hba.conf включаем доступ для внешней репликации (вместо 0.0.0.0/0 можно указать ip реплики)

Далее, выполняем под юзером postgres запросы на создание репликационного пользователя:

Делаем рестарт посгри service postgresql restart


На слейв сервере:

Для начала — останавливаем полностью посгрес на слейве. 

service postgresql stop

По-умолчанию,  папка с данными десятой посгри находится тут: /var/lib/postgresql/10/main — очищаем её, если в ней есть данные.

Далее, заходим под юзером посгрес  sudo postgres и выполняем следующие действия.

Дожидаемся, пока pg_basebackup засинкает данные.

Переходим под пользователя рут и стараемся максимально засинхронизировать файлы  /etc/postgresql/postgresql.conf  и  /etc/postgresql/pg_hba.conf  на слейве с мастера. (директории конфигов и дата-директория могут отличаться, включаем мозг и делаем такие пути, как на слейве. =) )

Теперь развлекаемся с /var/lib/postgresql/10/main/recovery.conf данный файл будет создан, после успешной репликации.

Последней строкой добавляем следующее:

Это позволит перевести слейв в режим мастера простым созданием файла touch_me_to_promote_to_me_master 

А теперь, самое прикольное — стартуем посгрю service postgresql start
, переходим на мастер и смотрим статус репликации

ВУАЛЯ!

П.С. На текущий момент времени задача репликации выполнена. Следущий этап — создание синхронной репликации и подключение WAL-G для хранения архива WAL файлов в AWS S3.

П.П.С. Помните, что репликация — это не бекап данных!

1+