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

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, включает в свой интервал stop_walfile и имеет состояние completed

completed

completed

Хотя бы одна сессия WAL началась после окончания сессии DATA, включает в свой интервал stop_walfile и имеет состояние started

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

Интеграция с системой мониторинга

В системе мониторинга используются следующие метрики:

Метрика

Запрос

Описание

backup completed count

SELECT count(state) FROM backup.history WHERE state = 'completed' AND start_time >= (now() - '1 day'::interval);

Возвращает количество успешных резервных копий за последние 24 часа

backup failed count

SELECT count(state) FROM backup.history WHERE state = 'failed' AND start_time >= (now() - '1 day'::interval);

Возвращает количество неуспешных резервных копий за последние 24 часа

backup wal failed count

SELECT count(state) FROM backup.wal_history WHERE state = 'failed' AND start_time >= (now() - '1 day'::interval);

Возвращает количество неуспешных резервных копий 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.

Сообщения системного журнала могут выводиться в формате, поддерживаемом данной функциональностью.

Использование модуля

Использование пользователями не предполагается.