Компания Postgres Professional выпускает Postgres Pro Backup (ProBackup) 3.5.0 — очередное обновление инструмента резервного копирования и восстановления. В новой версии функциональность удалённого восстановления полностью объединена внутри основной утилиты, расширены возможности синхронизации реплик при расхождении линий времени, добавлена многопоточность при управлении политиками хранения, а также оптимизирована производительность работы с SFTP, S3 и сжатой файловой системой CFS.

Напомним, что Postgres ProBackup разрабатывался с учётом требований крупных корпоративных клиентов. В одном продукте сочетаются базовые функции резервного копирования и возможности, востребованные в Enterprise-сегменте: резервное копирование через API для интеграции с внешними системами управления, хранение бэкапов в формате единого файла, работа без SSH-доступа и без прав к PGDATA (в том числе от непривилегированных пользователей), а также поддержка всех версий PostgreSQL 15+.
Утилита позволяет выполнять монтирование резервных копий через FUSE для мгновенного доступа к данным, осуществлять удалённое восстановление и restore отдельных баз данных, работать в трёх режимах копирования (BASE, PRO, DIRECT), объединять цепочки инкрементальных бэкапов и оптимизировать процессы под различные типы хранилищ — от облачных платформ до enterprise-кластеров с жёсткими требованиями к безопасности и отказоустойчивости.
Единый инструмент удалённого восстановления receive-backup
В версии 3.5.0 функциональность утилиты pgpro_backupstream полностью перенесена в pg_probackup3 в виде новой команды receive-backup. Теперь удалённое восстановление выполняется исключительно силами единой утилиты pg_probackup3 без необходимости привлекать сторонние инструменты.
Связка команд send-backup (на локальном хосте) и receive-backup (на целевом сервере) позволяет передавать, распаковывать и восстанавливать резервные копии напрямую по сети в многопоточном режиме без ручного копирования файлов архива:
-
поддерживается как полное восстановление в пустой каталог, так и инкрементальное восстановление (
-I/--incremental-mode) в режимахCHECKSUMиLSNпри использовании флага--no-merge; -
такой подход существенно сокращает время восстановления (RTO) и количество ручных операций при аварийном восстановлении, миграции или автоматическом развёртывании на изолированных удалённых серверах с централизованным хранилищем бэкапов.
Синхронизация реплик при расхождении линий времени в catchup
Команда catchup, предназначенная для клонирования и синхронизации экземпляров без использования каталога резервных копий, получила новый параметр —sync-replica. Он позволяет предварительно проверить возможность синхронизации реплики с ведущим сервером при расхождении историй линий времени — в том числе после повышения реплики. Такая проверка помогает избежать проблем, с которыми пользователи ранее сталкивались при некорректном применении команды.
Доступны два режима работы:
-
check— пробный запуск с диагностическими проверками и подробным отчётом без изменения данных реплики. Позволяет выявить возможные проблемы до выполнения синхронизации; -
apply— выполнение синхронизации с внесением изменений: утилита определяет точку расхождения, при необходимости выполняет откат с помощью pg_rewind, затем догоняет ведущий сервер.
Многопоточность в retention и гибкое управление WAL
Расширены возможности управления политиками хранения и архивами журнала предзаписи:
-
Многопоточный retention. В команду
retentionдобавлена поддержка многопоточности (-j/--threads), а также специализированных параметров--num-write-threadsи--num-validate-threads. Это позволяет значительно ускорить ресурсоёмкие операции объединения устаревших резервных копий (--merge-expired). -
Точный контроль глубины WAL. Новый параметр
--wal-depthв командеretentionпозволяет при очистке архива WAL гарантированно сохранять сегменты, необходимые для восстановления на момент времени (PITR) от заданного числа последних резервных копий на каждой линии времени. -
Поддержка keepalive при потоковой передаче WAL. Включена отправка сообщений keepalive с учётом параметра
wal_sender_timeout, что предотвращает разрыв соединения по тайм-ауту во время длительного отсутствия нагрузки на СУБД.
Улучшения производительности и работы с хранилищами (SFTP, S3, FUSE)
В релизе 3.5.0 проведён ряд оптимизаций, ускоряющих сетевой обмен и локальные операции:
-
Ускорение SFTP. Оптимизирована передача данных для каталогов резервных копий на удалённом хосте (
--remote-host). Теперь данные передаются асинхронно несколькими запросами без ожидания промежуточных ответов в рамках лимитов SFTP-сервера (требуетсяlibssh 0.11или выше). -
Увеличение буфера обмена. Значение параметра
--buffer-sizeпо умолчанию увеличено со 128 КБ до 1 МБ, что дополнительно повышает пропускную способность при работе с хранилищами. -
Тайм-ауты S3. Добавлен параметр
--s3-timeoutдля явного задания максимального времени выполнения HTTP-запроса к S3-серверу. -
Оптимизация проверки и монтирования. Проверка резервных копий в режиме
STREAMтеперь обрабатывает WAL-файлы и файлы данных за один проход вместо двух отдельных. Кроме того, ускорено чтение метаданных при монтировании копий через FUSE и проверка поддержки контрольных сумм на сервере. -
Работа с внешними каталогами. В команде
backupс параметром--external-dirsдобавлена корректная обработка символических ссылок, а при отсутствии указанного внешнего каталога утилита теперь явно сообщает об ошибке вместо молчаливого пропуска.
Стабильность и эффективность работы с CFS (Compressed File System)
Внесены важные исправления в логику работы со сжатыми файловыми системами и шифрованием (TDE):
-
Оптимальное инкрементальное восстановление CFS. Устранена проблема, из-за которой неизменённые страницы не распознавались при инкрементальном восстановлении и дописывались в конец файла, приводя к росту размера файлов данных.
-
Улучшена сохранность разреженных и зашифрованных страниц. Предотвращена вероятность потери разреженных страниц при резервном копировании CFS за счёт расчёта числа страниц по фактическому размеру файла, а не по числу непустых записей в файле отображения. Исправлена ошибка, при которой страницы, зашифрованные с помощью TDE, при восстановлении CFS воспринимались как пустые, а также устранены сбои проверки TDE при ограниченных правах чтения параметра
encryption. -
Повышена надёжность многопоточной обработки и сжатия. Устранены состояния гонки (race conditions) при параллельной обработке файлов CFS, исправлена обработка пустых страниц со сжатием
pglz, а также обеспечено создание файлов отображения CFS в полном размере при восстановлении. В режимеDIRECTалгоритм сжатия CFS теперь фиксируется непосредственно в блоке данных, что исключает ошибки при последующем восстановлении.
Прочие улучшения безопасность и надёжности восстановления
В релизе устранена уязвимость, позволявшая выполнить произвольную команду оболочки через путь к точке монтирования при размонтировании FUSE. Также исправлено переполнение буфера при передаче длинных значений параметров --remote-host и --remote-user в команду send-backup.
Исправлены и другие ошибки, затрагивавшие сохранность копий и выполнение операций:
-
команда
del-instanceпри работе с S3 больше не удаляет другие экземпляры, имена которых начинаются с имени удаляемого; -
при инкрементальном восстановлении после изменения линии времени теперь учитывается файл истории линий времени;
-
устранены ошибки удаления копий после объединения и объединения полностью устаревших инкрементальных цепочек командой
retention; -
исправлена обработка частичной отправки файлов и ошибок в рабочих потоках команды
send-backup; -
исправлено резервное копирование WAL-файлов большого размера;
-
команда
mergeс параметром--dry-runбольше не выполняет проверку и не удаляет резервные копии.
Обновление до версии 3.5.0
При переходе с версии 3.2.x или более ранней необходимо учитывать изменение состава пакетов: начиная с версии 3.3.0 библиотеки libpgprobackup.so и libpb3_encoder.so входят в единый пакет libpb3-encoder. Если для работы в режиме PRO ранее был установлен пакет libpgprobackup3, перед обновлением его необходимо удалить.
Полное описание возможностей ProBackup 3.5.0, порядок установки и обновления приведены в документации:
https://postgrespro.ru/docs/pg_probackup3/3.5/index
Источник: habr.com