Подготовка СУБД 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