3.10. Клонирование и синхронизация экземпляра Postgres Pro #

В pg_probackup3 реализована команда catchup, которая позволяет создать копию экземпляра сервера Postgres Pro напрямую, не используя каталог резервных копий. Эта команда может быть полезна:

  • Для добавления нового ведомого сервера.

    Если каталог данных целевого экземпляра пуст, команда catchup работает аналогично команде backup в режиме PRO, но может выполняться быстрее при запуске в параллельном режиме.

    Примечание

    Операции catchup на данный момент поддерживаются только в режиме PRO и не требуют прямого доступа к PGDATA.

  • Для синхронизации отставшего ведомого сервера с ведущим.

    При активной записи на ведущем сервере реплики могут не успевать воспроизводить WAL с достаточной скоростью и в результате отставать. Обычно в этом случае создаётся новая реплика, а для этого нужно передать и сохранить на диске большой объём данных. Команда catchup напрямую переносит различия с ведущего сервера, что позволяет намного быстрее обновить данные на уже существующей реплике.

Особенности и ограничения catchup:

  • Не требуется каталог резервных копий.

  • Копирование внешних каталогов не поддерживается.

  • Нет поддержки удалённого режима.

  • Одновременно с catchup нельзя выполнять команды DDL CREATE TABLESPACE/DROP TABLESPACE.

  • При синхронизации catchup берёт файлы конфигурации, такие как postgresql.conf, postgresql.auto.conf или pg_hba.conf, с исходного сервера и заменяет ими соответствующие файлы на целевом сервере. Чтобы оставить файлы конфигурации без изменений, используйте параметр --exclude-path.

Чтобы подготовить экземпляр Postgres Pro к клонированию/синхронизации, настройте исходный сервер следующим образом:

Перед клонированием/синхронизацией экземпляра Postgres Pro убедитесь, что исходный сервер запущен и принимает подключения. Чтобы клонировать/синхронизировать экземпляр Postgres Pro, в системе с целевым сервером выполните команду catchup:

pg_probackup3 catchup -b режим_синхронизации --destination-pgdata=путь_к_целевому_каталогу_данных --stream [параметры_подключения]

Здесь режим_синхронизации может принимать следующие значения:

  • FULL — создаётся полная копия экземпляра Postgres Pro, для этого целевой каталог данных БД должен быть пустым.

  • DELTA — считываются все файлы данных в каталоге данных и создаётся инкрементальная копия для страниц, изменённых с момента остановки целевого экземпляра.

  • PTRACK — изменения в страницах отслеживаются на лету, считываются и копируются только страницы, изменённые с точки расхождения исходного и целевого экземпляров.

Указав параметр --stream, можно задать режим STREAM, при котором все необходимые файлы WAL передаются с исходного сервера по протоколу репликации.

Для подключения к исходному кластеру базы данных можно использовать параметры connection_options.

Если в исходной базе данных есть табличные пространства, которые должны располагаться в других каталогах в целевой системе, задайте также параметр --tablespace-mapping:

pg_probackup3 catchup -b режим_синхронизации --destination-pgdata=путь_к_целевому_каталогу_данных --stream --tablespace-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ

Чтобы операция catchup выполнялась в несколько параллельных потоков, задайте число потоков с помощью параметра --threads или --num-write-threads и --num-validate-threads:

pg_probackup3 catchup -b режим_синхронизации --destination-pgdata=путь_к_целевому_каталогу_данных --stream --threads=число_потоков