Подготовка СУБД PostgreSQL
Подготовка СУБД PostgreSQL к выполнению резервного копирования при помощи СРК RuBackup включает:
-
Подготовку сервера с СУБД PostgreSQL;
-
Создание пользователя СУБД для безопасного выполнения резервной копии PostgreSQL.
|
Для подготовки pg_probackup перейдите к разделу Резервное копирование с использованием подмодуля pg_probackup. |
|
Для корректной работы восстановления с развертыванием в ОС Alt
Linux необходимо в файле |
1. Подготовка сервера с СУБД PostgreSQL
Для подготовки сервера с СУБД PostgreSQL необходимо выполнить следующие действия:
-
Для обеспечения доступа пользователя rubackup_backuper к СУБД измените метод доступа в конфигурационном файле СУБД PostgreSQL
/etc/postgresql/12/main/pg_hba.conf(расположение файла может отличаться в зависимости от дистрибутива Linux и версии PostgreSQL) наmd5.
Рисунок 1. Пример итогового файла -
Для непрерывного архивирования и восстановления СУБД PostgreSQL необходимо включить архивирование WAL, для чего:
-
в конфигурационном файле СУБД PostgreSQL
/etc/postgresql/12/main/postgresql.conf(расположение файла может отличаться в зависимости от дистрибутива Linux и версии PostgreSQL) настройте следующие параметры:wal_level = replica archive_mode = on archive_command '/opt/rubackup/modules/rb_module_postgresql pgsql-archive-push %p'Также возможно использовать команду:
archive_command = 'cp %p /opt/rubackup/mnt/ postgresql_archives/%f' -
там же установите значение параметра
data_directory(если оно не определено), иначе модуль резервного копирования не сможет определить местоположение файлов СУБД:data_directory = '/var/lib/postgresql/12/main' -
в файле
postgresql.confдля версий PostgreSQL 12 и более новых, должна быть прописана строка, определяющая порядок развертывания СУБД из резервной копии:restore_command '/opt/rubackup/modules/rb_module_postgresql pgsql-archive-get %f %p'Также возможно использовать команду:
restore_command = 'cp /opt/rubackup/mnt/ postgresql_archives/%f %p'Без добавления этой строки для версий PostgreSQL 12 и более новых модуль будет отказываться стартовать и будет выдавать сообщение об ошибке:
Рисунок 2. Сообщение об ошибкеЕсли размер архива слишком большой, произведите сжатие архивных файлов WAL утилитой gzip:
archive_command = 'gzip < %p > /opt/rubackup/mnt/postgresql_archives/%f.gz'Для сжатия архивных файлов можно воспользоваться любой другой утилитой, но таким образом, чтобы имя WAL-файлов после сжатия было формата TTTTTTTTXXXXXXXXYYYYYYYY.extension, где extension – это расширение файла.
Для восстановления архива используйте утилиту gunzip или любую другую подходящую утилиту:
restore_command = 'gunzip < /opt/rubackup/mnt/postgresql_archives/%f.gz > %p'
-
-
После внесения изменений в конфигурационный файл перезапустите PostgreSQL командой:
sudo service postgresql restart
Значение параметра archive_command должно содержать каталог в файловой
системе сервера PostgreSQL, в который будут копироваться архивируемые
сегменты WAL.
В настройках RuBackup для каждой СУБД PostgreSQL в файле
/opt/rubackup/etc/rb_module_postgresql.conf определен параметр
archive_catalog, содержащий значение каталога, в котором предполагается
временное хранение архивных WAL-файлов. Значение этого параметра по
умолчанию:
/opt/rubackup/mnt/postgresql_archives/
При планировании установки СРК RuBackup вы можете назначить для хранения архивных WAL-файлов выделенное хранилище требуемого размера и сделать на него ссылку на том сервере PostgreSQL, где это требуется.
Объем необходимого пространства под архивные WAL-файлы зависит от
нагруженности базы данных и периодичности бэкапов, а также значения
параметра auto_remove_wal в конфигурационном файле.
|
Указанный каталог должен быть доступен для записи и чтения пользователю postgres, а также пользователю, под контролем которого работает клиент RuBackup! |
Обеспечить это можно командой:
sudo chown postgres:postgres /opt/rubackup/mnt/postgresql_archives/
Для правильной работы клиента RuBackup параметр archive_catalog в
конфигурации RuBackup и параметр archive_command в конфигурационном
файле PostgreSQL должны иметь одинаковое значение для одной и той же
СУБД.
После изменения параметров конфигурационного файла необходимо перезагрузить PostgreSQL при помощи команды:
sudo systemctl restart postgresql
При настройке резервного копирования PostgreSQL в ОС Astra Linux SE 1.6
и 1.7 необходимо в файле /etc/parsec/mswitch.conf для параметра
zero_if_notfound установить значение yes и затем перезагрузить сервис
PostgreSQL:
sudo service postgresql restart
2. Создание пользователя СУБД для безопасного выполнения базовой резервной копии PostgreSQL
Пользователь для выполнения операции создания базовой резервной копии должен обладать правами на выполнение функций начала и окончания резервного копирования экземпляра PostgreSQL. Для настройки выполните следующие действия:
-
Вызовите
psqlпри помощи команды:sudo -u postgres psql -
В
psqlсоздайте пользователяrubackup_backuper(в качестве пароля укажите желаемый пароль вместо12345):create user rubackup_backuper password '12345'; alter role rubackup_backuper with login;В PostgreSQL версии 14 и ниже используются функции pg_stop_backup и pg_start_backup, а в версии 15 и выше - pg_backup_stop и pg_backup_start.
grant execute on function pg_backup_start to rubackup_backuper; grant execute on function pg_backup_stop(bool, bool) to rubackup_backuper; grant execute on function pg_switch_wal to rubackup_backuper; grant pg_read_all_settings to rubackup_backuper;Вместо пользователя rubackup_backuper вы можете создать пользователя с другим именем и с таким же набором прав. В файле конфигурации модуля
/opt/rubackup/etc/rb_module_postgresql.confнеобходимо указать имя пользователя и его пароль:sudo cat /opt/rubackup/etc/ rb_module_postgresql.conf username rubackup_backuper password 12345Для параметра
pg_ctlнеобходимо указать абсолютный путь для используемой версии PostgreSQL.
3. Настройка SELinux
В некоторых случаях SELinux может блокировать выполнение резервного копирования модуля PostgreSQL. На это может указывать следующая ошибка в логах postgresql:
cp: cannot create regular file
'/opt/rubackup/mnt/postgresql_archives/00000001000004B500000077':
Permission denied
Для того, чтобы устранить данную ошибку, выполните следующие шаги:
-
Установите необходимые инструменты управления SELinux:
Убедитесь, что у вас установлен пакет policycoreutils-python-utils (или policycoreutils-python в зависимости от вашего дистрибутива):
sudo yum install policycoreutils-python-utils # For RHEL/CentOS/Fedora sudo apt install policycoreutils-python-utils # For Debian/Ubuntu -
Создайте пользовательский модуль политики SELinux:
Сначала создайте файл для определения вашей пользовательской политики. Например, создайте файл с именем
my_custom_policy.te:vi my_custom_policy.teДобавьте в этот файл следующее содержимое, заменив
/path/to/your/folderфактическим путем к каталогу, который вы хотите исключить, и именемmy_custom_t1пользовательского типа:module my_custom_policy 1.0; require { type unconfined_t; type my_custom_t; } type my_custom_t; allow unconfined_t my_custom_t:file { read write execute }; allow unconfined_t my_custom_t:dir { read write add_name remove_name }; -
Скомпилируйте и установите модуль политики:
-
Скомпилируйте модуль политики:
checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te semodule_package -o my_custom_policy.pp -m my_custom_policy.mod -
Установите модуль политики:
sudo semodule -i my_custom_policy.pp
-
-
Пометьте каталог пользовательским типом SELinux:
Используйте команду
semanage fcontext, чтобы добавить контекст, и команду restorecon, чтобы его применить:sudo semanage fcontext -a -t my_custom_t "/path/to/your/folder(/.*)?" sudo restorecon -R -v /path/to/your/folder