Подготовка хоста с СУБД Postgres Pro

Для возможности резервного копирования данных кластера Postgres Pro при помощи СРК RuBackup на сервер следует установить следующие пакеты:

  • rubackup-client.deb — клиент резервного копирования;

  • rubackup-common.deb — общий пакет для СРК RuBackup;

  • rubackup-postgres-pro.deb — модуль резервного копирования данных Postgres Pro;

  • pg-probackup-std-13.deb — консольная утилита для создания резервных копий кластеров баз данных PostgreSQL и их восстановления;

  • python3-psycopg2 — драйвер PostgreSQL, совместимый с DB API 2.0.

Установка клиента RuBackup

Для осуществления резервного копирования и восстановления данных кластера Postgres Pro при помощи RuBackup на сервер должен быть установлен клиент RuBackup со всеми необходимыми модулями. Клиент RuBackup представляет собой фоновое системное приложение (демон или сервис), обеспечивающее взаимодействие с серверной группировкой RuBackup. Для выполнения резервного копирования кластеров СУБД Postgres Pro клиент RuBackup должен работать от имени суперпользователя (root в Linux и Unix).

Соответственно, для версий Postgres Pro 10 и ниже необходимо, чтобы сервер Postgres Pro был запущен от имени root.

Подробно процедура установки клиента описана в «Руководстве по установке серверов резервного копирования и Linux клиентов RuBackup», для операционной системы Windows — в «Руководстве по установке Windows клиентов RuBackup».

Установка пакетов модулей резервного копирования

Установка пакета модулей резервного копирования RuBackup производится из учётной записи с административными правами на узле с СУБД Postgres Pro после установки на него клиента RuBackup.

Для установки пакета модулей используйте следующую команду:

dpkg -i rubackup-postgres-pro.deb

Конфигурационный файл модуля

Для работы модуля необходимо произвести ручную настройку конфигурационного файла. Формат конфигурационного файла - YAML.

Конфигурационный файл модуля располагается по пути /opt/rubackup/etc/rb_module_postgres_pro.conf.

Содержание конфигурационного файла:

  • restore_target_action: возможные значения - (PAUSE, PROMOTE, SHUTDOWN). Задаёт действие, которое должен выполнить сервер по достижении цели восстановления.

    • По умолчанию установлено значение PAUSE, при котором после восстановления кластер находится в состоянии Read Only. Для того, чтобы кластер после восстановления был в режиме Read-Write нужно установить значение PROMOTE.

  • restore_target: возможные значения - (IMMEDIATE, LATEST).

    • LATEST — восстановить последнее возможное состояние, исходя из содержимого архива WAL.

    • IMMEDIATE - восстановить самое раннее из возможных согласованное состояние кластера;

  • restore_mode: возможные значения (NONE, CHECKSUM). Если значение параметра равно CHECKSUM, то pg_probackup при восстановлении будет повторно использовать валидные страницы доступные в каталоге кластера, если они не изменялись.

  • pg_probackup: Абсолютный путь до утилиты pg_probackup;

  • direct_restore: произвести восстановление в ресурс или в директорию.

Перед началом работы с модулем обязательно нужно указать актуальный полный путь до утилиты pg_probackup.

Подготовка к использованию pg_probackup

Для выполнения резервного копирования кластера Postgres Pro используется утилита pg_probackup. Перед использованием модуля необходимо выполнить следующие действия:

  • Инициализировать каталог резервных копий;

  • Добавить копируемый экземпляр в каталог копий;

  • Настроить копируемый кластер баз данных для использования pg_probackup.

Для инициализации каталога резервных копий используйте следующую команду:

pg_probackup init -B /opt/rubackup/mnt/pg_probackup

Не изменяйте данную команду. Если директория /opt/rubackup/mnt/pg_probackup уже существует, то она должна быть пустой.

После выполнения данной команды утилита pg_probackup создаст подкаталоги в каталоге резервных копий /opt/rubackup/mnt/pg_probackup:

wal

каталог для файлов WAL

backups

каталог для файлов резервных копий.

Определение копируемого экземпляра

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

Для добавления копируемого экземпляра при помощи pg_probackup выполните команду:

pg_probackup add-instance -B /opt/rubackup/mnt/pg_probackup -D каталог_данных --instance имя_экземпляра (по названию каталога данных)
каталог_данных

это каталог, в котором хранятся все данные кластера баз данных. Например, для кластера postgres СУБД Postgres Pro 13 каталогом данных будет /var/lib/pgpro/std-13/data/.

Имя экземпляра должно совпадать с именем каталога данных. Например, добавляется каталог данных /var/lib/pgpro/std-13/data/, значит именем экземпляра будет data.

Директория /opt/rubackup/mnt/pg_probackup и все вложенные в неё папки должны быть доступны для записи и чтения пользователю postgres, а также пользователю, под контролем которого работает клиент RuBackup.

Обеспечить доступ можно следующим образом:

sudo chgrp postgres -R /opt/rubackup/mnt/pg_probackup
sudo chmod g+rwx -R /opt/rubackup/mnt/pg_probackup

Если планируется использование модуля для резервного копирования кластеров Postgres Pro в составе patroni, то необходимо выполнить следующую команду:

pg_probackup set-config -B /opt/rubackup/mnt/pg_probackup/ --instance=patroni --pghost ip_кластера
ip_кластера

ip адрес копируемого инстанса patroni.

Настройка копируемого кластера баз данных для использования pg_probackup

Для выполнения резервного копирования в защищённом режиме необходимо создать роль с ограниченными правами и базу данных резервного копирования. Имя роли, пароля и базы данных условны и могут быть изменены по усмотрению пользователя. Последовательность действий следующая:

  • Сначала создайте базу данных резервного копирования. Данная операция производится от имени пользователя postgres:

su postgres
createdb backupdb
  • Далее описан процесс создания роли для выполнения резервного копирования. В целях обеспечения безопасности копируемых данных, создаваемая роль будет обладать минимальными правами, необходимыми для выполнения резервного копирования экземпляра Postgres Pro. В этом примере такой ролью будет rubackup_backuper.

    • Выполните подключение к базе данных backupdb от имени пользователя postgres:

sudo -u postgres psql -d backupdb
  • Далее, в psql создайте роль rubackup_backuper (имя пользователя может быть изменено) и задайте пароль (в качестве пароля укажите желаемый пароль вместо 12345). Затем, при помощи приведённого ниже скрипта, определите следующие разрешения на сервере Postgres Pro (только в базе данных, к которой производится подключение).

Для Postgres Pro версии 14 и ниже:

BEGIN;
CREATE ROLE rubackup_backuper WITH LOGIN;
ALTER USER rubackup_backuper WITH PASSWORD ‘12345’;
GRANT USAGE ON SCHEMA pg_catalog TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO rubackup_backuper;
ALTER ROLE rubackup_backuper WITH REPLICATION;
COMMIT

Для Postgres Pro 15:

BEGIN;
CREATE ROLE rubackup_backuper WITH LOGIN;
ALTER USER rubackup_backuper WITH PASSWORD ‘12345’;
GRANT USAGE ON SCHEMA pg_catalog TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start(text, boolean) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop(boolean) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO rubackup_backuper;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO rubackup_backuper;
ALTER ROLE rubackup_backuper WITH REPLICATION;
COMMIT
  • Создайте файл .pgpass в каталоге /root. В файле /root/.pgpass необходимо указать данные для подключения к ранее созданной базе данных и для репликации.

Это распространённый способ хранения информации о соединении в PostgreSQL вместо ввода пароля при каждой совершённой операцией с pg_probackup.

Этот файл должен содержать строки в таком формате:

сервер:порт:база_данных:имя_пользователя:пароль

Пример:

Image1

Файл .pgpass обязательно должен находиться в домашнем каталоге суперпользователя /root. Не меняйте местами информацию в строке, она должна быть указана как в примере. Также, маска разрешений файла должна соответствовать маске 0600. Если одно из этих условий будет нарушено, то выполнение резервной копии будет прервано ошибкой.

  • Далее необходимо произвести изменения в файле pg_hba.conf. Найти конфигурационный файл, относящийся к настраиваемому кластеру, можно так:

sudo -u postgres psql
psql –c 'show hba_file'

Вызовите psql при помощи команды:

sudo -u postgres psql

Если для пользователя postgres не установлен пароль, установите его изменив 12345 на подходящий:

alter user postgres with password ‘12345’

В конец файла pg_hba.conf добавьте следующие строки:

host	backupdb	rubackup_backuper	127.0.0.1/32	md5
host	replication	rubackup_backuper	127.0.0.1/32	md5

Вместо peer везде установите md5. Пример итогового файла:

Image2

Проверяем не было ли опечаток и перечитываем конфигурацию:

psql -c 'select * from pg_hba_file_rules'
psql -c 'select pg_reload_conf()'
Image3

После реализации данных настроек модуль сможет выполнять полное резервное копирование и дифференциальное резервное копирование в режиме DELTA используя режим доставки WAL по умолчанию (ARCHIVE).

Настройка потокового резервного копирования

Для настройки потокового резервного копирования (STREAM) требуется произвести изменения в файле postgresql.conf, который находится внутри копируемого кластера. Например, директорией кластера СУБД Postgres Pro 13 является /var/lib/pgpro/std-13/data/. Обратите внимание на то, что расположение файла может отличаться в зависимости от дистрибутива Linux, версии Postgres Pro и кластера баз данных.

Выполните следующие действия:

  • установите для параметра max_wal_senders достаточно большое значение, предусматривающее минимум одно подключение для процесса резервного копирования;

  • задайте для параметра wal_level значение выше minimal.

Если вы не планируете производить дальнейшую настройку, то после внесённых изменений в файл postgresql.conf необходимо перезагрузить сервер Postgres Pro при помощи команды:

sudo systemctl restart postgrespro-std-13.service

После реализации данных настроек модуль сможет выполнять полное резервное копирование и дифференциальное резервное копирование в режимах DELTA используя потоковую доставку WAL (STREAM).

Настройка непрерывного архивирования WAL

Для выполнения копирования в режиме PAGE и восстановления резервных копий на момент времени (recovery-target) должно осуществляться непрерывное архивирование WAL.

Чтобы настроить непрерывное архивирование, выполните следующие действия:

  • задайте для параметра wal_level значение выше minimal.

  • если вы настраиваете резервное копирование на ведущем сервере, параметр archive_mode должен иметь значение on или always. Для выполнения резервного копирования на ведомом требуется значение always.

  • установите параметр archive_command:

    archive_command = '/путь_инсталляции/pg_probackup archive-push -B /opt/rubackup/mnt/pg_probackup --instance имя_экземпляра --wal-file-path %p --wal-file-name %f [параметры_удалённого_режима]'
    путь_инсталляции

    путь к каталогу установленной версии pg_probackup, которую вы хотите использовать

    имя_экземпляра

    должно указывать на уже проинициализированный для данного кластера БД копируемый экземпляр

    параметры_удалённого_режима

    должны задаваться только в случае расположения архива WAL в удалённой системе.

Если вы планируете выполнять страничное копирование и/или делать копии с ведомого сервера, используя режим доставки WAL ARCHIVE, при недостаточной транзакционной активности может потребоваться долго ждать заполнения очередного сегмента WAL.

Чтобы ограничить время ожидания, вы можете воспользоваться параметром archive_timeout на ведущем сервере.

Значение этого параметра должно быть меньше значения --archive-timeout (по умолчанию 5 минут), чтобы заполненный сегмент успел передаться ведомому серверу и попасть в архив WAL, прежде чем копирование прервётся по тайм-ауту, заданному параметром --archive-timeout.

Если вы не планируете производить дальнейшую настройку, то после внесённых изменений в файл postgresql.conf необходимо перезагрузить сервер Postgres Pro при помощи команды:

sudo systemctl restart postgrespro-std-13.service

После реализации данных настроек модуль сможет выполнять дифференциальное резервное копирование в режиме PAGE используя режимы доставки ARCHIVE и STREAM.

Настройка копирования в режиме PTRACK

Перед выполнением дифференциальной резервной копии в режиме PTRACK выполните следующие подготовительные действия:

  • Зайдите от имени администратора БД в backupdb:

    sudo -u postgres psql -d backupdb

    и выполните запрос:

    CREATE EXTENSION ptrack
  • Далее перейдите к редактированию конфигурационного файла postgresql.conf:

    • задайте для параметра shared_preload_libraries значение ptrack:

    • добавьте в конец конфигурационного файла параметр ptrack.map_size и установите его значение по следующим правилам:

Для оптимальной производительности рекомендуется задавать ptrack.map_size равным N ÷ 1024, где N — объём кластера Postgres Pro в мегабайтах. Увеличивать значение ptrack.map_size сверх рекомендуемого не имеет большого практического смысла. Максимально допустимое значение — 1024.

Если до этих изменений была сделана полная резервная копия, то после вступления изменений в силу необходимо сделать новую полную резервную копию, иначе дифференциальное резервное копирование в режиме PTRACK прервётся ошибкой.

  • Выполните команду для перезапуска сервиса:

sudo systemctl restart postgrespro-std-13.service

После реализации данных настроек модуль сможет выполнять дифференциальное резервное копирование в режиме PTRACK используя режимы доставки ARCHIVE и STREAM.

Завершение настройки кластера

После выполнения подготовки целевого кластера к выполнению резервного копирования необходимо перезапустить клиента RuBackup:

rubackup_client stop
rubackup_client start

В результате клиент должен сообщить о том, что модуль резервного копирования Postgres Pro готов к работе:

Try to check module: Postgres Pro ...
Execute OS command: /opt/rubackup/modules/rb_module_postgres_pro -t 2>&1
... module Postgres Pro was checked successfully