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

Для реализации потоковой репликации требуется наличие, как минимума 2-х серверов:

  • Имя мастера: master-db / IP 192.168.0.1
  • Имя слейва: slave-db / IP 192.168.0.2

Устанавливаем на каждый сервер postgresql:

sudo apt-get update 
sudo apt-get install postgresql postgresql-contrib 

Устанавливаем дополнения:

sudo apt-get install postgis  sudo apt install postgresql-10-postgis-scripts sudo apt install postgresql-plv8 sudo apt install nodejs npm 

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

Создаем пользователя для репликации:

sudo su postgres #В этот момент мы авторизовываемся под пользователем postgres 
psql 
postgres=# CREATE USER replica REPLICATION LOGIN CONNECTION LIMIT 2 PASSWORD 'qwe-123'; 
\q 

Создан пользователь replica с паролем qwe-123

Переходим в каталог:

cd /etc/postgresql/10/main/pg_hba.conf

Чтобы не было проблем с доступом в IP адресах указывал 0.0.0.0/32 — доступ разрешен со всех IP

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

Разрешение на подключения

Добавляем пользователя для репликации:

Прописываем пользователя для репликации

Здесь мы указали, что репликация разрешена пользователя с именем replica, подключающемуся с адреса 192.168.0.2

Далее переходим к изменению файла postgresql.conf

Требуется проверить наличие следующих параметров и значений:

listen_addresses = '*'
wal_level = replica
max_wal_senders = 2
wal_keep_segments = 100 
  • listen_addresses — разрешаем подключение с любых клиентских приложений.
  • wal_level — Отвечает за количество информации записываемой в WAL
  • max_wal_senders — Отвечает за количество одновременно подключенных слейвов у мастера.
  • wal_keep_segments — 1 сегмент = 16 метров. Сколько сегментов будет указано хранить здесь, столько postgres сохранит прежде чем при добавлении следующего удалить самый старый сегмент.

Перезапускаем postgres

sudo systemctl restart postgresql

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

Останавливаем postgresql

sudo su postgres
service postgresql stop #система попросит ввести пароль вашей админской учетки 

Удаляем данные. Внимание!!! Главное не перепутать с мастером.

#будучи всё еще авторизованными под пользователем postgres
rm -R /var/lib/postgresql/10/main/ 

Для того чтобы инициализировать репликацию, необходимо скачать с сервера свежую копию данных. Иначе если разрыв данных будет слишком велик (больше чем доступно данных согласно wal_keep_segments), репликация попросту не запустится.

Закачиваем данные с мастер:

#будучи всё еще авторизованными под пользователем postgres pg_basebackup -P -R -X stream -c fast -h 192.168.0.1 -U replica -D /var/lib/postgresql/10/main/ 
service postgresql start #система попросит ввести пароль вашей админской учетки 

Примечание: Некоторые параметры после выполнения вышеуказанной команды можно отредактировать в файле /var/lib/postgresql/10/main/recovery.conf

  • standby_mode = ‘on’ — значит что сервер является резервным и после скачивания последнего WAL файла продолжит пытаться скачивать их используя данные из primary_conninfo
  • primary_conninfo — строка подключения слейва к мастеру

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

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

  • listen_address = ‘*’
  • hot_standby = on # режим только для чтения

Запускаем слайев:

#будучи всё еще авторизованными под пользователем postgres
service postgresql start 

Ссылки:

Дополнительные команды:

select pg_is_in_recovery(); - в каком режиме работает БД
select * from pg_stat_replication; - системное представление

Print Friendly, PDF & Email

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