Управление политиками хранения резервных копий
Исполнять сценарий необходимо от имени пользователя postgres.
Описание сценария
Политики хранения используются для автоматического управления жизненным циклом резервных копий: определения копий, которые необходимо сохранить, и удаления устаревших резервных копий.
Механизм политик хранения применяется только к резервным копиям, расположенным в локальном хранилище.
Последовательность выполнения
При работе с политиками хранения доступны следующие операции:
| Операция | Описание |
|---|---|
| Настройка политики хранения | Создание и привязка политики к директории с резервными копиями |
| Просмотр политик хранения | Получение списка настроенных политик |
| Временная защита резервной копии от удаления | Исключение выбранной копии из процесса автоматического удаления |
| Удаление резервных копий, не соответствующих политике хранения | Удаление копий, не соответствующих условиям политики |
Перейдите к описанию нужной операции для получения более подробной информации и инструкции по выполнению.
Настройка политики хранения
Политика применяется к директории, в которую сохраняются резервные копии. Из конфигурационного файла извлекается значение backup_destination_uri, которое объединяется с instance_name, хранящимся в специальном файле, формируя путь вида <backup_destination_uri/instance_name>. Именно эта директория получает соответствующую политику хранения. Заданная политика сохраняется в служебной базе данных pbra_db в таблице pbr_retention_policies.
Последовательность выполнения
Инициируйте настройку политики хранения через CLI copywala командой:
$ copywala retention policy set [--max-full-backups | максимальное количество РК][--retention-period | максимальный интервал]
Справка по команде copywala retention policy set
Описание:
Команда применяет политику хранения к директории резервных копий, определяя сроки хранения и условия удаления.
Политика хранения поддерживает два основных режима:
-
Хранить фиксированное число полных резервных копий:
Флаг:
--max-full-backups=N, гдеN– число полных РК, которые необходимо хранить.Используется для ограничения общего количества полных резервных копий. Полные копии выбираются по принципу новизны: сохраняются наиболее поздние по времени создания. Вместе с полными копиями сохраняются все дочерние дельта-копии.
-
Хранить резервные копии, позволяющие восстанавливать данные за установленное количество дней:
Флаг:
--retention-period=Kd, гдеK– количество дней, за которые необходимо обеспечить возможность восстановления данных.Применяется для обеспечения возможности полного восстановления на любой момент времени в пределах указанного периода. Все резервные копии, чьи поля завершения (
finish_time) попадают в указанный интервал, остаются неприкосновенными, даже если начало (start_time) выходит за пределы окна. Если в указанное временное окно попадает дельта-копия, чья родительская РК (полная или дельта) не попала в это окно, родительская копия все равно остается защищенной от удаления.
Эти механизмы работают совместно: если политика ограничивает общее количество полных копий (max-full-backups), но некоторые из них входят в диапазон удерживаемых по критерию временных окон (retention-period), то приоритет отдается временной политике, и соответствующие копии останутся, даже если превышают лимит полных копий.
Например, если имеется три резервные копии, одна из которых входит в окно восстановления (retention-period), а максимальная разрешенная глубина хранения полных копий равна одной (max-full-backups=1), то сохранится лишь та копия, которая находится в временном интервале восстановления, а остальные две будут удалены.
Важно понимать:
-
Все резервные копии старше указанного числа дней (
retention-period) автоматически удаляются. -
Из оставшихся резервных копий сохраняется только указанное количество полных резервных копий (
max-full-backups):- Если число полных резервных копий меньше либо равно количеству, указанному в
max-full-backups, ничего удалено не будет. - Если полное количество резервных копий больше установленного ограничения (
max-full-backups), полные РК (самые старые) будут удалены.
- Если число полных резервных копий меньше либо равно количеству, указанному в
Если один из флагов в команде отсутствует, его значение принимается равным нулю, и соответствующее значение в политике (при условии, что политика уже была создана ранее) будет обновлено. Например, после вызова команды с параметром --retention-period=0, параметр максимума дней хранения сбросится до нуля, и резервные копии, сделанные за последние шесть дней, перестанут считаться нужными и будут удалены при следующем сеансе очистки.
Синтаксис:
copywala retention policy set [flags]
Обязательные параметры:
Должен быть указан минимум один из флагов: --max-full-backups <number of backups> или --retention-period <d (days)/ h (hours)/ s (seconds)>.
Опциональные параметры:
[flags] – доступны следующие флаги:
| Флаг | Описание |
|---|---|
-h|--help | Показать справку по команде |
-c|--config <path to copywala config> | Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml |
--max-full-backups <number of backups> | Задает количество полных резервных копий, сохраняемых в рамках политики хранения. Все связанные с ними дельта-копии также будут сохранены |
--retention-period <d (days)/ h (hours)/ s (seconds)> | Задает временной интервал хранения, в течение которого будут храниться резервные копии |
Результат
По завершении выполнения команды будет выведено уведомление о том, что новая политика успешно применена.
Исключительные сценарии
Будет выведено соответствующее сообщение для случаев:
- Не удалось установить подключение к целевой базе данных.
- Неверный формат строки, определяющей временной интервал защиты.
Просмотр политик хранения
Просмотр пользователем списка политик хранения резервных копий, расположенных в служебной базе данных pbra_db в таблице pbr_retention_policies.
Последовательность выполнения
Запросите список политик хранения резервных копий через CLI copywala командой: copywala retention policy show (ознакомьтесь со справкой по команде ниже).
Справка по команде copywala retention policy show
Описание:
Выводит список политик хранения резервных копий в виде таблицы.
Синтаксис:
copywala retention policy show [flags]
Обязательные параметры:
Нет.
Опциональные параметры:
[flags] – доступны следующие флаги:
| Флаг | Описание |
|---|---|
-h|--help | Показать справку по команде |
-c|--config <path to copywala config> | Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml |
Результат
В результате выполнения команды будет выведено сообщение, содержащее действующую политику хранения резервных копий конкретно для выбранного экземпляра БД:
| id | location uri | max-full-backups | retention-period |
|--------------------------------------|-------------------------------------------------------------------------|------------------|--------------------|
| 019715e5-a1ec-70c4-9a31-753362d26f75 | local-fs:///path/to/backups/dbmain_01988a12-06bf-7f0b-87f8-e290972fe614 | 4 | 8 |
Исключительные сценарии
- Не удалось установить подключение к целевой базе данных.
- Не удалось загрузить конфигурационный файл.
Временная защита резервной копии от удаления
Команда добавляет указанную резервную копию в перечень исключений из политики хранения, действующей на директорию, в которой расположена данная копия, на установленный промежуток времени. Таким образом, если в стандартных условиях данная РК удаляется ввиду несоответствия условиям политики, эта команда временно блокирует ее удаление, обеспечивая защиту копии от дальнейших чисток. Все родительские копии, от которых зависит данная закрепленная копия, также будут закреплены. При этом для выбранной резервной дельта-копии дочерние дельта-копии не получат статус закрепления.
Последовательность выполнения
Инициируйте Временная защита резервной копии от удаления через CLI copywala командой copywala retention backup set (ознакомьтесь со справкой по команде ниже).
Справка по команде copywala retention backup set
Описание:
Временно исключает указанную резервную копию (и связанные с ней родительские копии) из политики хранения, предотвращая ее удаление в процессе очистки.
Синтаксис:
copywala retention backup set <archive uri> [flags]
Обязательные параметры:
<archive uri> – путь к CWL-архиву резервной копии из которой требуется восстановить данные.
Если в команде используется URI, указывающий подключение к DDBoost через S2, его необходимо обязательно заключать в двойные кавычки.
Это требование связано с тем, что URI содержит символ &, который интерпретируется Bash как оператор фонового запуска команды.
Ниже приведен пример для команды copywala cwl info:
copywala cwl info "s2://<s2-host>/<ddboost-storage-unit>/path/in/ddboost/storage/unit?driver=ddboost&data_domain_host=<ddboost-host>"
Опциональные параметры:
[flags] – доступны следующие флаги:
| Флаг | Описание |
|---|---|
-h|--help | Показать справку по команде |
-c|--config <path to copywala config> | Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml |
--retention-protection <protection time> | Временной интервал защиты резервной копии от удаления согласно политике хранения, например: 1d (1 день), 20h (20 часов). Для снятия защиты резервной копии и возможности ее удаления передайте флаг --retention-protection=0. |
Результат
По завершении выполнения команды выводится уведомление о том, что правило успешно установлено:
backup is protected until <date>
Исключительные сценарии
Будет выведено соответствующее сообщение для случаев:
- Не удалось установить подключение к целевой базе данных.
- Неверный формат строки, определяющей временной интервал защиты.
Удаление резервных копий, не соответствующих политике хранения
Удаление резервных копий, не соответствующих политике хранения, выполняется через CLI copywala командой copywala retention clean-outdated-backups.
В зависимости от того настроена (задана) политика хранения или нет команда позволяет выполнять следующие операции:
Для просмотра списка заданных политик хранения резервных копий copywala используйте команду copywala retention policy show.
Политика хранения настроена | При вызове команды удаляются резервные копии, которые не соответствуют назначенной политике хранения, и, опционально, при указании флага |
Политика хранения не настроена | При вызове команды резервные копии не удаляются. При вызове команды с флагом |
Сценарий удаления устаревших WAL-файлов применим только при включенной архивации WAL-файлов.
Устаревшими считаются WAL-файлы, которые предшествуют первому WAL-файлу (start_lsn_wal_file_name) самой старой из оставшихся после очистки резервных копий. Эти WAL-файлы больше не нужны ни для восстановления старых резервных копий (они уже удалены политикой хранения), ни для оставшихся резервных копий (они начинаются с более поздней точки). Удаление устаревших WAL-файлов позволяет освободить место в хранилище.
Последовательность выполнения
Инициируйте удаление резервных копий и/или WAL-файлов через CLI copywala командой copywala retention clean-outdated-backups (ознакомьтесь со справкой по команде ниже).
Справка по команде copywala retention clean-outdated-backups
Описание:
Команда удаляет резервные копии, которые не соответствуют политике и срокам хранения, заданным с помощью команды copywala retention policy set.
При использовании флага --delete-wals после удаления устаревших резервных копий дополнительно удаляются ненужные (устаревшие) WAL-файлы:
- Если резервные копии остались — удаляются WAL-файлы, предшествующие
start_lsn_wal_file_nameсамой старой оставшейся резервной копии. - Если резервных копий не осталось — все WAL-файлы удаляются только при одновременном указании флага
--force-delete-all-wals-if-no-backups.
Это позволяет освободить место в хранилище, сохранив только те WAL-файлы, которые нужны для восстановления оставшихся резервных копий.
Алгоритм работы команды
-
Извлекаются значения параметров:
backup_destination_uriиз конфигурационного файлаcopywala.yaml;instance_nameиз файла/etc/pbr/pbr.agent.id(или из переопределенного файла, если он был изменен).
-
По этим данным в служебной базе данных
pbra_dbв таблицеpbr_retention_policiesопределяется политика хранения для данного хоста. -
Проверяется таблица резервных копий, из которой выбираются копии, находящиеся в указанной директории.
-
По метаданным резервных копий определяются и удаляются резервные копии, которые не соответствуют политике хранения.
-
Если при вызове команды
copywala retention clean-outdated-backupsбыл указан флаг--delete-walsопределяется, остались ли после удаления резервные копии:-
Если резервные копии остались — удаляются WAL-файлы, предшествующие
start_lsn_wal_file_nameсамой старой оставшейся резервной копии. В результате будет выведено сообщение:...remove wal files before <start_lsn_wal_file_name> wal<N> WAL files deleted -
Если резервных копий не осталось — будет выведено сообщение:
...cannot find the oldest postgres backup; enable --force-delete-all-wals-if-no-backups flag to delete all WAL filesПри необходимости принудительного удаления WAL-файлов вызовите
copywala retention clean-outdated-backups --delete-wals --force-delete-all-wals-if-no-backups. В результате выполнения будет выведено сообщение:...nothing to clean for given uri <backup_destination_uri>/<instance_name>oldest postgres backup not found; delete all wals<N> WAL files deleted
-
Если резервные копии были удалены без применения механизма политики хранения Copywala (retention policy), после удаления выполните инвентаризацию (copywala backups inventory). Это необходимо для актуализации данных о резервных копиях в базе данных.
Синтаксис:
copywala retention clean-outdated-backups [flags]
Обязательные параметры:
Нет.
Опциональные параметры:
[flags] – доступны следующие флаги:
| Флаг | Описание |
|---|---|
-h|--help | Показать справку по команде |
-c|--config <path to copywala config> | Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml |
--dry-run | Запуск команды в «тестовом режиме»: выводится информация о резервных копиях и WAL-файлах, которые были бы удалены при обычном выполнении команды (без флага --dry-run). Фактическое удаление резервных копий не выполняется. При одновременном использовании с --delete-wals и/или --force-delete-all-wals-if-no-backups WAL-файлы также не удаляются |
--delete-wals | Удаление устаревших WAL-файлов. Флаг работает независимо от того задана политика хранения или нет. - Если политика хранения не задана — резервные копии не удаляются, но устаревшие WAL-файлы удаляются (предшествующие самой старой резервной копии). - Если политика хранения задана — сначала удаляются резервные копии, не соответствующие политике, затем удаляются устаревшие WAL-файлы (предшествующие самой старой из оставшихся резервных копий) |
--force-delete-all-wals-if-no-backups | Принудительное удаление всех WAL-файлов, если в хранилище не осталось ни одной резервной копии. Используется только совместно с --delete-wals |
Флаги --delete-wals и --force-delete-all-wals-if-no-backups удаляют только WAL-файлы. Служебные файлы .backup и .history, расположенные в директории хранилища WAL, не удаляются.
Результат
При наличии настроенной политики хранения
Если политика хранения задана и найдены устаревшие резервные копии, они будут удалены. В результате выводится сообщение:
successfully cleaned outdated backups
Если вместе с командой был указан флаг --delete-wals, дополнительно будут удалены WAL-файлы. Вывод зависит от оставшихся после удаления резервных копий:
-
Остались резервные копии — удалены WAL-файлы, предшествующие
start_lsn_wal_file_nameсамой старой оставшейся резервной копии:...remove wal files before <start_lsn_wal_file_name> wal<N> WAL files will be deleted -
Резервные копии не остались — WAL-файлы не удаляются, выводится сообщение с предложением использовать
--force-delete-all-wals-if-no-backupsдля их принудительного удаления:...cannot find the oldest postgres backup; enable --force-delete-all-wals-if-no-backups flag to delete all WAL files
При отсутствии настроенной политики хранения
Резервные копии не удаляются. В результате выводится сообщение:
nothing to clean for given uri <путь к очищаемой папке>
Если команда вызвана с флагом --delete-wals, удаление WAL-файлов выполняется по тем же правилам, что и при наличии политики.
Исключительные сценарии
- Нет прав для:
- чтения директории с РК;
- удаления РК;
- Не удалось установить подключение к целевой базе данных.
- Если информация о резервной копии присутствует в базе данных и по политике такая копия подлежит удалению, но сама физическая копия в хранилище отсутствует, то возникнет ошибка.
- Если ранее для папки с резервными копиями не была назначена никакая политика хранения, ни одна резервная копия, расположенная в этой директории, не будет удалена. Вместо этого будет выдано информационное сообщение о том, что политика для данной папки не найдена.
Результат
Выполнены необходимые действия по управлению политиками хранения резервных копий.