Настройка репликации
Содержание
Настройка репликации#
See also
Оригинальная статья: https://www.dmosk.ru/miniinstruktions.php?mini=postgresql-replication
Создаём пользователя в PostgreSQL на Master#
Входим в систему под пользователем postgres:
su - postgres
Создаём нового пользователя для репликации:
createuser --replication -P repluser
Система запросит пароль — его нужно придумать и ввести дважды. В данном
примере мы создаём пользователя repluser.
Выходим из оболочки пользователя postgres:
exit
Настраиваем Master#
Смотрим расположение конфигурационного файла postgresql.conf командой:
su - postgres -c "psql -c 'SHOW config_file;'"
Открываем конфигурационный файл postgresql.conf (тот, имя которого получили
в выводе предыдущей команды):
vim /mnt/storage/pgsql/data/postgresql.conf
Редактируем следующие параметры:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 2
max_replication_slots = 2
hot_standby = on
hot_standby_feedback = on
где:
- *
IP-адрес сервера, на котором он будем слушать запросы Postgres, можно перечислить явно через запятую;
- wal_level
указывает, сколько информации записывается в WAL (журнал операций, который используется для репликации);
- max_wal_senders
количество планируемых слейвов;
- max_replication_slots
максимальное число слотов репликации
Warning
Данный параметр не нужен для postgresql 9.2: с ним сервер не запустится!
- hot_standby
определяет, можно или нет подключаться к postgresql для выполнения запросов в процессе восстановления;
- hot_standby_feedback
определяет, будет или нет сервер slave сообщать мастеру о запросах, которые он выполняет.
Открываем конфигурационный файл pg_hba.conf — он находится в том же
каталоге, что и файл postgresql.conf:
vim /mnt/storage/pgsql/data/pg_hba.conf
Добавляем следующие строки:
host replication repluser 127.0.0.1/32 md5
host replication repluser 192.168.1.1/32 md5
host replication repluser 192.168.1.2/32 md5
Данной настройкой мы разрешаем подключение к базе данных replication
пользователю repluser с локального сервера (127.0.0.1 и 192.168.1.1) и
сервера 192.168.1.2.
Hint
Лучше использовать не md5, а scram-sha-256.
Перезапускаем службу postgresql:
systemctl restart postgresql
Important
Обратите внимание, что название сервиса в системах Linux может различаться.
Настраиваем Slave#
Смотрим расположение папки данных postgresql:
su - postgres -c "psql -c 'SHOW data_directory;'"
Получаем: /mnt/storage/pgsql/data.
Также смотрим путь до конфигурационного файла postgresql.conf (нам это
понадобится ниже):
su - postgres -c "psql -c 'SHOW config_file;'"
Останавливаем сервис postgresql:
systemctl stop postgresql
На всякий случай, создаём архив базы:
tar -czvf /tmp/data_pgsql.tar.gz \
/mnt/storage/pgsql/data
Удаляем содержимое каталога с данными:
rm -rf /mnt/storage/pgsql/data/*
И реплицируем данные с master сервера.
а) Если у нас postgresql 9:
su -u postgres -с "pg_basebackup \
-h 192.168.1.1 \
-U repluser \
-D /mnt/storage/pgsql/data \
--xlog-method=stream
--write-recovery-conf"
где:
- 192.168.1.1
IP-адрес мастера;
- /mnt/storage/pgsql/data
путь до каталога с данными.
б) Если у нас postgresql 10 и выше:
su - postgres -c "pg_basebackup
--host=192.168.1.1 \
--username=repluser \
--pgdata=/mnt/storage/pgsql/data \
--wal-method=stream
--write-recovery-conf"
где:
- 192.168.1.1
IP-адрес мастера;
- /mnt/storage/pgsql/data
путь до каталога с данными.
После ввода команды система запросит пароль для созданной ранее учётной записи
repluser — вводим его. Начнётся процесс клонирования данных.
Открываем конфигурационный файл postgresql.conf на слейве, если явно
указывали адреса, меняем:
vim /mnt/storage/pgsql/data/postgresql.conf
И редактируем следующие параметры:
listen_addresses = '*'
Снова запускаем сервис postgresql:
systemctl start postgresql