Настройка репликации базы данных PostgreSQL
Руководство по настройке логической репликации PostgreSQL между основным и резервным серверами и подключению репликации в ENCODE Track Line 2.
Технические данные
| Параметр | Значение |
|---|---|
| Программное обеспечение | PostgreSQL 16+ |
| ОС | Windows, Linux |
| Порт по умолчанию | 5445 или 5432 |
Предварительные требования
- На обоих серверах установлена одинаковая версия PostgreSQL не ниже 16.
- Настроен доступ к обоим серверам с правами администратора.
- Порт PostgreSQL открыт на брандмауэре (см. раздел 4).
В примерах:
- основной моноблок (Primary) —
123.168.3.123, PostgreSQL на порту5432, базаetl; - машина-реплика (Replica) —
345.168.3.345, PostgreSQL на порту5445, базаETLR1.
При настройке необходимо использовать фактические IP-адреса, порты, имена баз данных и учётные данные.
1. Подготовка PostgreSQL
Перед настройкой репликации подготовьте PostgreSQL на обеих машинах: основной и резервной. Версии PostgreSQL на обеих машинах должны совпадать.
Путь к конфигурационным файлам зависит от версии PostgreSQL и операционной системы. На Windows путь имеет вид:
C:\Program Files\PostgreSQL\<версия>\data
Например:
для PostgreSQL 18: C:\Program Files\PostgreSQL\18\data
для PostgreSQL 16: C:\Program Files\PostgreSQL\16\data
2. Настройка основной машины (Primary)
2.1 Настройка postgresql.conf
- Откройте файл
postgresql.conf. -
Раскомментируйте параметры и установите значения:
-
Сохраните изменения.
2.2 Настройка pg_hba.conf
- Откройте файл
pg_hba.conf, расположенный в том же каталоге. -
Замените строки:
на:
-
Сохраните изменения.
2.3 Перезапуск службы PostgreSQL
После внесения изменений перезапустите службу PostgreSQL.
Windows:
- Откройте Службы (
services.msc). - Найдите службу PostgreSQL.
- Нажмите Перезапустить.
Linux:
- Откройте окно Терминал.
-
Выполните команду:
3. Настройка репликационной машины (Replica)
3.1 Настройка postgresql.conf
- Откройте файл
postgresql.conf. -
Раскомментируйте параметр и установите значение:
-
Сохраните изменения.
3.2 Настройка pg_hba.conf
- Откройте файл
pg_hba.conf, расположенный в том же каталоге. -
Замените строки:
на:
-
Сохраните изменения.
3.3 Перезапуск службы PostgreSQL
После внесения изменений перезапустите службу PostgreSQL.
Windows:
- Откройте Службы Win + R
- Ввести
services.msc - Найдите службу postgresql-x64-18
- Нажмите Перезапустить
Linux:
- Откройте окно Терминал.
-
Выполните команду:
3.4 Создайте пустую базу данных для реплики
Например: ETLR1

Warning
Не используйте дефис в имени базы: при проверке имя ETL-R1 вызвало ошибку формирования запроса в ETL.

4. Настройка брандмауэра Windows
Выполните на обеих машинах — основной и резервной.
- Откройте Брандмауэр Защитника Windows.
- Перейдите в раздел Дополнительные параметры.
- Выберите Правила для входящих подключений.
- Нажмите Создать правило.
- Выберите тип правила Для порта.
- Укажите протокол TCP.
- Введите порт PostgreSQL (по умолчанию
5432или5445или используемый в системе, например5432на основной машине или5445на репликационной машине). - Выберите Разрешить подключение.
- Укажите необходимые профили.
- Задайте имя правилу, например
PostgreSQL. - Сохраните правило.
5. Проверка связи основного моноблока (Primary) с машины-реплики (Replica)
На машине-реплике откройте PowerShell и проверьте доступность PostgreSQL основного моноблока:
Ожидаемый результат:
Если отображается False, проверьте адрес и порт основного моноблока, состояние службы PostgreSQL, значение listen_addresses и правило брандмауэра.
6. Настройка репликации в Encode Track Line на основном моноблоке (Primary)
- Откройте раздел Настройки → База данных:

-
Перейдите на вкладку Репликация:

-
Нажмите кнопку Добавить.
-
Заполните параметры подключения к резервной базе данных:
Параметр Описание Наименование произвольное название, например Резервная БДАдрес IP-адрес машины-реплики, например: 345.168.3.345Порт Порт PostgreSQL на резервном сервере, например 5445Имя базы данных Название базы данных, например: ETLR1Пользователь Имя пользователя, например: postgresПароль Пароль пользователя, например: postgresПример данных:

-
Нажмите Сохранить.
-
Включите репликацию с помощью переключателя Управление.
После успешного подключения реплика появится в таблице:

6.1 Элементы вкладки «Репликация»
| Элемент | Описание |
|---|---|
| Восстановить | Создаёт дамп данных из реплики (ETLR1) и пересоздаёт основную базу данных (etl). |
| Пинг | ✔ — сервер доступен; ✖ — сервер недоступен. |
| Публикация | ✔ — основная база данных готова передавать изменения; ✖ — соединение отсутствует. |
| Подписка / Отставание | Состояние подписки и задержка передачи изменений. ETL2 управляет подпиской автоматически. |
| Управление | Включает или отключает репликацию. При отключении сохранённая настройка реплики не удаляется. |
6.2 Проверка настройки
После завершения настройки убедитесь, что:
- реплика доступна (Пинг ✔);
- соединение между основной базой данных и репликой установлено (Публикация ✔);
- подписка успешно создана (Подписка ✔);
- значение отставания отсутствует (
0.00 MB) либо минимально. - репликация включена;
6.3 Проверка записей репликации
Для контроля можно сравнить количество записей в основных таблицах:
SELECT 'stations' AS table_name, COUNT(*) AS rows_count
FROM public.stations
UNION ALL
SELECT 'tasks', COUNT(*)
FROM public.tasks
UNION ALL
SELECT 'archive_task_codes', COUNT(*)
FROM public.archive_task_codes
UNION ALL
SELECT 'users', COUNT(*)
FROM public.users
ORDER BY table_name;
(Primary) основной моноблок — 123.168.3.123, PostgreSQL на порту 5432, база etl:

(Replica) машина-реплика — 345.168.3.345, PostgreSQL на порту 5445, база ETLR1:

В завершение создайте нового пользователя в ETL и убедитесь, что она появилась и в БД etl и в БД ETLR1:
(Primary) основной моноблок — 123.168.3.123, PostgreSQL на порту 5432, база etl:

(Replica) машина-реплика — 345.168.3.345, PostgreSQL на порту 5445, база ETLR1:

6.4 Типовые проблемы и решения
| Симптом | Причина | Решение |
|---|---|---|
| Реплика не появляется в таблице | Неверные параметры подключения | Проверьте IP-адрес, порт и учётные данные. |
| Пинг ✖ | Порт PostgreSQL закрыт на брандмауэре | Создайте правило брандмауэра для порта PostgreSQL (раздел 4). |
| Публикация ✖ | Неверные параметры postgresql.conf на основной машине |
Проверьте wal_level, max_wal_senders, max_replication_slots и перезапустите службу. |
| Подписка ✖ | Неверные разрешения в pg_hba.conf |
Проверьте разрешения на удалённые подключения в pg_hba.conf на обоих серверах. |
7. Восстановление после выхода моноблока из строя
- Установите на новом моноблоке совместимые версии PostgreSQL
- Выполните настройки PostgreSQL из раздела 1
-
Создайте на новом моноблоке пустую базу:
etl
-
В ETL открыть Настройки → База данных → Конфигурация.
- Добавить подключение к основной БД
etlи сохранить конфигурацию.
- В ETL откройте Настройки → База данных → Репликация и нажмите «Восстановить».
- Укажите адрес, порт, базу, (например
345.168.3.345, PostgreSQL на порту5445, базаETLR1), пользователя и пароль машины-реплики.
- Подтвердите восстановление нажав кнопку «Восстановить». Текущие данные базы
etlбудут заменены данными изETLR1, после чего ETL перезапустится. - После запуска проверьте наличие заданий и настроек.
-
Откройте раздел Репликация и включите переключатель «Управление».
ETL заново создаст публикацию и подписку и продолжит передавать изменения из etlвETLR1. -
Для проверки корректности репликации можно сравнить количество записей в основных таблицах, как показано в разделе 6.3