Подготовка хоста с СУБД 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
Для выполнения резервного копирования кластера Postgres Pro используется утилита pg_probackup
.
Перед использованием модуля необходимо выполнить следующие действия:
-
Инициализировать каталог резервных копий;
-
Добавить копируемый экземпляр в каталог копий;
-
Настроить копируемый кластер баз данных для использования
pg_probackup
.
Для инициализации каталога резервных копий используйте следующую команду:
pg_probackup init -B /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/
.
Имя экземпляра должно совпадать с именем каталога данных. Например, добавляется каталог данных |
Директория |
Обеспечить доступ можно следующим образом:
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
.
Этот файл должен содержать строки в таком формате:
сервер:порт:база_данных:имя_пользователя:пароль
Пример:
Файл |
-
Далее необходимо произвести изменения в файле
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
. Пример итогового файла:
Проверяем не было ли опечаток и перечитываем конфигурацию:
psql -c 'select * from pg_hba_file_rules'
psql -c 'select pg_reload_conf()'
После реализации данных настроек модуль сможет выполнять полное резервное копирование и дифференциальное резервное копирование в режиме 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, при недостаточной транзакционной активности может потребоваться долго ждать заполнения очередного сегмента Чтобы ограничить время ожидания, вы можете воспользоваться параметром Значение этого параметра должно быть меньше значения |
Если вы не планируете производить дальнейшую настройку, то после внесённых изменений в файл 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