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

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

Модуль должен иметь доступ к холодному[1] хранилищу.

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

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

Холодное[1] хранилище писем должно быть примонтировано к узлу с модулем с помощью NFS, для этого:

  1. На узле с модулем установите клиент NFS:

    sudo apt update
    
    sudo apt install nfs-common
  2. Примонтируйте холодное[1] хранилище:

    sudo mount -t nfs ip_address:/nfs_src_folder destination_folder

    где:

    • ip_address - это IP-адрес узла с холодным хранилищем писем;

    • nfs_src_folder - исходное расположение холодного хранилища писем;

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

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

    ip_address:/nfs_src_folder destination_folder nfs auto 0 0
  4. В файле настроек модуля укажите путь до холодного[1] хранилища:

    cold_storage destination_folder

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

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

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

  2. Доступ пользователя к СУБД PostgreSQL.

  3. Настройку режима архивирования журналов транзакций.

2.1. Создание и настройка прав пользователя СУБД

Если для доступа к СУБД используется учетная запись не администратора СУБД, то для создания базовой резервной копии пользователь должен обладать правами на вызов функций начала и окончания резервного копирования экземпляра СУБД.

  1. Вызовите psql от имени администратора СУБД:

    sudo -u postgres psql
  2. Создайте в СУБД пользователя rubackup_backuper.

    create user rubackup_backuper password '12345'; (1)
    alter role rubackup_backuper with login;
    1 Вместо 12345 укажите желаемый пароль.
  3. Настройте права пользователя в СУБД для доступа.

    Пример 1. Предоставление прав на выполнение функций в PostgreSQL версии 15 и выше
    grant execute on function pg_backup_start(text,bool) to rubackup_backuper; (1)
    grant execute on function pg_backup_stop(bool) to rubackup_backuper; (1)
    grant execute on function pg_switch_wal() to rubackup_backuper;
    grant pg_read_all_settings to rubackup_backuper;
    1 В PostgreSQL версии 14 и ниже используются функции pg_stop_backup и pg_start_backup, а в версии 15 и выше — pg_backup_stop и pg_backup_start.

    В файле настроек модуля необходимо указать имя созданного пользователя (username) и его пароль (password).

2.2. Доступ пользователя к СУБД

Правила доступа к СУБД задаются в файле pg_hba.conf.

Файл pg_hba.conf:

  • устанавливает метод подключения (local — локально, host — по TCP/IP);

  • ограничивает доступ базой данных или задачей (replication);

  • предоставляет доступ пользователю с заданных адресов указанным методом аутентификации.

В зависимости от версии СУБД PostgreSQL месторасположение файла может отличаться.

Добавьте в файл pg_hba.conf строки, указывающие на право пользователя rubackup_backuper на локальный (localhost, 127.0.0.1) доступ по TCP/IP к СУБД для резервного копирования и репликации. Закомментируйте строки, предоставляющие доступ неограниченному кругу лиц (host all all).

host   backupdb    rubackup_backuper  127.0.0.1  md5
host   replication rubackup_backuper  127.0.0.1  md5
Пример 2. Пример файла pg_hba.conf
# TYPE DATABASE    USER               ADDRESS       METHOD

# "local" is for Unix domain socket connections only
local  all         all                              md5

# IPv4 local connections:
# host   all         all                127.0.0.1/32  md5

# IPv6 local connections
# host   all         all                ::1/128       md5

# Allow replication connections from localhost, by a user with the
# replication privilege
local  replication all                              md5
host   replication all                127.0.0.1/32  md5
host   replication all                ::1/128       md5
host   backupdb    rubackup_backuper  127.0.0.1/32  md5
host   replication rubackup_backuper  127.0.0.1/32  md5

Если вы хотите подключаться из локальной сети (192.168.*.*) непосредственно к СУБД, добавьте в pg_hba.conf строку:

host   any   any   192.168.1.1/32  md5
Для доступа к СУБД необходимо открыть порт 5432 (или иной заданный в postgresql.conf) в фаерволе узла клиента. Пользователь, для которого требуется доступ к СУБД, должен существовать и иметь необходимые полномочия.
В файле настроек модуля необходимо указать абсолютный путь для используемой версии PostgreSQL (pg_ctl).

2.3. Режим архивирования журналов транзакций

СУБД на основе PostgreSQL хранят журналы транзакций. Архивирование и резервное копирование этих журналов позволяет восстановить БД из любого неконсистентного состояния путем последовательного применения сохраненных транзакций.

Режим архивирования журналов транзакций настраивается в файле postgresql.conf.

В зависимости от версии СУБД PostgreSQL месторасположение файла может отличаться.

Чтобы включить режим архивирования журналов транзакций в postgresql.conf:

  1. установите параметру wal_level значение replica;

  2. установите параметру archive_mode значение yes или always;

  3. задайте команды сохранения (archive_command) и восстановления (restore_command) журналов транзакций.

Пример 3. Настройки архивирования журналов транзакций в postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'cp %p /opt/rubackup/mnt/postgresql_archives/%f'
restore_command = 'cp /opt/rubackup/mnt/postgresql_archives/%f %p'

Допускается сжатие архивных файлов транзакций во время архивирования или восстановления из архива.

Пример 4. Команды сжатия и распаковки архивных журналов транзакций
archive_command = 'gzip < %p > /opt/rubackup/mnt/postgresql_archives/%f.gz'
restore_command = 'gunzip < /opt/rubackup/mnt/postgresql_archives/%f.gz > %p'

Путь к архиву в файле настроек модуля должен совпадать с путём, указанным в конфигурационном файле СУБД PostgreSQL (параметр archive_command). В файле настроек модуля (параметр archive_catalog) укажите на папку, хранящую архив журналов транзакций,


1. Резервное хранилище почтовой системы RuPost, которое используется как источник данных для резервного копирования компонентов почтовой системы.