ptrack. Инкрементальное резервное копирование#

Версия: 2.4.

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

ptrack реализует механизм инкрементального резервного копирования на уровне блоков для PostgreSQL. В СУБД Pangolin ptrack используется для создания инкрементных резервных копий с помощью менеджера резервного копирования и восстановления pg_probackup.

В Pangolin предусмотрено создание инкрементальной резервной копии в одном из двух режимов:

  • STREAM – включает все файлы, необходимые для восстановления кластера до состояния, соответствующего моменту создания резервной копии. Независимо от того, настроено ли непрерывное архивирование или нет, сегменты WAL, необходимые для последовательного восстановления, передаются по протоколу репликации во время резервного копирования и включаются в файлы резервной копии. Поэтому такие резервные копии называются автономными или самодостаточными;

  • WAL ARCHIVE – полагается на непрерывное архивирование для обеспечения последовательного восстановления. Это режим доставки WAL по умолчанию.

Доработка#

Доработка не проводилась.

Ограничения#

Ограничения отсутствуют.

Установка#

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

  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.

Проверьте, создавалась ли полная резервная копия:

$PGHOME/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 (выполняется пользователем ОС с правами на управление СУБД):

$PGHOME/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 (выполняется пользователем ОС с правами на управление СУБД):

$PGHOME/bin/pg_probackup backup -B <имя папки резервных копий> --instance <имя экземпляра> --progress -b PTRACK -U <имя пользователя бэкап> -d <имя БД> -h localhost -p <порт СУБД>

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

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

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

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

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

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