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 к клонированию/синхронизации, настройте исходный сервер следующим образом:
Настройте кластер баз данных для копирования экземпляра сервера.
Для использования режима PTRACK настройте копирование PTRACK.
Перед клонированием/синхронизацией экземпляра 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=число_потоков