Тематические термины: PostgreSQL .
Репликация PostgreSQL представляет из себя способ реализации отказоустойчивого кластера. Инструкция написана на примере PostgreSQL 14/13/12/11/10/9.6, также она будет работать для PostgreSQL 9.2 (все нюансы будут отмечены отдельными комментариями).
В данном примере мы настроим потоковую (streaming) репликацию. Другой тип репликации (логическая) добавлена в PostgreSQL 10. Она позволяет реплицировать разные базы данных и таблицы на разные реплики.
Также, мы будем применять асинхронную репликацию — это вид репликации, при котором запросы выполняются сначала на мастере, затем попадают в журнал операций (WAL) и только после этого — на slave. При синхронной репликации запросы сначала попадают в WAL — после в мастер и слейв.
Используемые в данном руководстве команды, применимы для операционных систем Linux. Если Postgre работает под Windows, данную инструкцию можно использовать как шпаргалку для настройки конфигурационных файлов СУБД.
Подготовка сервера
Требования к PostgreSQL
Настройка брандмауэра
Настройка или отключение SELinux
Настройка сервера Master
Создание пользователя для репликации
Настройка конфигурационных файлов postgresql
Настройка сервера Slave
Выполнение проверки работы репликации
Просмотр статуса
С помощью запроса на создание базы
Дополнительная информация
Для начала, готовим наши серверы к настройке кластера.
На всех серверах баз данных должна быть установлена одна и та же версия PostgreSQL. Также, все серверы должны иметь одну и ту же архитектуру процессора.
Вот пример установки сервера PostgreSQL на CentOS 7 .
При использовании брандмауэра, необходимо открыть TCP-порт 5432 — он используется сервером postgre.
а) Если управление выполняется с помощью Firewalld:
firewall-cmd —permanent —add-port=5432/tcp
firewall-cmd —reload
б) Если используем Iptables:
iptables -A INPUT -p tcp —dport 5432 -j ACCEPT
в) Если используем UFW:
ufw allow 5432/tcp
Если активирована система безопасности SELinux (по умолчанию в системах Red Hat / CentOS / Fedora), отключаем ее:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
Если необходимо, чтобы SELinux работал, настраиваем его .
В данной статье мы будем настраивать серверы с IP-адресами 192.168.1.10 (первичный или master) и 192.168.1.11 (вторичный или slave).
Переходим на сервер, с которого будем реплицировать данные (мастер) и выполняем следующие действия.
Входим в систему под пользователем postgres:
su — postgres
Создаем нового пользователя для репликации:
createuser —replication -P repluser
* система запросит пароль — его нужно придумать и ввести дважды. В данном примере мы создаем пользователя repluser .
Выходим из оболочки пользователя postgres:
exit
Смотрим расположение конфигурационного файла postgresql.conf командой:
su — postgres -c «psql -c ‘SHOW config_file;'»
В моем случае система вернула строку:
/etc/postgresql/9.6/main/postgresql.conf
* конфигурационный файл находится по пути /etc/postgresql/9.6/main/postgresql.conf .
Открываем конфигурационный файл postgresql.conf .
vi /etc/postgresql/9.6/main/postgresql.conf
* мы открываем файл, который получили sql-командой SHOW config_file; .
Редактируем следующие параметры:
listen_addresses = ‘localhost, 192.168.1.10’
wal_level = replica
max_wal_senders = 2
max_replication_slots = 2
hot_standby = on
hot_standby_feedback = on
* где
Открываем конфигурационный файл pg_hba.conf — он находитсяч в том же каталоге, что и файл postgresql.conf:
vi /etc/postgresql/9.6/main/pg_hba.conf
Добавляем следующие строки:
host replication repluser 127.0.0.1/32 md5
host replication repluser 192.168.1.10/32 md5
host replication repluser 192.168.1.11/32 md5
* данной настройкой мы разрешаем подключение к базе данных replication пользователю repluser с локального сервера ( localhost и 192.168.1.10 ) и сервера 192.168.1.11 .
Перезапускаем службу postgresql:
systemctl restart postgresql
* обратите внимание, что название для сервиса в системах Linux может различаться.
Смотрим путь до конфигурационного файла postgresql:
su — postgres -c «psql -c ‘SHOW data_directory;'»
В моем случае путь был:
/var/lib/pgsql/9.6/data
Также смотрим путь до конфигурационного файла postgresql.conf (нам это понадобиться ниже):
su — postgres -c «psql -c ‘SHOW config_file;'»
Останавливаем сервис postgresql:
systemctl stop postgresql
На всякий случай, создаем архив базы:
tar -czvf /tmp/data_pgsql.tar.gz /var/lib/pgsql/9.6/data
* в данном примере мы сохраним все содержимое каталога /var/lib/pgsql/9.6/data в виде архива /tmp/data_pgsql.tar.gz .
Удаляем содержимое каталога с данными:
rm -rf /var/lib/pgsql/9.6/data/*
И реплицируем данные с master сервера.
а) Если у нас postgresql 9:
su -u postgres -с «pg_basebackup -h 192.168.1.10 -U repluser -D /var/lib/pgsql/9.6/data —xlog-method=stream —write-recovery-conf»
* где 192.168.1.10 — IP-адрес мастера; /var/lib/pgsql/9.6/data — путь до каталога с данными.
б) Если у нас postgresql 10:
su — postgres -c «pg_basebackup —host=192.168.1.10 —username=repluser —pgdata=/var/lib/pgsql/10/data —wal-method=stream —write-recovery-conf»
* где 192.168.1.10 — IP-адрес мастера; /var/lib/pgsql/10/data — путь до каталога с данными.
После ввода команды система запросит пароль для созданной ранее учетной записи repluser — вводим его. Начнется процесс клонирования данных.
Открываем конфигурационный файл postgresql.conf на слейве:
vi /etc/postgresql/9.6/main/postgresql.conf
И редактируем следующие параметры:
listen_addresses = ‘localhost, 192.168.1.11’
* где 192.168.1.11 — IP-адрес нашего вторичного сервера.
Снова запускаем сервис postgresql:
systemctl start postgresql
Статус работы репликации можно посмотреть следующими командами.
На мастере:
=# select * from pg_stat_replication;
На слейве:
=# select * from pg_stat_wal_receiver;
На мастере заходим в командную оболочку Postgre:
su — postgres -c «psql»
Создаем новую базу данных:
=# CREATE DATABASE repltest ENCODING=’UTF8′;
Теперь на вторичном сервере смотрим список баз:
su — postgres -c «psql»
=# l
Мы должны увидеть среди баз ту, которую создали на первичном сервере:
Name | Owner | Encoding | Collate | Ctype | Access
————+———-+———-+————-+————-+——————
…
repltest | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 |
…
Дополнительная информация:
1. Настройка логической репликации PostgreSQL .
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…