Найти в Дзене
Linux Syndicate

А как вы настраиваете потоковую репликацию в PostgreSQL?

В статье расскажу как настроить потоковую асинхронную репликацию в СУБД PostgreSQL. Если вы читаете эту статью значит скорее всего вы уже знаете как установить PostgreSQL, знаете как инициализировать кластер и где лежат файлы конфигураций. Если так, тогда начнем __________________________________________________________________________________________ Для начала нужно понимать что в данном варианте работы есть главный сервер который передает данные и ведомый сервер который эти данные принимает. Ведомых серверов может быть несколько. Важно понимать что в данном варианте копируется весь кластер целиком. Для начала нам необходимо проверить параметры в файле postgresql.conf Данный параметр определяет, как много информации записывается в WAL. Проверяем что установлено значение "replica" wal_level=replica Задаёт максимально допустимое число одновременных подключений ведомых серверов или клиентов потокового копирования. Если у вас один ведомый сервер рекомендую установить значение 2
Оглавление

В статье расскажу как настроить потоковую асинхронную репликацию в СУБД PostgreSQL.

Если вы читаете эту статью значит скорее всего вы уже знаете как установить PostgreSQL, знаете как инициализировать кластер и где лежат файлы конфигураций.

Если так, тогда начнем

__________________________________________________________________________________________

Для начала нужно понимать что в данном варианте работы есть главный сервер который передает данные и ведомый сервер который эти данные принимает. Ведомых серверов может быть несколько. Важно понимать что в данном варианте копируется весь кластер целиком.

Для начала нам необходимо проверить параметры в файле postgresql.conf

Данный параметр определяет, как много информации записывается в WAL. Проверяем что установлено значение "replica"

wal_level=replica

Задаёт максимально допустимое число одновременных подключений ведомых серверов или клиентов потокового копирования. Если у вас один ведомый сервер рекомендую установить значение 2

max_wal_senders=10

Максимальное количество слотов репликации

max_replication_slots=32

Минимальное число файлов прошлых сегментов журнала, которые будут сохраняться в каталоге pg_wal, чтобы ведомый сервер мог выбрать их при потоковой репликации

wal_keep_segments=32

Если вы исправили какой-то из этих параметров, то необходимо перезапустить сервис PostgreSQL. (Лучше использовать pg_ctl)

__________________________________________________________________________________________

Настройка главного сервера

Сделаем резервные копии файлов конфигурации postgresql.conf и pg_hba.conf

cp /home/postgres/12/data/postgresql.conf /home/postgres/10/data/postgresql.bkp
chown postgres:postgres /home/postgres/12/data/postgresql.bkp
cp /home/postgres/12/data/pg_hba.conf /home/postgres/10/data/pg_hba.bkp
chown postgres:postgres /home/postgres/12/data/pg_hba.bkp

Обратите внимание что путь до каталога /home/postgres/12/data может отличаться от вашего.

Запустим psql. (Про psql можно почитать тут)

Создадим пользователя "replica" c ограничением на 2 одновременных подключения с паролем "passwd"

CREATE USER replica REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD 'passwd';

Создадим слот репликации с названием "replica"

SELECT pg_create_physical_replication_slot('replica');

Редактируем pg_hba.conf

mcedit /home/postgres/12/data/pg_hba.conf

mcedit будет работать если установлен пакет mc. Можно использовать другой редактор

и добавляем строку в конец файла

host replication replica 192.168.1.3/32 md5

где 192.168.1.3 адрес ведомого сервера

И перечитываем конфигурацию

__________________________________________________________________________________________

Настройка ведомого сервера

Первым делом останавливаем сервис PostgreSQL и удаляем все каталоги в кластере. (Важно понимать что мы говорим о чистом сервере на котором нет других баз, а тем более рабочих!!! В противном случае удалив все каталоги в кластере мы потеряем все данные)

Загружаем данные с главного сервера

su postgres
pg_basebackup -P -R -X stream -c fast -h 192.168.1.2-U replica -D /home/postgres/12/data/ --slot=replica

192.168.1.2 - ip адрес главного сервера

После того как пройдет загрузка запускам сервис PostgreSQL

__________________________________________________________________________________________

Проверить статус репликации можно командой через psql на главном сервере

SELECT * FROM pg_stat_replication \gx

Важно!

Если у вас по какой-то причине перестанет работать ведомый сервер, на главном сервере будут копиться wal файлы и рано или поздно закончится место. Чтобы освободить место удалить слот репликации командой ниже на главном сервере через psql

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

SELECT* FROM pg_replication_slots;

Удаление слота репликации "replica"

select pg_drop_replication_slot('replica);

Если возникли проблемы или вопросы пишите комментарии.

#postgresql #postgresql репликация #linux