Гид по технологиям

PostgreSQL 9.6 Master‑Slave репликация на CentOS 7 — настройка Hot standby

• 6 min read • Базы данных • Обновлено 21 Nov 2025
PostgreSQL 9.6 Репликация Master‑Slave на CentOS 7
PostgreSQL 9.6 Репликация Master‑Slave на CentOS 7

Краткий обзор

PostgreSQL (Postgres) — это свободная объектно-реляционная система управления базами данных с долгой историей активной разработки. В этой инструкции показано, как настроить master‑slave (Primary‑Standby) репликацию версии 9.6 на двух серверах CentOS 7 в режиме Hot standby (физическая стриминговая репликация). Цель — обеспечить доступность чтения с резервного сервера и непрерывность обслуживания при отказе мастера.

ВАЖНО: приведённые конфигурации ориентированы на учебную/операционную установку; в продакшене дополнительно необходима настройка мониторинга, резервного копирования, тестирования отказа и шифрования каналов.

Основные понятия (в одну строку)

  • WAL: журнал предзаписей (Write-Ahead Log) — последовательность изменений, которую реплика применяет для синхронизации.
  • Hot standby: режим на слейве, позволяющий только чтение из базы во время репликации.
  • pg_basebackup: утилита для физического бэкапа/клонирования данных мастера.

Что мы сделаем

  1. Установим PostgreSQL 9.6.
  2. Инициализируем и запустим сервис.
  3. Настроим firewalld.
  4. Сконфигурируем Master (Primary).
  5. Сконфигурируем Slave (Standby).
  6. Протестируем репликацию.

Предварительные требования

  • 1 сервер CentOS 7 — Master — права чтения/записи — IP: 10.0.15.10
  • 1 сервер CentOS 7 — Slave — только чтение — IP: 10.0.15.11
  • root (или sudo) доступ на обоих серверах
  • Открытые порты 5432 между хостами (или соответствующий маршрут/маршрутизация)

Шаг 1 — Установка PostgreSQL 9.6

Репозиторий CentOS по умолчанию может содержать устаревшую версию. Подключите официальный RPM-репозиторий PostgreSQL 9.6 и установите пакеты.

yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum -y install postgresql96-server postgresql96-contrib

Теперь PostgreSQL 9.6 установлен.

Шаг 2 — Инициализация, запуск и начальная настройка

Инициализируйте кластер и запустите сервис.

cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
systemctl start postgresql-9.6
systemctl enable postgresql-9.6

По умолчанию PostgreSQL слушает порт 5432. Убедитесь, что порт слушается:

netstat -plntu

Установка PostgreSQL на CentOS 7

Если netstat недоступен, установите net-tools:

yum -y install net-tools

Затем задайте пароль для системного пользователя postgres и его учётной записи в psql:

su - postgres
psql
\password postgres
Enter new password:

Установка пароля для пользователя postgres

Шаг 3 — Конфигурация firewalld

Запустите и включите firewalld, откройте сервис PostgreSQL:

systemctl start firewalld
systemctl enable firewalld
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

Проверьте правила:

firewall-cmd --list-all

Настройка firewall для PostgreSQL

ПРИМЕЧАНИЕ: шаги 1–3 выполните на обоих серверах (Master и Slave).

Шаг 4 — Настройка Master сервера

На мастере мы включим отправку WAL, включим архивацию и разрешим коннекты репликации с конкретных IP.

Откройте каталог данных и отредактируйте postgresql.conf:

cd /var/lib/pgsql/9.6/data
vim postgresql.conf

Внесите (раскомментируйте/измените) следующие параметры:

listen_addresses = '10.0.15.10'
wal_level = hot_standby
synchronous_commit = local
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
max_wal_senders = 2
wal_keep_segments = 10
synchronous_standby_names = 'pgslave01'

Пояснения:

  • listen_addresses: ограничивает интерфейс приёма подключений.
  • wal_level = hot_standby: нужен для стриминговой репликации и восстановления.
  • synchronous_commit = local: синхронизация на локальной стороне; баланс между производительностью и устойчивостью.
  • archive_mode и archive_command: включают архивацию WAL-файлов (на случай восстановления).

Создайте каталог архива и установите права:

mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/archive/

Отредактируйте pg_hba.conf и добавьте строки для репликации (в конец файла):

# Localhost
host    replication     replica          127.0.0.1/32            md5

# PostgreSQL Master IP address
host    replication     replica          10.0.15.10/32           md5

# PostgreSQL Slave IP address
host    replication     replica          10.0.15.11/32           md5

Сохраните изменения и перезапустите сервис:

systemctl restart postgresql-9.6

Перезапуск PostgreSQL на мастере

Создайте пользователя для репликации (replica):

su - postgres
createuser --replication -P replica
Enter New Password:

Задайте пароль (в примере: aqwe123@). Права пользователя replica ограничены опцией –replication.

Шаг 5 — Настройка Slave сервера

На слейве мы заменим каталог data копией с мастера и настроим hot_standby.

Остановите PostgreSQL на слейве:

systemctl stop postgresql-9.6

Сделайте резервную копию текущего data и подготовьте пустой каталог:

cd /var/lib/pgsql/9.6/
mv data data-backup
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/

Сделайте физическую базовую копию с мастера от имени postgres:

su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Password:

Подождите окончания передачи. На выходе получится точная копия данных мастера.

Процесс pg_basebackup на слейве

Отредактируйте postgresql.conf на слейве:

cd /var/lib/pgsql/9.6/data/
vim postgresql.conf

Измените listen_addresses и включите hot_standby:

listen_addresses = '10.0.15.11'
hot_standby = on

Создайте файл recovery.conf в каталоге data с такими параметрами:

vim recovery.conf

Вставьте:

standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=aqwe123@ application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'

ПРИМЕЧАНИЕ: в primary_conninfo замените пароль и другие параметры на значения вашей среды.

Защитите recovery.conf и установите владельца:

chmod 600 recovery.conf
chown postgres:postgres recovery.conf

Запустите PostgreSQL на слейве:

systemctl start postgresql-9.6

Проверьте, что слушает адрес 10.0.15.11:

netstat -plntu

Проверка работы PostgreSQL на слейве

Шаг 6 — Тестирование репликации

На мастере проверьте состояние репликации:

su - postgres
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"

Ожидаемое состояние: state = streaming, sync_state = sync (если синхронная репликация) или async для асинхронной.

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

Создайте тестовую таблицу на мастере и добавьте строки:

su - postgres
psql
CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');

Создание таблицы на мастере

На слейве подключитесь к psql и проверьте данные:

su - postgres
psql
select * from replica_test;

Проверка данных на слейве

Вы увидите, что записи реплицировались.

Дополнительный тест: попытка записи на слейве должна завершиться ошибкой:

INSERT INTO replica_test VALUES ('this is SLAVE');

Ожидаемый результат: нельзя выполнить INSERT (слейв в режиме только для чтения).

Если всё успешно — настройка репликации завершена.

Дополнительные тесты и валидация

  • Проверка задержки репликации: используйте функции pg_stat_replication и сравнивайте текущую позицию WAL (pg_current_wal_lsn()) с позиции на слейве.
  • Проверка архивации WAL: убедитесь, что файлы появляются в /var/lib/pgsql/9.6/archive/.
  • Тест отказа: смоделируйте остановку мастера и выполните failover с помощью создания trigger_file или ручного промоушена.

Процедура планового переключения и отката (SOP)

  1. Подготовка: убедитесь, что слейв в состоянии streaming и актуален.
  2. Остановите прием новых записей на мастере (режим maintenance).
  3. На слейве создайте файл trigger_file (или выполните pg_ctl promote):
touch /tmp/postgresql.trigger.5432
  1. После промоушена слейв станет мастером — переключите приложение на новый мастер.
  2. Откат: восстановите старый мастер из архива или создайте новый слейв от текущего мастера.

Критерии приёмки: слейв должен быть в состоянии streaming, данные тестовой таблицы совпадают, клиенты могут читать с реплики.

Безопасность и hardening (рекомендуемые шаги)

  • Ограничьте доступ к порту 5432 на уровне фаервола только между доверенными хостами.
  • Используйте шифрование подключения (SSL) между мастером и слейвом для защиты WAL‑трафика.
  • Ограничьте привилегии у пользователя replica и храните пароли в защищённых местах (Vault/Ansible Vault).
  • Регулярно проверяйте целостность архивов WAL и тестируйте восстановление из архива.

Альтернативные подходы и когда этот метод не подходит

  • Логическая репликация / репликация на уровне строк (logical replication) полезна для частичных реплик, фильтрации или репликации между разными версиями; в PostgreSQL 9.6 логическая встроенная репликация ограничена, существуют расширения вроде pglogical.
  • Для многомастерных сценариев используйте решения типа BDR, Bucardo или сторонние кластерные решения.
  • Этот метод не подходит, если вы хотите реплицировать только подмножество таблиц или выполнять трансформации в пути.

Ментальные модели и эвристики

  • WAL → Передача журналов изменений; стриминг — отправка WAL в реальном времени.
  • Master = источник истины; Slave = копия для чтения и резервирования.
  • Архивация WAL = страховка от длительных репликационных разрывов.

Роль‑ориентированные чек‑листы

  • DBA:
    • Проверить параметры postgresql.conf и pg_hba.conf.
    • Убедиться в наличии архивации WAL.
    • Настроить мониторинг (pg_stat_replication, check replication lag).
  • Системный администратор:
    • Настроить сетевые правила / firewall.
    • Обеспечить шифрование каналов и безопасность ОС.
  • Разработчик/DevOps:
    • Тестировать поведение приложения при failover.
    • Подготовить сценарии переключения и отката.

Тестовые случаи и критерии приёмки

  • После вставки N строк на мастере все строки появляются на слейве в течение допустимого окна задержки.
  • Попытка записи на слейве завершается ошибкой.
  • После перезапуска мастера/слейва репликация автоматически восстанавливается.

Совместимость и миграция

  • На CentOS 7 инструкции применимы к пакетам PostgreSQL, собранным для RHEL 7.
  • При миграции между мажорными версиями PostgreSQL рекомендуется делать dump/restore или использовать pg_upgrade; физическая репликация между мажорными версиями не поддерживается.

Быстрый справочник (cheat sheet)

  • Инициализация: ./postgresql96-setup initdb
  • Бэкап для слейва: pg_basebackup -h -U replica -D /var/lib/pgsql/9.6/data -P –xlog
  • Перезапуск: systemctl restart postgresql-9.6
  • Проверка реплики: psql -c “select * from pg_stat_replication;”

Краткое резюме

  • Мы установили PostgreSQL 9.6 на CentOS 7, включили стриминговую репликацию в режиме Hot standby и проверили репликацию данных.
  • Настройка включает изменение postgresql.conf, добавление правил в pg_hba.conf, создание пользователя репликации и использование pg_basebackup для клонирования.
  • Для продакшена добавьте SSL, мониторинг, тесты failover и продумайте политику архивирования WAL.

КОНЕЦ СТАТЬИ.

References

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро