Перейти к основному содержимому

Создание резервной копии вручную

примечание

Исполнять сценарий необходимо от имени пользователя postgres.

Описание сценария​

Инициирование процесса создания резервной копии вручную.

Предусловие​

Перед созданием резервной копии убедитесь, что агентское приложение зарегистрировано либо прошла успешная инициализация приложения.

Важно

По умолчанию настройками copywala запрещен одновременный запуск снятия нескольких РК через copywala create-backup в целях исключения избыточной нагрузки на БД и защиты от случайного повторного запуска.

Данное поведение можно отключить, установив в конфигурационном файле copywala.yaml в разделе app поле allow_concurrent_create_backup равным значению true:

app:
copywala_dir: /var/pbr/copywala/
allow_concurrent_create_backup: true

При снятии РК с включенным по умолчанию режимом защиты от одновременного снятия нескольких резервных копий в директории copywala_dir создается специальный файл create-backup.lock. Этот файл служит индикатором того, что один из экземпляров copywala уже начал процедуру резервного копирования. Когда другой экземпляр пытается запустить процесс create-backup и находит указанный файл, он немедленно прерывается с сообщением об ошибке.

Учитывайте следующее:

  • При запуске РК пользователь может задать путь к файлу с конфигурацией и переопределить поле copywala_dir, блокировка запуска будет работать только при одинаковых настройках рабочей папки copywala_dir. Рекомендуем убедиться, что директория copywala_dir единая для всех выполняемых операций create-backup.
  • По завершении процедуры резервного копирования созданный файл блокировки автоматически удаляется, позволяя запустить новый процесс.
  • В случае внезапного сбоя или прекращения операции снятия резервной копии, файл блокировки также удаляется системой, за исключением ситуаций, когда copywala получает сигнал SIGKILL. В таком случае система не успевает удалить файл самостоятельно, и ответственность за удаление файла ложится на пользователя.

Также обратите внимание:

  • в конфигурационном файле copywala.yaml поле compression_algorithm предназначено для выбора алгоритма сжатия данных при создании резервных копий. По умолчанию выставлено значение S2.

    compression_algorithm: S2 # допустимые значения: DISABLED, ZSTD, S2
  • Если в качестве хранилища для резервных копий используется DDBoost:

    • При создании резервной копии многопоточная запись не поддерживается из-за ограничений DDBoost. При запуске команды на резервное копирование автоматически будет установлено количество потоков записи равным единице, независимо от заданного значения (задается в copywala.yaml параметром backup_policy.write_parts_workers_no).
    • При восстановлении данных их резервной копии многопоточный режим работает без ограничений.
Работа в режиме direct_io

Режим direct_io позволяет работать напрямую с памятью приложения, тем самым повышая производительность за счет исключения дополнительного этапа кеширования.

  • read_direct_io отвечает за чтение данных непосредственно с диска, минуя кеш операционной системы.

  • write_direct_io отвечает за запись данных в архив в режиме прямого ввода-вывода.

    Важно

    Параметр write_direct_io применим только при создании локального архива. В данном режиме не требуется дополнительный кеш, поскольку формат архива адаптирован для прямой записи, включая автоматическое выравнивание завершающего блока по 4 Кбайт. Чтобы избежать ошибок, параметр part_payload_size в разделе конфигурации archive_settings.upload_params также должен быть кратен 4 Кбайт.

backup_policy:
read_direct_io: false
write_direct_io: false

Дополнительные настройки сценария​

В разделе перечисляются необязательные параметры, расширяющие возможности основного сценария.

Настройка ограничения очереди WAL-файлов (при потоковой репликации)​

В процессе резервного копирования WAL-файлы поступают по протоколу репликации в локальную файловую систему (определяется значением wal_stream_tmp_dir) и затем отправляются в целевое хранилище, заданное параметром wal_destination_uri.

Очередь WAL-файлов может расти без ограничений, например, если они поступают быстрее, чем записываются в хранилище. Это может привести к переполнению диска и отказу сервера.

Для предотвращения таких ситуаций используется параметр max_pending_wals (конфигурационный файл copywala.yaml раздел backup_policy):

backup_policy:
max_pending_wals: -1

max_pending_wals определяет режим работы очереди WAL-файлов (включение/отключение) и задает их максимальное допустимое количество, которое может одновременно находиться в обработке. В это значение входят как WAL-файлы, находящиеся в очереди, так и WAL-файлы, которые уже обрабатываются воркерами. Например, при max_pending_wals=14 и write_wals_workers_no=4 в очереди может быть только 10 файлов, так как 4 будут в обработке у воркеров.

Возможные значения параметра max_pending_wals

Значение

Описание

-1 (задано по умолчанию)

Очередь включена без ограничения размера.

Внимание!

Использование данного значения может привести к переполнению диска, который используется как временное хранилище перед записью WAL-файлов в резервную копию.

0

Очередь отключена: поступающие WAL-файлы немедленно передаются воркерам для обработки. При отсутствии доступных воркеров прием WAL-файлов приостанавливается до их освобождения. Если ожидание превышает значение wal_sender_timeout (настройки БД файл postgresql.conf), то:

  • резервное копирование прерывается с ошибкой.
Текст ошибки (отформатирован для упрощения восприятия)

2026-04-08 18:43:54.587 [993659] ERR app: run: copywala err=
"saving wals:
process replication messages:
process next message:
acknowledge replication message:
receive message from pangolin server:
receive message failed:
unexpected EOF"
  • архив с незавершенной РК удаляется.

любое целое число > 0

При достижении или превышении указанного значения:

  • резервное копирование прерывается с ошибкой.
Текст ошибки (отформатирован для упрощения восприятия)

2026-04-10 14:53:54.942 [2366509] ERR failed to write backup aborting package=pangolin.engine err=
"saving wals:
process replication messages:
process next message:
switch WAL segment:
write current WAL segment: 000000010000047300000010:
limit of WAL files waiting to be written is reached
max_pending_wals value: 100
suggestions:
- increase backup_policy.write_wals_workers_no
- increase or disable backup_policy.max_pending_wals
stopping WAL delivery gateway"
  • архив с незавершенной РК удаляется.

При выборе значения учитывайте:

  • размер одного WAL-файла;
  • доступное дисковое пространство;
  • скорость записи в хранилище.
Ограничение очереди WAL-файлов помогает:

  • предотвратить переполнение диска;
  • избежать аварийного завершения работы сервера;
  • контролировать потребление ресурсов во время резервного копирования.

Использование механизма автоматического определения адреса основного сервера БД (primary)​

Независимо от того, для какого узла БД (основного или реплики) создается резервная копия, информация о результате РК сохраняется в БД компонента pbra_db, расположенного на одном хосте с основным сервером БД (primary).

При создании резервной копии узла реплики, важно убедиться, чтобы были заданы параметры, которые необходимы для подключения к БД pbra_db. Настройка подключения утилиты copywala к БД pbra_db возможна следующими способами:

Принцип работы механизма​

Механизм использует встроенные функции и системные представления и работает следующим образом:

  1. При запуске резервного копирования copywala подключается к целевой БД, указанной в конфигурационном файле copywala.yaml, секция target_db.

  2. Определяется роль целевой БД с помощью функции pg_is_in_recovery():

    • true – подключение выполнено к реплике;
    • false – подключение выполнено к основному серверу.
  3. Если установлено, что роль целевой БД – реплика:

    1. Адрес и порт основного сервера извлекаются из представления pg_stat_wal_receiver;
    2. Полученные значения используются для подключения к основному серверу: они подставляются вместо имеющихся в copywala.yaml (секция pbra_db, поля host и port).

Включение механизма автоматического определения адреса основного узла​

  1. Убедитесь, что у пользователя, выполняющего РК, есть права на чтение всех данных в представлении pg_stat_wal_receiver. Если прав нет, выдайте их одной из команд:

    • GRANT pg_monitor TO backup_user;
    • GRANT pg_read_all_stats TO backup_user;
  2. В конфигурационном файле copywala.yaml:

    1. Проверьте, что в секции target_db заданы значения для параметров host и port.
    2. Проверьте, что в секции pbra_db для параметров host и port значения не заданы.

После создания резервной копии на узле-релике в логах copywala будет выведено сообщение:

pbra_db host and port are automatically switched to the master address obtained from pg_stat_wal_receiver
Важно

В случае, если в секции pbra_db для параметров host и port заданы значения и значение в параметре pbra_db.host отличается от значения в target_db.host, механизм автоматического определения адреса мастера не запускается.

Добавление в резервную копию дополнительных файлов​

Информация представлена в разделе – Добавление дополнительных файлов в резервную копию.

Последовательность выполнения​

Шаги сценария:

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

  2. Запустите резервное копирование через CLI утилиты Copywala командой copywala create-backup. В процессе выполнения РК будут выведены сообщения вида:

    Пример лога:

    backup progress processed_data_size=106591084604 data_size=106811663601 pending_wals=0 wal_size=3942645760
    АтрибутЗначение в примереОписание
    processed_data_size106591084604Объем данных (в байтах), который уже скопирован на данный момент
    data_size106811663601Общий объем (в байтах) данных, который необходимо скопировать
    pending_wals0Количество WAL-файлов, которые находятся в очереди на обработку и архивацию
    wal_size3942645760Общий размер WAL-файлов (в байтах), относящихся к текущей резервной копии
    Предупреждение о переполнении очереди WAL-файлов

    В процессе выполнения РК возможно появление сообщения уровня WARN следующего вида:

    WRN wals queue overflowed: 4 wals workers, 120 pending wals package=pangolin.engine

    Это означает, что количество WAL-файлов, которые ожидают обработки (120 pending wals), превышает число обработчиков (4 wals workers).

    В такой ситуации не рекомендуется прерывать текущий процесс создания РК и дать ему завершиться. Для предотвращения подобных ситуаций в будущем, увеличьте значение параметра write_wals_workers_no (конфигурационный файл copywala.yaml раздел backup_policy), чтобы увеличить количество обработчиков WAL-файлов.

    Рекомендуем настраивать write_wals_workers_no с учетом общего количества потоков: сумма workers_no, write_parts_workers_no и write_wals_workers_no не должна превышать количество доступных CPU.

    Увеличение числа потоков сверх количества ядер не дает прироста производительности и может привести к ее снижению.

Результат​

По окончании процесса резервного копирования в лог выводятся информационные сообщения о завершении операции и ее результатах.

Пример:

2026-03-20 12:31:54.123 [49049] INF completing backup
2026-03-20 12:31:56.456 [49049] INF backup stats backup=/path/to/backup/<backup_name>.cwl time_elapsed=3.594412851s time_upload=146.225796ms total_bytes=1152819488 upload_bytes=211275776 compress_ratio=5.5 compress_algorithm=S2

Описание атрибутов сообщения backup stats:

АтрибутЗначение в примереОписание
backup/path/to/backup/<backup_name>.cwlПолный путь к файлу РК
time_elapsed3.594412851sВремя создания РК
time_upload146.225796msВремя, затраченное на передачу данных в хранилище
total_bytes1152819488Общий объем данных, скопированных при создании резервной копии (в байтах)
upload_bytes211275776Общий объем данных, переданных в хранилище (в байтах). Значение upload_bytes < total_bytes, так как используется сжатие данных
compress_ratio5.5Степень сжатия данных
compress_algorithmS2Использованный алгоритм сжатия

Исключительные сценарии​

Будет выведено соответствующее сообщение для случаев:

  • Не удалось установить подключение к целевой базе данных.
  • Закончилось место на диске.
  • Возникла ошибка при создании слота репликации.