Резервное копирование с использованием подмодуля pg_probackup
1. Подготовка к использованию pg_probackup
Для корректной работы подмодуля необходимо наличие:
|
Для выполнения резервного копирования с помощью модуля PostgreSQL с подмодулем pg_probackup выполните следующие действия:
-
Запустите RBM командой:
rbm
После этого в открывшемся окне (Рисунок 1) введите наименование сервера RuBackup, имя пользователя и пароль.
Рисунок 1. Окно входа RBM -
Добавьте пул типа «Client defined» с помощью RBM либо командной строки (см. подробнее в документе «Руководство системного администратора RuBackup»);
-
Настройте Клиентское хранилище с помощью RBM либо командной строки (см. подробнее в документе «Руководство системного администратора RuBackup»);
В случае работы с подмодулем
pg_probackup
при выборе типа хранилища Cloud вам будет предложено ввести данные для работы с облачным хранилищем: хост облака, порт облака, бакет, безопасность облака, ID ключа доступа, секретный ключ доступа. Данная информация будет передаваться модулю клиента при выполнении различных операций и перезаписывать конфигурационный файл/etc/pg_probackup/s3.config
. Таким образом, указав данные в RBM, вы сможете обновить данные для всех клиентов, которые будут использовать данный пул. -
Настройте на клиентском хосте базу данных PostgreSQL;
-
Установите на клиентском хосте модуль для PostgreSQL Universal (
rb_module_postgresql
); -
Разверните клиент резервного копирования, сконфигурируйте и подключите его к серверу СРК на хосте, где установлен Модуль для PostgreSQL Universal;
-
Создайте в S3-хранилище MinIO папку, в которую будут помещаться резервные копии;
-
Настройте PTRACK на Клиенте для создания и восстановления инкрементальных копий табличных пространств CFS;
-
Настройте утилиту
pg_probackup
на Клиенте для работы с S3-хранилищем;
Для работы с S3-хранилищем MinIO в утилите pg_probackup нужно
использовать ключ --s3=minio
|
-
Для использования режима постраничного копирования (PAGE) настройте непрерывное архивирование WAL с сервера БД в СРК RuBackup.
2. Инициализация каталога резервных копий
Для начала работы подмодуля pg_probackup выполните
последовательно следующие команды от имени пользователя указанного в
параметре postgresql_admin
в конфигурационном файле модуля
(rb_module_postgresql.conf
), по умолчанию это пользователь postgres
.
(подробнее см. в официальной
документации):
pg_probackup init -B каталог_копий [--skip-if-exists] [параметры_s3] [--help]
pg_probackup add-instance -B каталог_копий -D каталог_данных --instance имя_экземпляра [--skip-if-exists] [параметры_s3] [--help]
Имя_экземпляра должно совпадать с именем каталог_данных. Например, если
добавляется каталог данных Директория |
Обеспечить доступ можно следующим образом:
sudo chgrp postgres -R /opt/rubackup/mnt/pg_probackup
sudo chmod g+rwx -R /opt/rubackup/mnt/pg_probackup
Ниже описаны параметры, которые необходимо задать для размещения копий в частном облачном хранилище. Эти параметры могут задаваться с любыми командами, которые pg_probackup выполняет через интерфейс S3:
-
--s3=s3_interface_provider
— задаёт провайдера, поддерживающего интерфейс S3. Возможные значения:-
minio — объектное хранилище MinIO, совместимое с облачным хранилищем S3. С этим провайдером по умолчанию используется протокол HTTP и порт 9000.
-
-
--s3-config-file=путь_к_файлу_конфигурации
. Если этот параметр опускается,pg_probackup
ищет файл конфигурации S3 сначала в/etc/pg_probackup/s3.config
, а затем в~postgres/.pg_probackup/s3.config
.
Подробнее о заполнении конфигурационного файла для работы с S3 см. официальную документацию (раздел «Параметры S3).
Примеры использования команд с S3:
-
Пример использования add-instance:
pg_probackup add-instance -B /opt/rubackup/mnt/pg_probackup --instance=data --pgdata=/var/lib/pgpro/ent-16/data --s3=minio
Если планируется использование модуля для резервного копирования кластеров Postgres Pro в составе patroni, то необходимо выполнить следующую команду:
sudo pg_probackup set-config -B /opt/rubackup/mnt/pg_probackup/ --instance=patroni --pghost ip_кластера
где ip_кластера
– это ip-адрес копируемого экземпляра patroni.
3. Настройка копируемого кластера баз данных для использования 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 15BEGIN; 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;
Для Postgres Pro 16 команды могут отличаться – см. официальную документацию.
-
-
Создайте файл
.pgpass
в домашнем каталоге пользователя указанного в параметре postgresql_admin в конфигурационном файле модуля (rb_module_postgresql.conf
), по умолчанию это пользовательpostgres
. В файле.pgpass
необходимо указать данные для подключения к ранее созданной базе данных и для репликации.Это распространённый способ хранения информации о соединении в PostgreSQL вместо ввода пароля при каждой совершённой операции с
pg_probackup
. Этот файл должен содержать строки в таком формате:сервер:порт:база_данных:имя_пользователя:пароль
Рисунок 2. Пример файла .pgpassФайл
.pgpass
обязательно должен находиться в домашнем каталоге пользователя указанного в параметре postgresql_admin в конфигурационном файле модуля (rb_module_postgresql.conf
), по умолчанию это пользователь postgres (домашний каталог —/var/lib/postgresql
). Не меняйте местами информацию в строке, она должна быть указана как в примере. Также, маска разрешений файла должна соответствовать маске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
При использовании HAProxy, необходимо в файл
pg_hba.conf
добавить следующие строки:host backupdb rubackup_backuper <IP-адрес хоста HAProxy> md5 host replication rubackup_backuper <IP-адрес хоста HAProxy> md5
Вместо peer везде установите md5. Пример итогового файла:
Рисунок 3. Пример файлаpg_hba.conf
Проверяем, не было ли опечаток, и перечитываем конфигурацию:
psql -c 'select * from pg_hba_file_rules' psql -c 'select pg_reload_conf()'
Рисунок 4. Проверка конфигурации
После реализации данных настроек модуль сможет выполнять полное резервное копирование и дифференциальное резервное копирование в режиме DELTA используя режим доставки WAL по умолчанию (ARCHIVE).
4. Настройка потокового резервного копирования
Для настройки потокового резервного копирования (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).
5. Настройка непрерывного архивирования 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 в удалённой системе.
Пример:
archive_command = '/opt/pgpro/ent-16/bin/pg_probackup archive-push -B /opt/rubackup/mnt/pg_probackup --instance data --wal-file-path=%p --wal-file-name=%f --s3=minio'
-
-
установите параметр restore_command:
restore_command = 'путь_инсталляции/pg_probackup archive-get -B каталог_копий --instance имя_экземпляра --wal-file-path=%p --wal-file-name=%f [параметры_удаленного_режима]
где каталог_копий – это каталог, предназначенный для резервных копий.
Пример:
restore_command = '/opt/pgpro/ent-16/bin/pg_probackup archive-get -B /opt/rubackup/mnt/pg_probackup --instance data --wal-file-path=%p --wal-file-name=%f --s3=minio'
Если вы планируете выполнять страничное копирование и/или делать копии
с ведомого сервера, используя режим доставки WAL ARCHIVE, при недостаточной
транзакционной активности может потребоваться долго ждать заполнения
очередного сегмента WAL. Чтобы ограничить время ожидания, вы можете
воспользоваться параметром |
Если вы не планируете производить дальнейшую настройку, то после
внесённых изменений в файл postgresql.conf
необходимо перезагрузить
сервер Postgres Pro при помощи команды:
sudo systemctl restart postgrespro-std-13.service
После реализации данных настроек модуль сможет выполнять дифференциальное резервное копирование в режиме PAGE, используя режимы доставки ARCHIVE и STREAM.
6. Настройка копирования в режиме PTRACK
Перед выполнением дифференциальной резервной копии в режиме PTRACK выполните подготовительные действия, как указано в разделе Настройка копирования в режиме PTRACK.
7. Завершение настройки кластера
После выполнения подготовки целевого кластера к выполнению резервного копирования необходимо перезапустить клиента RuBackup:
rubackup_client stop
rubackup_client start
В результате клиент должен сообщить о том, что модуль резервного копирования Postgres Pro готов к работе:
Try to check module: PostgreSQL...
Execute OS command: /opt/rubackup/modules/rb_module_postgres -t 2>&1
... module PostgreSQL was checked successfully
8. Принцип работы подмодуля pg_probackup
Подробную информацию о принципе работы подмодуля pg_probackup Вы можете посмотреть на официальном сайте Postgres Pro.
9. Пример использования подмодуля pg_probackup в Менеджере администратора RuBackup (RBM)
Чтобы выполнять регулярное резервное копирование кластера СУБД Postgres Pro, необходимо создать правило в глобальном расписании. Для этого выполните следующие действия:
-
Создайте правило Глобального расписания, для чего зайдите в раздел «Глобальное расписание» (Рисунок 5) и нажмите на кнопку «Добавить»;
Рисунок 5. Создание правила глобального расписания -
В открывшемся окне (Рисунок 6) выберите Клиент, на котором установлен Модуль для PostgreSQL Universal;
Рисунок 6. Выбор клиента, на котором установлен модуль для PostgreSQL Universal -
Выберите тип ресурса — «PostgreSQL universal»;
-
Откройте параметры Модуля нажатием кнопки «…» рядом с выбранным типом ресурса;
-
В появившемся окне (Рисунок 7) выберите подмодуль (engine) pg_probackup;
Рисунок 7. Выбор подмодуля -
Настройте число параллельных потоков (pg_pro_threads), в которые будет выполняться резервное копирование или восстановление. По умолчанию количество потоков равно 1;
-
Выберите режим резервного копирования («pg_pro_backup_mode») — (DELTA, PAGE, PTRACK). По умолчанию — DELTA;
Перед выполнением резервного копирования в режиме PAGE произведите настройку непрерывного архивирования WAL (см. Резервное копирование с использованием подмодуля pg_probackup). А перед выполнением резервного копирования в режиме PTRACK произведите настройку согласно Настройка копирования в режиме PTRACK.
-
Выберите, какой режим доставки WAL использовать (параметр pg_pro_stream, (Рисунок 8)): STREAM (во включенном положении, по умолчанию) или ARCHIVE (в выключенном положении);
Рисунок 8. Выбор режима доставки WAL
10. Настройка копирования в режиме PTRACK
Для корректной работы модуля PostgreSQL необходим ptrack версии 2.6.0 или выше. |
Перед выполнением инкрементальной резервной копии в режиме 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 postgres[имя_сервиса].service
После реализации данных настроек модуль сможет выполнять инкрементальное резервное копирование в режиме PTRACK, используя режимы доставки ARCHIVE и STREAM.
-
Зайдите от имени администратора БД в backupdb:
sudo -u postgres psql -d backupdb
и выполните следующий запрос:
CREATE EXTENSION ptrack;
-
Завершите настройку параметров Модуля нажатием кнопки «ОК»;
-
Выберите ресурс;
-
Выберите тип резервной копии — полная;
-
Выберите пул типа «Client Defined»;
Если будет выбран пул другого типа, задача завершится с ошибкой.
-
Выберите остальные параметры в окне правила глобального расписания и нажмите на кнопку «Применить».
Не забудьте установить флаг «С развертыванием» во время восстановления резервной копии |