Catchup: синхронизация реплики с основным узлом
Предусловия
- Утилита copywala установлена на всех узлах кластера (установка на узлах-репликах необходима для возможности работы catchup при смене ролей между узлами).
- На репликах должна существовать или быть создана целевая директория для данных (
PGDATA). Путь к этой директории используется в обязательном флаге--datadirпри вызове командыcopywala catchup send. - В конфигурационном файле
copywala.yamlосновного узла и узлов-реплик заданы значения для параметров в секцииcatchup_policy.
Шаги сценария
-
Пользователь устанавливает на всех узлах кластера:
- Pangolin Manager;
- утилиту copywala.
-
Пользователь на всех узлах кластера устанавливает расширение
pgcopywala(позволяет выполнять команды copywala через протокол PostgreSQL). -
Пользователь заполняет конфигурационный файл Pangolin Manager (по умолчанию
/etc/pangolin-manager/postgres.yml) следующим образом:postgresql: # корневая секция postgres
create_replica_methods:
- copywala
copywala:
command: copywala catchup receive --start_master_runner
no_params: false -
Пользователь запускает кластер и убеждается, что все узлы находятся в рабочем состоянии.
-
Пользователь на реплике выполняет команду запуска синхронизации.
-
Пользователь дожидается завершения синхронизации.
Альтернативный сценарий. Выполнение catchup в «ручном режиме» (без использования Pangolin Manager)
-
Пользователь останавливает узел-реплику (реплики).
-
Пользователь запускает процесс получения данных с основного узла. Для этого на узле-реплике выполняет команду
copywala catchup receive.Справка по команде
copywala catchup receiveОписание:
Запускает процесс получения и синхронизации данных с основного (primary) узла на узле-реплике. Команда выполняется на хосте реплики.
Синтаксис:
copywala catchup receive [flags]Обязательные параметры:
Флаг Описание --datadir <path_to_pgdata>Путь к директории данных ( PGDATA) на узле-реплике--connstring <string>Строка подключения к основному серверу БД. Пример: host=master-host port=5432 user=postgres dbname=postgres--role <role>Роль текущего сервера. Укажите значение replicaОпциональные параметры:
[flags]– доступны следующие флаги:Флаг Описание -h|--helpПоказать справку по команде -c|--config <path to copywala config>Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml--scopeИмя кластера на котором будет запускаться команда -s|--start_master_runnerАвтоматически запускать отправку данных с основного узла с помощью расширения pgcopywala(вызовcopywala catchup sendв таком случае происходит автоматически, а не в ручную). При использовании данного флага убедитесь, что на primary-узле установлено расширениеpgcopywalaВажноЕсли команда
copywala catchup receiveвызывается с флагом-s|--start_master_runner, шаг 3 выполнять не требуется, так как он будет выполнен автоматически.Перед использованием флага
-s|--start_master_runnerубедитесь, что на primary-узле установлено расширениеpgcopywala, которое позволяет автоматически выполнять командуcopywala catchup sendчерез протокол PostgreSQL.В результате вызова
copywala catchup receiveс флагом-s|--start_master_runnerбудут выведены сообщения (пример вывода):2026-05-20 13:35:17.962 [114] INF start catchup for pgdata path: /pgdata/data/
2026-05-20 13:46:45.758 [112] INF run catchup on master
2026-05-20 13:46:45.758 [112] INF start sync files via pgcopywala extension
... -
Пользователь запускает передачу данных на реплику (реплики) командой
copywala catchup send <replica_addresses>.Справка по команде
copywala catchup sendОписание:
Команда используется для передачи данных с основного сервера (primary) на реплику. Она применяется при создании новых реплик, а также при восстановлении существующих, если данные на реплике устарели и требуют синхронизации с основным сервером. Команду необходимо выполнять на основном узле.
Синтаксис:
copywala catchup send <replica_addresses> [flags]Обязательные параметры:
<replica_addresses>– список адресов реплик в форматеhost:port, разделенных запятой, на которые будут отправляться данные с основного сервера.Опциональные параметры:
[flags]– доступны следующие флаги:Флаг Описание -h|--helpПоказать справку по команде -c|--config <path to copywala config>Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yamlВажноДанный шаг опционален и требует выполнения, если на шаге 2 команда
copywala catchup receiveбыла вызвана без флага-s|--start_master_runner.Пользователь дожидается выполнения синхронизации реплики.
-
Пользователь выполняет необходимые действия по подготовке для запуска узла-реплики.
Исключительные сценарии
Будет выведено соответствующее сообщение для случаев:
- Не удалось установить подключение к основному узлу.
- Не удалось установить подключение к узлу-реплике.
- Закончилось место на диске.
- Возникла ошибка при создании слота репликации.
- На основном узле отсутствует расширение
pgcopywala.