pgse_backup. Функции поддержки интеграции с системами резервного копирования
Версия: 1.2.
В исходном дистрибутиве установлено по умолчанию: да.
Связанные компоненты: отсутствуют.
Схема размещения:
backup.
Описание
Модуль включает в себя общие объекты БД для установки СУБД Pangolin, а также функции поддержки интеграции с системами резервного копирования.
Использование пользователями не предполагается. Модуль не является пользовательским расширением – это часть доработок интеграции с СРК Data Protector.
При установке расширения создаются следующие объекты:
- схема
backup, в которой размещаются само расширение и все связанные с ним объекты. Даже если при создании расширения указать другую схему, установка все равно будет выполнена в схемуbackup. Владельцем схемыbackupстановится владелец расширения; - представления для отображения истории и контроля резервных копий
backup.data_history,backup.wal_history,backup.history; - таблица для хранения настроек
backup.settings; - типы данных
backup.data_history_row_type,backup.wal_history_row_type; - функции для просмотра представлений
backup.read_data_history(),backup.read_wal_history(),backup.reset_history().
Доработка
Модуль является частью доработок интеграции с Data Protector.
Ограничения
Ограничения отсутствуют.
Установка
СУБД Pangolin изначально поставляется со всеми необходимыми установленными расширениями и утилитами для организации резервного копирования.
Проверка наличия расширения pgse_backup :
SELECT * FROM pg_extension WHERE extname = 'pgse_backup';
oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
-------+--------------------+----------+--------------+----------------+------------+---------------+--------------
16407 | pgse_backup | 10 | 16404 | f | 1.2 | |
(1 row)
Из вывода видно, что расширение pgse_backup (oid 16407) установлено и готово к использованию.
С СУБД Pangolin совместима только та утилита pg_probackup, которая идет в составе дистрибутива продукта.
Проверка наличия утилиты pg_probackup:
$ which pg_probackup
/opt/pangolin-backup-tools/bin/pg_probackup
Настройка
Настройка не требуется.
Управление
Мониторинг резервных копий
Функциональность мониторинга резервных копий реализована через расширение pgse_backup.
Для безопасного считывания файлов с историей (backup_state, wal_backup_state) используется функция СУБД Pangolin с атрибутом SECURITY DEFINER. Функция разрешает доступ к файлам с историей без прав суперпользователя, но в пределах строго фиксированного каталога, чтобы исключить доступ к чтению посторонних файлов. Директория, в которой хранятся файлы истории и предоставляется доступ через SECURITY DEFINER, задается через таблицу backup.settings. Данная таблица должна быть доступна только владельцу расширения (Администратору БД).
Информация в представлениях backup.data_history, backup.wal_history — результат работы функций backup.read_data_history() и backup.read_wal_history(). Данные функции через встроенную функцию PostgreSQL pg_read_file() читают файлы в формате JSON с историей резервного копирования, заполняемые утилитами manage_backup.bin и pg_probackup. Файлы с историей (backup_state, wal_backup_state) располагаются в каталоге резервного копирования (по умолчанию /pgarclogs/[pangolin_<base_version>] и указываются в таблице backup.settings).
SELECT * FROM backup.settings;
name | setting
------+---------------
dir | /pgarclogs/06
(1 row)
Итоговый результат сессии резервного копирования представляет собой сверку состояний из backup.data_history, backup.wal_history и доступен в backup.history, как на таблице ниже:
Состояние сессии DATA | Состояние сессии WAL | Итоговое состояние |
|---|---|---|
starting | starting | |
started | started | |
stopping | stopping | |
failed | failed | |
completed | Хотя бы одна сессия WAL началась после окончания сессии DATA, включает в свой интервал | completed |
completed | Хотя бы одна сессия WAL началась после окончания сессии DATA, включает в свой интервал | wal_backup_started |
completed | Не найдена ни одна подходящая сессия WAL | waiting_for_wal_backup |
Пример:
SELECT * FROM backup.history;
session_id | state | tli | start_time | start_lsn | stop_time | stop_lsn | duration
--------------+------------------------+-----+------------------------+-----------+------------------------+-----------+----------
2022/09/28-63 | waiting_for_wal_backup | 3 | 2022-09-28 15:54:26+03 | 0/A000028 | 2022-09-28 15:55:08+03 | 0/B001238 | 00:00:42
Интеграция с системой мониторинга
В системе мониторинга используются следующие метрики:
Метрика | Запрос | Описание |
|---|---|---|
|
| Возвращает количество успешных резервных копий за последние 24 часа |
|
| Возвращает количество неуспешных резервных копий за последние 24 часа |
|
| Возвращает количество неуспешных резервных копий WAL-сессий за последние 24 часа |
Если резервная копия снята успешно, то значение backup completed count будет больше 0, а значение backup wal failed count равно 0.
Состояние резервной копии на каждом экземпляре БД свое, поэтому при мониторинге необходимо опросить все узлы кластера, чтобы гарантировано получить самую последнюю резервную копию.
Интерфейс просмотра истории резервных копий (РК)
backup.data_history
Для просмотра истории полного цикла РК создано специальное представление backup.data_history.
Данное представление берет информацию из локального файла $PGBACKUP/backup_state и выводит его содержимое в виде таблицы:
SELECT * FROM backup.data_history;
session_id | state | tli | start_time | start_lsn | stop_time | stop_lsn | duration | stop_walfile
------------+-----------+-----+------------------------+------------+------------------------+------------+----------+--------------------------
FULL-16 | completed | 54 | 2020-11-13 01:52:22+03 | 4/5A000060 | 2020-11-13 01:52:31+03 | 4/{hash} | 00:00:09 | {wal_file}
FULL-16 | completed | 54 | 2020-11-13 01:53:05+03 | 4/5A000060 | 2020-11-13 01:53:11+03 | 4/{hash} | 00:00:06 | {wal_file}
Где:
session_id- ID сессии;state- состояние сессии;tli- временная шкала снятой копии;start_time- начало выполнения сессии;start_lsn- позиция WAL-сегмента при переходе БД в режим снятия РК;stop_time- конец выполнения сессии;stop_lsn- позиция WAL-сегмента при выходе БД из режима снятия РК;duration- длительность сессии (end_time-start_time);stop_walfile- конечный WAL-архив.
backup.wal_history
Для просмотра истории резервных копий промежуточных WAL создано специальное представление backup.wal_history:
SELECT * FROM backup.wal_history;
session_id | state | start_time | stop_time | duration | info
-----------+-----------+------------------------+------------------------+----------------
WAL-5 | completed | 2020-11-09 16:11:02+03 | 2020-11-09 16:11:04+03 | 00:00:02 | [{"tli": 40, "parent_tli": 0, "switchpoint": "0/0", "min_segno": {hash}, "max_segno": {hash}, "n_segments": 11, "size": 955436, "zratio": 193.16, "status": "ok", "lost_segments": []}]
Где:
session_id- ID сессии СРК;state- состояние сессии;start_time- начало выполнения сессии;stop_time- конец выполнения сессии;duration- длительность сессии (end_time-start_time);info- информация о хранящихся на диске архивах WAL (собирается на старте копирования с помощьюpg_probackup).
В поле info помещается номер стартового и конечного архивов WAL. Если на диске отсутствуют промежуточные архивы — будет выведена ошибка, и в поле info.lost_segments будут записаны потерянные файлы.
backup.history
Для мониторинга связанных сессий PGDATA и WAL используется представление backup.history. Оно учитывает представления backup.data_history и backup.wal_history. Состояние completed выставляется только тогда, когда для сессии PGDATA существует успешно завершенная сессия WAL, скопировавшая необходимый архив WAL (поле data_history.stop_walfile).
SELECT * FROM backup.history;
session_id | state | tli | start_time | start_lsn | stop_time | stop_lsn | duration
------------+------------------------+-----+------------------------+------------+------------------------+------------+----------
FULL-5 | completed | 40 | 2020-11-09 16:36:09+03 | 2/50000028 | 2020-11-09 16:46:59+03 | 2/5103C430 | 00:10:50
FULL-5 | completed | 40 | 2020-11-09 16:47:01+03 | 2/53000028 | 2020-11-09 16:47:36+03 | 2/53000108 | 00:00:35
Где:
session_id– уникальный идентификатор сессии;state– состояние сессии;tli– номер линии времени снятой копии;start_time– начало выполнения сессии;start_lsn– позиция WAL-сегмента при переходе БД в режим снятия РК;stop_time– конец выполнения сессии;stop_lsn– позиция WAL-сегмента при выходе БД из режима снятия РК;duration– длительность сессии (stop_time-start_time).
Автоматическая очистка истории старых резервных копий
В файле backup_state хранится состояние нескольких резервных копий (по умолчанию последние 6).
Размер хранимой истории задается параметром утилиты manage_backup.bin: --rotate-history N - количество успешных (completed) резервных копий, хранимых в истории (0 - история не удаляется).
История сессий WAL удаляется автоматически, удаляются все записи старше самой старой сессии полного резервного копирования. Таким образом, история содержит все сессии WAL, связанные с текущими сессиями полного копирования.
Ручная очистка истории резервных копий
Если файлы с историей резервных копий содержат данные в некорректном формате (например, в результате проблем с дисками), представления backup.*_history не смогут их прочитать. В таком случае будет выведена ошибка:
SELECT * FROM backup.history;
ERROR: invalid input syntax for type json
DETAIL: history file "/pgarclogs/06/backup_state" might be corrupted
HINT: you may need to clean up all backup history with "SELECT backup.reset_history()" CONTEXT: PL/pgSQL function backup.read_data_history() line 18 at RAISE
В случае возникновения этой ошибки можно воспользоваться механизмом ручной очистки истории. Для этого предусмотрена функция backup.reset_history(), доступная только администраторам БД:
SELECT backup.reset_history();
reset_history
---------------
(1 row)
После выполнения будут очищены сессии PGDATA и WAL. Также можно вручную удалить файлы /pgarclogs/{version}/backup_state и /pgarclogs/{version}/wal_backup_state или дождаться очередной сессии (PGDATA/WAL), которая сама очистит некорректные файлы.
Даже если файлы испорчены, сам процесс резервного копирования будет происходить без ошибок. В начале сессии испорченный файл перезапишется автоматически. Состояние старых резервных копий хранится в журнале /pgarclogs/{version}/backup_manager.log.
Если файлов backup_state и wal_backup_state не существует, соответствующие представления выполнятся без ошибок и вернут пустые наборы строк.
Устранение неисправностей
Ошибки, возникающие в процессе копирования, заносятся в журнал, в приложение backup_session и в файл backup_manager.log в каталоге резервного копирования.
При нештатном прерывании процедуры резервного копирования (например, при отключении сервера) может возникнуть ситуация, при которой незавершенная копия останется в промежуточном состоянии. Такая процедура считается неуспешной (эквивалентной failed). В начале следующей сессии резервного копирования такие зависшие состояния будут автоматически переведены в статус failed.
Сообщения системного журнала могут выводиться в формате, поддерживаемом данной функциональностью.
Использование модуля
Использование пользователями не предполагается.