ptrack. Инкрементальное резервное копирование
Версия: 2.4.
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
ptrack
реализует механизм инкрементального резервного копирования на уровне блоков для PostgreSQL. В СУБД Pangolin ptrack
используется для создания инкрементных резервных копий с помощью менеджера резервного копирования и восстановления pg_probackup
.
В Pangolin предусмотрено создание инкрементальной резервной копии в одном из двух режимов:
STREAM
– включает все файлы, необходимые для восстановления кластера до состояния, соответствующего моменту создания резервной копии. Независимо от того, настроено ли непрерывное архивирование или нет, сегменты WAL, необходимые для последовательного восстановления, передаются по протоколу репликации во время резервного копирования и включаются в файлы резервной копии. Поэтому такие резервные копии называются автономными или самодостаточными;WAL ARCHIVE
– полагается на непрерывное архивирование для обеспечения последовательного восстановления. Это режим доставки WAL по умолчанию.
Доработка
Доработка: Добавлены подсказки для выбора оптимальных параметров
ptrack
.Версия: 2.4.
Расширение ptrack
отслеживает изменения в базе данных и отображает их в битовую карту. Размер битовой карты задается при старте кластера и не увеличивается автоматически. Когда база данных растет, размер битового массива становится недостаточным для хранения всех изменений. Это приводит к «слепливанию страниц». В результате разные блоки данных отображаются в одних и тех же ячейках битового массива, что вызывает коллизии.
Коллизии ведут к ложноположительным результатам: блок данных не был изменен, но в битовой карте соответствующая ячейка помечена как измененная. Ложноположительные срабатывания повышают нагрузку на систему и увеличивают затраты на создание инкрементальной резервной копии.
Доработка добавляет подсказки для пользователя, как только размер битовой карты становится недостаточным для текущего размера базы данных.
Ограничения
Если проверка размера битовой карты производится с помощью background worker
, в параметрах расширения необходимо указать имя существующей базы, к которой будет подключаться background worker
. Результат работы расширения не зависит от того, к какой конкретно базе будет подключаться background worker
, единственное требование – база с указанным именем должна существовать в кластере.
Установка
Для включения расширения выполните шаги:
-
Добавьте
ptrack
в список предзагружаемых библиотек, для этого в конфигурационном файле внесите имяptrack
в параметрshared_preload_libraries
:- для конфигурации standalone в файле
vim $PGHOME/postgresql.conf
; - для конфигурации cluster в файле
vim /etc/pangolin-manager/postgres.yml
.
shared_preload_libraries = 'ptrack'
- для конфигурации standalone в файле
-
Перезапустите СУБД Pangolin:
systemctl restart postgresql
-
Включите расширение
ptrack
:CREATE EXTENSION IF NOT EXISTS ptrack;
-
В конфигурационном файле задайте параметр
ptrack.map_size
равнымN/1024
, гдеN
— объем кластера СУБД Pangolin в мегабайтах, а так же установите параметрwal_level
на уровнеreplica
или выше:- для конфигурации standalone в файле
vim $PGHOME/postgresql.conf
; - для конфигурации cluster в файле
vim /etc/pangolin-manager/postgres.yml
.
ptrack.map_size = 'N/1024'
- для конфигурации standalone в файле
Использование модуля
Создание инкрементальной резервной копии
Включение функциональности для создания инкрементальной резервной копии требует пошаговой настройки:
- Включения и настройки расширения -
ptrack
. - Включения
wal_level
на уровнеreplica
и выше. - Однократного снятия полной резервной копии БД и хранения ее в хранилище резервных копий на всем протяжении жизни БД, так как последующие инкрементальные копии будут использовать полную резервную копию, как родительскую при восстановлении.
- Выдачи прав на исполнение функции
ptrack_init_lsn
пользователю с правами на создание резервных копий.
До создания полной резервной копии, расширение ptrack
уже должно работать, и после этого его нельзя отключать, так как это приведет к отсутствию некоторых блоков в резервной копии, что сделает резервную копию не консистентной.
Для того чтобы оперативно узнать подходят ли настройки СУБД для создания инкрементальной резервной копии, выполните следующие действия:
-
Проверьте, работает ли расширение
ptrack
:SELECT * FROM pg_extension WHERE extname = 'ptrack';
-
Проверьте, что конфигурационный параметр
ptrack.map_size
задан равным N/1024, где N — объем кластера СУБД Pangolin в мегабайтах:SHOW ptrack.map_size;
-
Проверьте, что конфигурационный параметр
wal_level
задан вreplica
или выше:SHOW wal_level;
Ниже приведено подробное описание каждого шага настройки параметров.
Схема процесса инкрементального резервного копирования
Для инкрементального резервного копирования есть ограничения:
- Необходимо сконфигурировать размер файла карты изменений с запасом на будущее. При расширении/урезании размера, карта изменений создается заново и все старые записи стираются.
- Для создания инкрементальных резервных копий необходимо создать по крайне мере одну полную резервную копию при работающем расширении
ptrack
. - При использовании утилиты
pg_resetwal
текущая карта изменений стирается, после чего необходимо заново пройти шаги, описанные в процессе «Создание инкрементальной резервной копии», чтобы восстановить работуptrack
. - При использовании утилиты
pg_rewind
(в том числе при операцияхfailover
/switchover pangolin-manager
) текущая карта изменений стирается, после чего необходимо заново пройти шаги, описанные в процессе «Создание инкрементальной резервной копии», чтобы восстановить работуptrack
.
Проверка полной резервной копии на существование
Перед поиском полной резервной копии необходимо выполнить поиск каталога резервных копий, для этого:
-
Пользователем ОС с правами
superuser
выполните поиск:sudo find / -name "pg_probackup.conf"
-
В полученных файлах проверьте содержимое секции
pgdata
командой:cat <полный путь до файла pg_probackup.conf> | grep pgdata
Если в одном из каталогов с такими файлом секция
pgdata
совпадает с директорией данных БД, тогда каталог резервных копий есть, иначе его нет. Подробнее о создании полной резервной копии можно узнать в официальной документации pg_probackup.
В дальнейшем в качестве имени каталога резервных копий необходимо использовать имя каталога на три уровня выше каталога, в котором нашелся файл pg_probackup.conf
. А в качестве имени экземпляра – имя каталога на один уровень выше каталога, в котором нашелся файл pg_probackup.conf
.
Пример:
Файл нашелся в каталоге: /pgarclogs/06/backups/clustername/pg_probackup.conf
.
Имя каталога резервных копий: /pgarclogs/06/
.
Имя экземпляра: clustername
.
Проверьте, создавалась ли полная резервная копия:
/opt/pangolin-backup-tools/bin/pg_probackup show -B <имя каталога резервных копий>
Наличие записей с Mode = FULL
и Status = OK
говорит о наличии полных резервных копий.
Предоставление пользователю с правами на репликацию права на создание инкрементальных копий
Проверьте, имеет ли пользователь с правами на репликацию права на создание инкрементальной копии:
SELECT proname,proacl,pronamespace FROM pg_proc WHERE proname='ptrack_init_lsn';
Проверка настройки завершена успешно, если в выводе для каждой функции присутствует строка <имя пользователя бэкап>=X
.
Для дальнейшего использования получите имя пространства имен, где находиться функция ptrack_init_lsn
:
SELECT nspname FROM pg_namespace WHERE oid=<pronamespace>;
Вместо <pronamespace>
необходимо подставить OID, полученный из столбца pronamespace
из вывода функции выше.
Если пользователь с правами на репликацию не имеет прав на создание инкрементальной копии, предоставьте:
GRANT EXECUTE ON FUNCTION <nspname>.ptrack_init_lsn() TO <имя пользователя бэкап>;
Где <nspname>
, значение пространства имен, полученное выше.
Создание инкрементальной резервной копии в режиме STREAM
Пример команды для выполнения копии в режиме STREAM (выполняется пользователем ОС с правами на управление СУБД):
/opt/pangolin-backup-tools/bin/pg_probackup backup -B <имя папки резервных копий> --instance <имя экземпляра> --progress --stream -b PTRACK -U <имя пользователя бэкап> -d <имя БД> -h localhost -p <порт СУБД>
В случае ошибки из-за отсутствия родительской резервной копии необходимо выполнить создание полной резервной копии и повторить текущую операцию.
Создание инкрементальной резервной копии в режиме WAL ARCHIVE
Перед выполнением команды для создания копии необходимо убедиться что правильно настроены параметры:
hot_standby
установлен вon
(только для ведомого сервера);full_page_writes
установлен вon
(только для ведущего сервера);archive_mode
установлен вon
илиalways
для ведущего сервера или standalone конфигурации, вalways
для ведомого.
Следующий параметр приведен для примера и приводит настройки для непрерывного архивирования WAL в локальный каталог:archive_command
установлен в pg_probackup archive-push -B <имя папки резервных копий> --instance <имя экземпляра> --wal-file-path=%p --wal-file-name=%f --compress --overwrite --batch-size=100
.
Пример команды для выполнения копии в режиме WAL ARCHIVE (выполняется пользователем ОС с правами на управление СУБД):
/opt/pangolin-backup-tools/bin/pg_probackup backup -B <имя папки резервных копий> --instance <имя экземпляра> --progress -b PTRACK -U <имя пользователя бэкап> -d <имя БД> -h localhost -p <порт СУБД>
Подсказки для выбора оптимальных параметров ptrack
- Добавлен фоновый процесс
background worker
, который запускается при старте расширения.background worker
проверяет суммарный размер баз данных в кластере один раз в заданный период времени и сравнивает его с заданным размером битовой карты. Если размер битовой карты недостаточный, в лог-файл записывается соответствующее предупреждение.
WARNING! The size of ptrack map (%ld MB) is too little.
Recommend to scale it up, at least to <recommended_size> MB.
Параметры background worker
настраиваемые в конфигурационном файле postgresql.conf
:
-
ptrack.naptime
– это интервал работыbackground worker
, выраженный в секундах. Значение этого параметра по умолчанию определяется настройкой GUC-параметраDEFAULT_WORKER_TIMEOUT
. Если установлено значение0
, то фоновый процесс не запускается, но работа расширения продолжается без ошибок. Чтобы активировать фоновый процесс, необходимо установить положительное целое число, которое будет определять интервал в секундах между проверками соотношения размеров кластера и битовой карты. Например, для установки периода работы фонового процесса в 30 минут, нужно указать:ptrack.naptime = 1800 # 1800 секунд = 30 минут
-
ptrack.database_name
– имя базы данных, к которой подключаетсяbackground worker
. Значение этого параметра по умолчанию определяется настройкой GUC-параметраDEFAULT_DATABASE_NAME_TO_ATTACH
. По умолчанию используется база данныхpostgres
. Данный параметр может оставаться пустым только в том случае, если фоновый процесс отключен, то есть когда значение параметраptrack.naptime
равно0
. В остальных случаях этот параметр обязательно должен быть заполнен.
Оба параметра устанавливаются только суперпользователем перед запуском сервера, их нельзя менять при запущенном сервере. Для изменения значений параметров требуется перезапуск сервера.
Схема работы расширения ptrack
с автоматической проверкой размера битовой карты фоновым процессом background worker
:
- Добавлена проверка размера битовой карты в ручном режиме. Применяется сценарий, когда
background worker
отключен. Для выполнения ручной проверки были добавлены две новые функции, которые доступны через командную строку psql:
-
ptrack_is_map_relevant()
— проверяет соответствие размеров битовой карты и кластера. Возвращает логическое значениеTrue
, если размер битовой карты соответствует размеру кластера иFalse
в обратном случае. -
ptrack_check_map_size()
— проверяет соответствие размеров битовой карты и кластера, но дополнительно выводит сообщение с подробной информацией о результатах проверки:WARNING! The size of ptrack map (%ld MB) is too little.
Recommend to scale it up, at least to <recommended_size> MB.
Схема работы расширения ptrack
с ручной проверкой размера битовой карты, background worker
отключен:
Расширение ptrack
выделяет память в общей памяти и на диске. Размер этой памяти определяется параметром ptrack.map_size
. При каждой контрольной точке текущее состояние битовой карты записывается в файл на диске. В случае сбоя кластера, состояние битовой карты может быть восстановлено из файла на диске. Рекомендуется, чтобы суммарный размер всех баз данных в кластере не превышал размер битовой карты более чем в 1024 раза. Например, если суммарный размер баз данных составляет 1 Тб, то для битовой карты рекомендуется выделить не менее 1 Гб памяти.
Увеличение размера битовой карты целесообразно, если в базе данных происходят частые обновления данных и/или часто создаются резервные копии. Если же обновления и резервные копии создаются редко, рекомендуется отключить мониторинг размера битовой карты, чтобы избежать ненужных предупреждений.
Отключение функциональности
Для отключения функциональности:
-
Выполните команду:
DROP EXTENSION IF EXISTS 'ptrack';
-
Удалите из конфигурационного файла (
postgresql.conf
/postgres.yml
) имяptrack
из параметраshared_preload_libraries
. -
Удалите из конфигурационного файла параметр
ptrack.map_size
. -
Перезапустите СУБД Pangolin.