Подготовка к работе

С точки зрения резервного копирования и восстановления, система RuPost состоит из СУБД PostgreSQL и «холодного» хранилища писем.

Модуль должен располагаться на узле с СУБД PostgreSQL. Если СУБД развёрнута в кластере Patroni, то модуль должен быть установлен и настроен на каждом узле кластера.

1. Подготовка «холодного» хранилища

«Холодное» хранилище писем должно быть примонтировано к узлу с модулем с помощью NFS (к каждому узлу кластера).

Предварительно на узле с модулем должен быть установлен клиент NFS:

sudo apt update

sudo apt install nfs-common

Чтобы примонтировать «Холодное хранилище» на системе на базе Deb (Ubuntu, Debian, Mint и др.) используйте команду:

sudo mount -t nfs ip_address:/nfs_src_folder destination_folder

Где «ip_address» - это IP-адрес узла с «холодным» хранилищем писем,

«nfs_src_folder» - исходное расположение «холодного» хранилища писем,

«destination_folder» - точка монтирования «холодного» хранилища писем на узле с модулем.

Для того, чтобы монтирование осталось после перезагрузки узла с модулем, необходимо в файл /etc/fstab добавить строку:

ip_address:/nfs_src_folder destination_folder nfs auto 0 0

В файле конфигурации модуля «/opt/rubackup/etc/rb_module_rupost.conf» необходимо указать путь до «холодного» хранилища:

cold_storage destination_folder

2. Подготовка СУБД PostgreSQL

Подготовка СУБД PostgreSQL к выполнению резервного копирования при помощи СРК RuBackup включает в себя:

  1. Подготовку сервера с СУБД PostgreSQL;

  2. Создание пользователя СУБД для безопасного выполнения резервной копии PostgreSQL.

2.1. Подготовка сервера с СУБД PostgreSQL

Для подготовки сервера с СУБД PostgreSQL необходимо выполнить следующие шаги:

  1. Для обеспечения доступа пользователя rubackup_backuper к СУБД измените метод доступа в конфигурационном файле СУБД PostgreSQL /etc/postgresql/12/main/pg_hba.conf (расположение файла может отличаться в зависимости от дистрибутива Linux и версии PostgreSQL) на md5.

  2. Для непрерывного архивирования и восстановления СУБД PostgreSQL необходимо включить архивирование WAL, для чего:

    • в конфигурационном файле СУБД PostgreSQL /etc/postgresql/12/main/postgresql.conf (расположение файла может отличаться в зависимости от дистрибутива Linux и версии PostgreSQL) настройте следующие параметры:

      wal_level = replica
      archive_mode = on
      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 = 'cp /opt/rubackup/mnt/postgresql_archives/%f %p'
  3. После внесения изменений в конфигурационный файл перезапустите 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

2.2. Создание пользователя СУБД для безопасного выполнения резервной копии PostgreSQL

Для выполнения операции создания базовой резервной копии пользователь должен обладать правами на выполнение функций начала и окончания резервного копирования экземпляра PostgreSQL. Для настройки выполните следующие действия:

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

    sudo -u postgres psql
  2. В 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_rupost.conf необходимо указать имя пользователя и его пароль:

    cold_storage destination_folder
    username rubackup_backuper
    password 12345
    port 5432
    archive_catalog /opt/rubackup/mnt/postgresql_archives
    pg_ctl /usr/lib/postgresql/12/bin/pg_ctl
    auto_remove_wal yes
    direct_restore yes
    postgresql_admin postgres

    Для параметра pg_ctl необходимо указать абсолютный путь для используемой версии PostgreSQL.