Краткая инструкция по запуску потоковой репликации баз данных 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/