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

Восстановление WAL-файлов

примечание

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

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

Процесс восстановления WAL-файлов, инициируемый СУБД.

примечание

Если WAL-файлы находятся в разных хранилищах, ознакомьтесь с разделом Восстановление WAL-файлов из нескольких хранилищ.

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

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

  1. Задайте в конфигурационном файле copywala.yaml значения для параметров:

    • wal_destination_uri – путь к хранилищу для архивированных WAL-файлов.
    • restore_instance_name – наименование экземпляра БД для восстановления (соответствует уникальному имени экземпляра агента — instance_name, полученному при инициализации приложения).
  2. Установите значение в настройках БД (postgresql.conf) archive_command='copywala restore-wal %f %p'.

    Справка по команде copywala restore-wal

    Описание:

    Используется в restore_command (postgresql.conf) и выполняет восстановление WAL-файлов из удаленного хранилища.

    Синтаксис:

        
    copywala restore-wal %f %p [flags]

    Обязательные параметры:

    • %f — имя WAL-файла, который нужно восстановить.
    • %p — путь в файловой системе, куда WAL-файл должен быть восстановлен.

    Опциональные параметры:

    [flags] – доступны следующие флаги:

    ФлагОписание
    -h|--helpПоказать справку по команде
    -c|--config <path to copywala config>Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml

Результат

При восстановлении СУБД запросит WAL-файл (или *.history), выполняя команду, указанную в restore_command:

2025-08-28 14:58:03.981 INF 00000001000000030000002A: wal restored pg_wal/XLOGRECORD storage=s2 time_elapsed=114.872333ms

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

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

Как ускорить восстановление

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

Как работает упреждающая загрузка WAL-файлов

При включенной упреждающей многопоточной загрузке WAL-файлов предзагрузка выполняется в два этапа:

  1. Во время загрузки WAL-файлы размещаются в директории .copywala/prefetch/running.
  2. После завершения загрузки файлы атомарно перемещаются в .copywala/prefetch, откуда используются СУБД при восстановлении.

Директории для хранения предзагруженных WAL-файлов создаются автоматически от имени пользователя, под которым запущена copywala. Расположение директорий настраивается в copywala.yaml параметром wal_archiving.wal_prefetch_dir. По умолчанию директории .copywala/prefetch/running и .copywala/prefetch будут созданы внутри pg_wal. Права доступа к директориям настраивается в copywala.yaml параметром wal_archiving.wal_dir_mode.

Количество предзагружаемых WAL-файлов регулируется параметром wal_archiving.wal_prefetch_size (подробное описание параметра ниже).

При выполнении restore_command система сначала пытается получить WAL-файл из директории .copywala/prefetch. Если файл отсутствует, выполняется проверка директории .copywala/prefetch/running:

  • если файл находится в процессе загрузки и его размер продолжает увеличиваться, система ожидает завершения загрузки;
  • если размер файла не изменяется более 200 миллисекунд, WAL-файл загружается напрямую из хранилища;
  • после завершения загрузки файл перемещается в .copywala/prefetch и используется для восстановления.

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

Упреждающая загрузка WAL-файлов активируется и регулируется параметром wal_archiving.wal_prefetch_size, который находится в секции wal_archiving конфигурационного файла copywala.yaml:

wal_archiving: 
wal_prefetch_size: 0
Возможные значения параметра wal_archiving.wal_prefetch_size

Значение

Описание

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

Упреждающая загрузка выключена

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

Включает механизм упреждающей загрузки WAL-файлов в указанном количестве

подсказка

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

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

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

  • Закончилось место на диске.
  • Неверно настроенная конфигурация.