F.49. pgpro_bindump — модуль протокола репликации для резервного копирования и восстановления #
pgpro_bindump — это модуль, предоставляющий дополнительные команды для протокола репликации Postgres Pro, в частности для использования с утилитой pg_probackup3. pgpro_bindump имеет следующие преимущества:
Упрощённая связь с сервером. Для подключения к серверу баз данных pgpro_bindump не требует протокола SSH и связанных с ним настроек.
Интегрированная передача WAL. Файлы WAL передаются вместе с файлами данных, что снижает риск потери информации при резервном копировании.
Оптимизированное хранение. Файлы копируются не в исходном виде, а архивируются в собственном формате pg_probackup3 —
CBOR(RFC 8949 Concise Binary Object Representation, Сжатое представление двоичных объектов), что повышает эффективность хранения.
F.49.1. Архитектура #
Для обработки подключений от внешних приложений создаётся выделенный обслуживающий процесс. Для отправки запросов к этому процессу можно использовать утилиту pg_probackup3 или собственное приложение.
При необходимости можно устанавливать несколько соединений для одного приложения.
Поскольку модуль pgpro_bindump имеет прямой доступ к файлам базы данных, дополнительных разрешений не требуется.
Приложение pgpro_bindump использует библиотеку libpgprobackup вместе со встроенным модулем кодирования для передачи данных в приложение.
Плагин walsender_plugin_libraries упрощает процесс добавления и использования новых команд репликации, включая пользовательские.
F.49.2. Ограничения и требования #
В настоящее время pgpro_bindump имеет следующие ограничения и требования:
Для работы pgpro_bindump требуются
libpgprobackup.soиlibpb3_encoder.so.
F.49.3. Установка и настройка #
Модуль pgpro_bindump входит в состав Postgres Pro как часть пакета postgrespro-ent-16-contrib (подробные инструкции по установке приведены в Главе 17). После установки Postgres Pro выполните шаги ниже.
Задайте следующие параметры в файле
postgresql.conf:shared_preload_libraries = 'pgpro_bindump' wal_level = 'replica' # or 'logical' walsender_plugin_libraries = 'pgpro_bindump'
Перезапустите экземпляр Postgres Pro.
F.49.4. Команды репликации #
Модуль pgpro_bindump поддерживает следующие команды репликации:
just-noop— команда-заглушка, не выполняющая никаких действий.start_backup— запускает процесс резервного копирования.copy_files— копирует файлы в форматеCBOR.stop_backup— останавливает процесс резервного копирования.
Резервное копирование выполняется в режиме PRO — расширенном режиме источника данных, включающем все доступные оптимизации и улучшения, в том числе проприетарный протокол репликации и специализированные команды репликации.
Для отправки команд из пользовательского приложения в pgpro_bindump и получения приложением выходных данных из pgpro_bindump используйте libpq.
Примечание
Для работы требуется активное подключение к работающему серверу Postgres Pro.
F.49.4.1. start_backup #
start_backup LABELметка, INCR_MODEинкрементальный_режим, START_LSNначальный_lsn, TRANSFER_MODEрежим_передачи, [TRANSFER_BUFFER_SIZEразмер_буфера]
Запускает процесс резервного копирования. Передаёт приложению следующие данные:
start_lsn— LSN на момент начала резервного копирования.start_tli— идентификатор линии времени на момент начала резервного копирования.min_xid— минимальный идентификатор транзакции на момент начала резервного копирования.min_multixact— минимальный идентификатор мультитранзакции на момент начала резервного копирования.tablespace_list— список табличных пространств, включённых в резервную копию.database_list— список баз данных, включённых в резервную копию.
LABELметкаИмя резервной копии.
INCR_MODEинкрементальный_режимТип инкрементального копирования. Допустимые значения:
PTRACK,DELTA.START_LSNначальный_lsnЗначение типа
XLogRecPtr, представляющее LSN на момент начала резервного копирования.TRANSFER_MODEрежим_передачиСпособ передачи данных с сервера в приложение. Возможные значения:
raw— данные передаются в несжатом виде блоками произвольного размера.packed— данные передаются в упакованном виде блоками по 128 КБ с общим заголовком.
packed— значение по умолчанию.TRANSFER_BUFFER_SIZEразмер_буфераЧисловое значение, определяющее размер буфера. Единственное возможное значение — значение по умолчанию: 131072 (128 КБ).
F.49.4.2. copy_files #
copy_files VERIFY_CHECKSUMS [TRUE | FALSE], COMPRESS_ALGалгоритм_сжатия, COMPRESS_LVLуровень_сжатия, TRANSFER_MODEрежим_передачи, [INCR_MODEинкрементальный_режим], [START_LSNначальный_lsn], [TRANSFER_BUFFER_SIZEразмер_буфера], [WORKER_INFOчисло_процессов:ид_процесса]
Передаёт блоки файлов данных и файлов WAL, упакованные в формате CBOR.
VERIFY_CHECKSUMSЛогическое значение (
trueилиfalse), определяющее необходимость проверки контрольных сумм.COMPRESS_ALGалгоритм_сжатияИспользуемый алгоритм сжатия. Допустимые значения:
zlib,zstd,lz4,none.COMPRESS_LVLуровень_сжатияУровень сжатия. Возможные значения: 1, 2, 3, 4, 5.
TRANSFER_MODEрежим_передачиСпособ передачи данных с сервера в приложение. Возможные значения:
raw— данные передаются в несжатом виде блоками произвольного размера.packed— данные передаются в упакованном виде блоками по 128 КБ с общим заголовком.
packed— значение по умолчанию.INCR_MODEинкрементальный_режимТип инкрементального копирования. Допустимые значения:
PTRACK,DELTA.START_LSNначальный_lsnЗначение типа
XLogRecPtr, представляющее LSN на момент начала резервного копирования.TRANSFER_BUFFER_SIZEразмер_буфераЧисловое значение, определяющее размер буфера. Единственное возможное значение — значение по умолчанию: 131072 (128 КБ).
WORKER_INFOчисло_процессов:ид_процессаКоличество процессов и идентификатор процессора.
F.49.4.3. stop_backup #
stop_backup STREAM [TRUE | FALSE], COMPRESS_ALGалгоритм_сжатия, COMPRESS_LVLуровень_сжатия, [EXTERNALSвнешние_каталоги] [TRANSFER_BUFFER_SIZEразмер_буфера], [TRANSFER_MODEрежим_передачи]
Завершает процесс копирования и закрывает текущее соединение. Отправляет в приложение следующие данные:
stop_lsn— LSN на момент завершения резервного копирования.stop_tli— идентификатор линии времени на момент завершения резервного копирования.Файл
backup.control.Набор файлов WAL (только при включённой передаче WAL).
STREAMЛогическое значение (
trueилиfalse), определяющее, включена ли потоковая передача WAL.COMPRESS_ALGалгоритм_сжатияИспользуемый алгоритм сжатия. Допустимые значения:
zlib,zstd,lz4,none.COMPRESS_LVLуровень_сжатияУровень сжатия. Возможные значения: 1, 2, 3, 4, 5.
EXTERNALSвнешние_каталогиСписок внешних каталогов.
TRANSFER_BUFFER_SIZEразмер_буфераЧисловое значение, определяющее размер буфера. Единственное возможное значение — значение по умолчанию: 131072 (128 КБ).
TRANSFER_MODEрежим_передачиСпособ передачи данных с сервера в приложение. Возможные значения:
raw— данные передаются в несжатом виде блоками произвольного размера.packed— данные передаются в упакованном виде блоками по 128 КБ с общим заголовком.
packed— значение по умолчанию.
F.49.5. Авторы #
Postgres Professional, Москва, Россия.