Перейти к содержанию
+7 (800) 234-36-06 IT.encode@encode.one
Скачать в PDF

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

  1. Откройте файл postgresql.conf.
  2. Раскомментируйте параметры и установите значения:

    listen_addresses = '*'
    wal_level = logical
    max_replication_slots = 10
    max_wal_senders = 10
    
  3. Сохраните изменения.

2.2 Настройка pg_hba.conf

  1. Откройте файл pg_hba.conf, расположенный в том же каталоге.
  2. Замените строки:

    host    all             all             127.0.0.1/32    scram-sha-256
    host    replication     all             127.0.0.1/32    scram-sha-256
    

    на:

    host    all             all             0.0.0.0/0       scram-sha-256
    host    replication     all             0.0.0.0/0       scram-sha-256
    
  3. Сохраните изменения.

2.3 Перезапуск службы PostgreSQL

После внесения изменений перезапустите службу PostgreSQL.

Windows:

  1. Откройте Службы (services.msc).
  2. Найдите службу PostgreSQL.
  3. Нажмите Перезапустить.

Linux:

  1. Откройте окно Терминал.
  2. Выполните команду:

    sudo systemctl restart postgresql
    

3. Настройка репликационной машины (Replica)

3.1 Настройка postgresql.conf

  1. Откройте файл postgresql.conf.
  2. Раскомментируйте параметр и установите значение:

    listen_addresses = '*'
    
  3. Сохраните изменения.

3.2 Настройка pg_hba.conf

  1. Откройте файл pg_hba.conf, расположенный в том же каталоге.
  2. Замените строки:

    host    all             all             127.0.0.1/32    scram-sha-256
    host    replication     all             127.0.0.1/32    scram-sha-256
    

    на:

    host    all             all             0.0.0.0/0       scram-sha-256
    host    replication     all             0.0.0.0/0       scram-sha-256
    
  3. Сохраните изменения.

3.3 Перезапуск службы PostgreSQL

После внесения изменений перезапустите службу PostgreSQL.

Windows:

  1. Откройте Службы Win + R
  2. Ввести services.msc
  3. Найдите службу postgresql-x64-18
  4. Нажмите Перезапустить

Linux:

  1. Откройте окно Терминал.
  2. Выполните команду:

    sudo systemctl restart postgresql
    

3.4 Создайте пустую базу данных для реплики

Например: ETLR1

creating_a_new_replica1

Warning

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

creating_a_new_replica2

4. Настройка брандмауэра Windows

Выполните на обеих машинах — основной и резервной.

  1. Откройте Брандмауэр Защитника Windows.
  2. Перейдите в раздел Дополнительные параметры.
  3. Выберите Правила для входящих подключений.
  4. Нажмите Создать правило.
  5. Выберите тип правила Для порта.
  6. Укажите протокол TCP.
  7. Введите порт PostgreSQL (по умолчанию 5432 или 5445 или используемый в системе, например 5432 на основной машине или 5445 на репликационной машине).
  8. Выберите Разрешить подключение.
  9. Укажите необходимые профили.
  10. Задайте имя правилу, например PostgreSQL.
  11. Сохраните правило.

5. Проверка связи основного моноблока (Primary) с машины-реплики (Replica)

На машине-реплике откройте PowerShell и проверьте доступность PostgreSQL основного моноблока:

Test-NetConnection 123.168.3.123 -Port 5432

Ожидаемый результат:

TcpTestSucceeded : True

Если отображается False, проверьте адрес и порт основного моноблока, состояние службы PostgreSQL, значение listen_addresses и правило брандмауэра.

6. Настройка репликации в Encode Track Line на основном моноблоке (Primary)

  1. Откройте раздел Настройки → База данных: creating_a_new_replica3
  2. Перейдите на вкладку Репликация:

    creating_a_new_replica4

  3. Нажмите кнопку Добавить.

  4. Заполните параметры подключения к резервной базе данных:

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

    Пример данных: creating_a_new_replica5

  5. Нажмите Сохранить.

  6. Включите репликацию с помощью переключателя Управление.

    После успешного подключения реплика появится в таблице: creating_a_new_replica6

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: creating_a_new_replica7

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

В завершение создайте нового пользователя в ETL и убедитесь, что она появилась и в БД etl и в БД ETLR1:

(Primary) основной моноблок — 123.168.3.123, PostgreSQL на порту 5432, база etl: creating_a_new_replica9

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

6.4 Типовые проблемы и решения

Симптом Причина Решение
Реплика не появляется в таблице Неверные параметры подключения Проверьте IP-адрес, порт и учётные данные.
Пинг ✖ Порт PostgreSQL закрыт на брандмауэре Создайте правило брандмауэра для порта PostgreSQL (раздел 4).
Публикация ✖ Неверные параметры postgresql.conf на основной машине Проверьте wal_level, max_wal_senders, max_replication_slots и перезапустите службу.
Подписка ✖ Неверные разрешения в pg_hba.conf Проверьте разрешения на удалённые подключения в pg_hba.conf на обоих серверах.

7. Восстановление после выхода моноблока из строя

  1. Установите на новом моноблоке совместимые версии PostgreSQL
  2. Выполните настройки PostgreSQL из раздела 1
  3. Создайте на новом моноблоке пустую базу: etl creating_a_new_replica11

  4. В ETL открыть Настройки → База данных → Конфигурация.

  5. Добавить подключение к основной БД etl и сохранить конфигурацию. creating_a_new_replica3
  6. В ETL откройте Настройки → База данных → Репликация и нажмите «Восстановить».
  7. Укажите адрес, порт, базу, (например 345.168.3.345, PostgreSQL на порту 5445, база ETLR1), пользователя и пароль машины-реплики. creating_a_new_replica12
  8. Подтвердите восстановление нажав кнопку «Восстановить». Текущие данные базы etl будут заменены данными из ETLR1, после чего ETL перезапустится.
  9. После запуска проверьте наличие заданий и настроек.
  10. Откройте раздел Репликация и включите переключатель «Управление».
    creating_a_new_replica13 ETL заново создаст публикацию и подписку и продолжит передавать изменения из etl в ETLR1.

  11. Для проверки корректности репликации можно сравнить количество записей в основных таблицах, как показано в разделе 6.3