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

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, единственное требование – база с указанным именем должна существовать в кластере.

Установка

Для включения расширения выполните шаги:

  1. Добавьте ptrack в список предзагружаемых библиотек, для этого в конфигурационном файле внесите имя ptrack в параметр shared_preload_libraries:

    • для конфигурации standalone в файле vim $PGHOME/postgresql.conf;
    • для конфигурации cluster в файле vim /etc/pangolin-manager/postgres.yml.
    shared_preload_libraries = 'ptrack'
  2. Перезапустите СУБД Pangolin:

    systemctl restart postgresql
  3. Включите расширение ptrack:

    CREATE EXTENSION IF NOT EXISTS ptrack;
  4. В конфигурационном файле задайте параметр 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'

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

Создание инкрементальной резервной копии

Включение функциональности для создания инкрементальной резервной копии требует пошаговой настройки:

  1. Включения и настройки расширения - ptrack.
  2. Включения wal_level на уровне replica и выше.
  3. Однократного снятия полной резервной копии БД и хранения ее в хранилище резервных копий на всем протяжении жизни БД, так как последующие инкрементальные копии будут использовать полную резервную копию, как родительскую при восстановлении.
  4. Выдачи прав на исполнение функции ptrack_init_lsn пользователю с правами на создание резервных копий.

Внимание!

До создания полной резервной копии, расширение ptrack уже должно работать, и после этого его нельзя отключать, так как это приведет к отсутствию некоторых блоков в резервной копии, что сделает резервную копию не консистентной.

Для того чтобы оперативно узнать подходят ли настройки СУБД для создания инкрементальной резервной копии, выполните следующие действия:

  1. Проверьте, работает ли расширение ptrack:

    SELECT * FROM pg_extension WHERE extname = 'ptrack';
  2. Проверьте, что конфигурационный параметр ptrack.map_size задан равным N/1024, где N — объем кластера СУБД Pangolin в мегабайтах:

    SHOW ptrack.map_size;
  3. Проверьте, что конфигурационный параметр wal_level задан в replica или выше:

    SHOW wal_level;

Ниже приведено подробное описание каждого шага настройки параметров.

Схема процесса инкрементального резервного копирования

Внимание!

Для инкрементального резервного копирования есть ограничения:

  1. Необходимо сконфигурировать размер файла карты изменений с запасом на будущее. При расширении/урезании размера, карта изменений создается заново и все старые записи стираются.
  2. Для создания инкрементальных резервных копий необходимо создать по крайне мере одну полную резервную копию при работающем расширении ptrack.
  3. При использовании утилиты pg_resetwal текущая карта изменений стирается, после чего необходимо заново пройти шаги, описанные в процессе «Создание инкрементальной резервной копии», чтобы восстановить работу ptrack.
  4. При использовании утилиты pg_rewind (в том числе при операциях failover/switchover pangolin-manager) текущая карта изменений стирается, после чего необходимо заново пройти шаги, описанные в процессе «Создание инкрементальной резервной копии», чтобы восстановить работу ptrack.

Проверка полной резервной копии на существование

Перед поиском полной резервной копии необходимо выполнить поиск каталога резервных копий, для этого:

  1. Пользователем ОС с правами superuser выполните поиск:

    sudo find / -name "pg_probackup.conf"
  2. В полученных файлах проверьте содержимое секции 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

  1. Добавлен фоновый процесс 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:

  1. Добавлена проверка размера битовой карты в ручном режиме. Применяется сценарий, когда 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 Гб памяти. Увеличение размера битовой карты целесообразно, если в базе данных происходят частые обновления данных и/или часто создаются резервные копии. Если же обновления и резервные копии создаются редко, рекомендуется отключить мониторинг размера битовой карты, чтобы избежать ненужных предупреждений.

Отключение функциональности

Для отключения функциональности:

  1. Выполните команду:

    DROP EXTENSION IF EXISTS 'ptrack';
  2. Удалите из конфигурационного файла (postgresql.conf/postgres.yml) имя ptrack из параметра shared_preload_libraries.

  3. Удалите из конфигурационного файла параметр ptrack.map_size.

  4. Перезапустите СУБД Pangolin.