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

Краткая инструкция по запуску потоковой репликации баз данных PostgreSQL в кластере Master-Slave.

В нашем случае имеются 2 машины с установленным СУБД PostgreSQL версии 13 (на версии 14 всё делается аналогично):

  • 192.168.1.31 — будет работать в режиме master (основной сервер)
  • 192.168.1.32 — будет работать в режиме slave (дополнительный сервер)

На сервере master сменим пользователя на postgres

# su - postgres

и запустим консоль psql

# psql

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

ALTER ROLE postgres PASSWORD '147258';
\q

и возвращаемся к пользователю root

# exit

Далее открываем конфигурационный файл pg_hba.conf

# nano /etc/postgresql/13/main/pg_hba.conf

и в самом конце добавим строку, которая разрешит репликацию на слэйв:

host	replication		postgres	192.168.1.32/24		md5

После этого открываем файл postgresql.conf

# nano /etc/postgresql/13/main/postgresql.conf

и раскомментируем и изменим следующие параметры на указанные ниже:

listen_addresses = 'localhost, 192.168.1.31'
wal_level = hot_standby
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 8
hot_standby = on

Перезапускаем службу postgresql

# systemctl restart postgresql

Теперь переходим на сервер slave и остановим запущенную службу postgresql

# systemctl stop postgresql

Затем открываем конфигурационный файл pg_hba.conf

# nano /etc/postgresql/13/main/pg_hba.conf

и в самом конце добавим строку, которая разрешит репликацию с мастера:

host	replication		postgres	192.168.1.31/24		md5

После этого открываем файл postgresql.conf

# nano /etc/postgresql/13/main/postgresql.conf

и раскомментируем и изменим следующие параметры на указанные ниже:

listen_addresses = 'localhost, 192.168.1.32'
wal_level = hot_standby
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 8
hot_standby = on

После этого сменим пользователя на postgres

# su - postgres

переходим в каталог /var/lib/postgresql/13/

# cd /var/lib/postgresql/13/

в ней удалим директорию main/

# rm -rf main/

создадим чистую директорию main/

# mkdir main/

и выставим на неё необходимые права

# chmod go-rwx main/

Затем подтянем данные с мастера в директорию main/

# pg_basebackup -P -R -X stream -c fast -h 192.168.1.31 -U postgres -D ./main

возвращаемся в пользователя root

# exit

и запустим службу postgresql

# systemctl start postgresql

Готово! Репликация настроена.

Для проверки достаточно создать базу данных на мастере

CREATE DATABASE replica_db;

можно внести туда какие-нибудь таблицы и данные.

Сервер slave будет работать в режиме чтения.

При необходимости его можно перевести в режим записи — то есть, фактически сделать мастером. Для этого запустим команду

# /usr/lib/postgresql/12/bin/pg_ctl promote -D /var/lib/postgresql/12/main

Источник: https://selectel.ru/blog/tutorials/how-to-set-up-replication-in-postgresql/

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

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