Резервное копирование и восстановление

Чтобы обеспечить возможность восстановления работы PAM в случае сбоя, выполняйте регулярное резервирование и резервное копирование:

  • баз данныхpam, keycloak, vault.

  • файловых хранилищ S3, FS или NFS — видео и текстовые записи сессий.

  • скриптов и конфигураций — плейбуки и файлы настройки сервисов для развертывания РАМ.

Резервное копирование может быть выполнено:

Ручное резервное копирование

Предварительные действия

Перед тем, как выполнять резервное копирование:

  1. Остановите сервисы web-auth, web-api, web-site, vault и control.

  2. Дождитесь завершения сессий.

  3. Остановите воркеры и audit-log-sender.

После этого, выполните ручное резервное копирование записей сессий и баз данных.

Порядок резервного копирования

1. База данных PAM

Для резервного копирования БД PAM используется pg_dump.

Пример

pg_dump -U <user> pam > /var/bpam/backups/db/pam.$(date +%s).sql pg_dump -U <user> keycloak > /var/bpam/backups/db/keycloak.$(date +%s).sql pg_dump -U <user> vault > /var/bpam/backups/db/vault.$(date +%s).sql

Резервные копии должны храниться:

  • централизованно в выделенной директории, например /opt/bizonepam.

  • на реплике PostgreSQL.

2. Записи сессий

Для резервного копирования файлов сессий используйте rsync.

Копирование записей из FS или NFS

В отдельном командном интерпретаторе shell вызовите:

sh -c "DATE=\$(date +\%Y\%m\%d\%H\%M\%S); mkdir -p /var/bpam/backups/sessions/sessions.\$DATE; rsync -ahvc /var/bpam/sessions/ /var/bpam/backups/sesions.\$DATE/"

В результате выполнения, будут:

  • создана переменная окружения DATE со значением штампа в формате %Y\%m\%d\%H\%M\%S.

  • создана директория по указанному пути /var/bpam/backups/sessions/sessions.\$DATE.

  • скопированы файлы сессий.

По необходимости, после выполнения ручного резервного копирования, остановите БД.

Копирование записей из S3-хранилища

В отдельном командном интерпретаторе shell вызовите:

sh -c "DATE=\$(date +\%Y\%m\%d\%H\%M\%S); mkdir -p /var/bpam/backups/sessions/sessions.\$DATE; rsync -ahvc <s3_dir>/<bucket_dir>/ /var/bpam/backups/sessions.\$DATE/<bucket_dir>/"

где:

  • <s3_dir> – директория S3-хранилища;

  • <bucket_dir> – директория бакета S3-хранилища с записями сессий.

В результате выполнения, будут:

  • создана переменная окружения DATE со значением штампа в формате %Y\%m\%d\%H\%M\%S;

  • создана директория по указанному пути /var/bpam/backups/sessions/sessions.\$DATE;

  • скопированы файлы сессий.

По необходимости, после выполнения ручного резервного копирования, остановите БД.

3. Скрипты установки

Для резервного копирования скриптов установки сохраните плейбуки развертывания РАМ. Они должны храниться в централизованном месте в рамках CDP-job.

  • Плейбук выпускается с заранее определенными переменными и конфигурациями.

  • При развертывании плейбук воспроизводит среду РАМ на новой машине.

  • Плейбук хранится в централизованном месте в директории, например /opt/bizonepam.

Все процедуры резервного копирования должны быть протестированы в тестовой среде

Ручное резервное копирование с помощью скрипта

Предварительные действия

Перед тем, как выполнять резервное копирование:

  1. Ознакомьтесь с содержанием скрипта резервного копирования;

  2. Заполните и адаптируйте конфигурационный файл скрипта для вашего окружения;

После этого, выполните ручное резервное копирование с помощью скрипта.

Порядок резервного копирования

Содержание скрипта

Для автоматизации резервного копирования используйте скрипт. Скрипт автоматизации должен выполнять:

  • резервное копирование БД;

  • копирование файлов сессий;

  • проверку целостности;

  • ротацию резервных копий.

Скрипт можно запускать как вручную, так и автоматически по расписанию через cron-job или systemd timer.

Пример скрипта для резервного копирования
#!/bin/bash set -e CONFIG_FILE="/opt/bizonepam/backup.conf" - добавить что должно лежать внутри, какие переменные используются и для чего # Загрузка конфигурации if [[ -f "$CONFIG_FILE" ]]; then source "$CONFIG_FILE" else echo "Конфигурационный файл $CONFIG_FILE не найден!" exit 1 fi TIMESTAMP=$(date +"%Y%m%d%H%M%S") log() { echo "[$(date +"%F %T")] $1" [[ -n "$LOG_FILE" ]] && echo "[$(date +"%F %T")] $1" >> "$LOG_FILE" } log "=== Запуск резервного копирования PAM ===" # ========================================================== # Функция: резервное копирование БД PostgreSQL # ========================================================== backup_databases() { log "--- Резервное копирование БД ---" mkdir -p "$DB_BACKUP_DIR" for DB in $DB_LIST; do OUT_FILE="$DB_BACKUP_DIR/${DB}.${TIMESTAMP}.sql" log "Создание дампа БД $DB → $OUT_FILE" pg_dump -U "$PG_USER" "$DB" > "$OUT_FILE" if [[ $? -eq 0 ]]; then log "Дамп БД $DB создан успешно." else log "Ошибка создания дампа $DB!" fi done } # ========================================================== # Функция: копирование файлов сессий # ========================================================== backup_sessions() { log "--- Резервное копирование файлов сессий ---" TARGET_DIR="$SESSIONS_BACKUP_DIR/sessions.$TIMESTAMP" mkdir -p "$TARGET_DIR" if [[ "$USE_S3" == "true" ]]; then log "Копирование сессий из S3 ($S3_SOURCE)" rsync -ahv $([[ "$CHECKSUM_VERIFY" == "true" ]] && echo "-c") \ "$S3_RCLONE_REMOTE"/ "$TARGET_DIR"/ else log "Копирование локальных/NFS сессий" rsync -ahv $([[ "$CHECKSUM_VERIFY" == "true" ]] && echo "-c") \ "$SESSIONS_SOURCE"/ "$TARGET_DIR"/ fi } # ========================================================== # Функция: ротация резервных копий # ========================================================== rotate_backups() { log "--- Ротация резервных копий ---" # Ротация БД find "$DB_BACKUP_DIR" -type f -mtime "+$RETENTION_DAYS" -delete # Ротация сессий cd "$SESSIONS_BACKUP_DIR" ls -1dt sessions.* | tail -n +$((SESSIONS_RETENTION+1)) | xargs -r rm -rf } # ========================================================== # Функция: проверка контрольных сумм (rsync dry-run) # ========================================================== verify_sessions() { if [[ "$CHECKSUM_VERIFY" != "true" ]]; then log "Проверка контрольных сумм отключена." return fi log "--- Проверка контрольных сумм ---" rsync -ahvn -c "$SESSIONS_SOURCE"/ "$TARGET_DIR"/ log "Проверка завершена." } # ========================================================== # Основная последовательность выполнения # ========================================================== backup_databases backup_sessions verify_sessions rotate_backups log "=== Резервное копирование завершено ==="

Конфигурационный файл скрипта

Перед началом копирования, скрипт необходимо адаптировать под ваше окружение. Скрипт можно настроить с помощью конфигурационного файла.

На входе скрипт должен принимать параметры:

  • пути к БД и файлам;

  • названия БД;

  • периодичность создания копий;

  • количество хранимых копий.

Пример конфигурационного файла
# =============== Общие параметры =============== # Центральная директория хранения BACKUP_ROOT="/opt/bizonepam" # Количество хранимых копий RETENTION_DAYS=30 # Включить логирование в файл LOG_FILE="/var/log/bpam_backup.log" # =============== Параметры БД =============== # Пользователь PostgreSQL PG_USER="pamuser" # Перечень баз данных DB_LIST="pam keycloak vault" # Директория хранения дампов DB_BACKUP_DIR="/opt/bizonepam/backups/db" # =============== Параметры копирования сессий =============== # Локальный каталог сессий SESSIONS_SOURCE="/var/bpam/sessions" # Цель для бэкапа (FS/NFS) SESSIONS_BACKUP_DIR="/opt/bizonepam/backups/sessions" # Пример для S3 (оставить пустым если не нужно) S3_SOURCE="" # например: "s3://my-bucket/pam-sessions" S3_RCLONE_REMOTE="" # например: "pam_s3:" USE_S3="false" # true / false # =============== Ротация =============== # Количество версий директорий с файлами сессий SESSIONS_RETENTION=7 # =============== Проверки целостности =============== # Включить сравнение контрольных сумм rsync CHECKSUM_VERIFY="true"

Автоматизированное резервное копирование с помощью скрипта по расписанию

Предварительные действия

Перед тем, как выполнять резервное копирование:

  1. Убедитесь что скрипт и его конфигурационный файл корректны.

  2. Проверьте настройки системного времени и часового пояса на сервере.

Порядок резервного копирования

  1. Разместите скрипт в директории /opt/bizonepam/bpam_backup.sh, а конфигурационный файл по пути /opt/bizonepam/backup.conf.

  2. Проверьте права на выполнение скрипта. Если их нет, добавьте с помощью chmod +x /opt/bizonepam/bpam_backup.sh

  3. Проверьте, что в конфигурационном файле заданы:

    • пути к БД,

    • каталоги сессий,

    • параметры ротации,

    • логирование,

    • настройки S3/NFS.

      При необходимости, скорректируйте настройки.

  4. Выполните crontab -e от пользователя, который будет производить автоматизированное резервное копирование. Чаще всего это системный привилегированный пользователь root.

  5. Добавьте в открывшийся файл строку 0 2 * * * /opt/bizonepam/bpam_backup.sh для запуска скрипта ежедневно в 2:00.

  6. Сохраните и примените cron-конфигурацию. После сохранения проверьте cron-job с помощью команды crontab -l.

    В выводе команды должна быть строка, которая указана на предыдущем шаге.

Порядок восстановления компонентов

Общий порядок операций при восстановлении включает в себя:

  1. Подготовку виртуальных машин, подключение репозиториев и настройку сетевых параметров.

  2. Восстановление баз данных.

  3. Развертывание PAM с помощью плейбуков.

  4. Восстановление файлов сессий.

  5. Запуск и проверку работоспособности.

1. Подготовка ВМ

  1. Подготовьте виртуальные машины в соответствии с техническими требованиями PAM.

  2. Подключите на ВМ репозитории с пакетами для работы PAM:

  3. Настройте сетевые параметры для доступа к хранилищу резервных копий и связанных сервисов.

2. Развертывание PAM

  1. На подготовленные ВМ запустите штатный плейбук установки PАМ. Плейбук установит необходимые пакеты, развернет сервисы PAM и сконфигурирует компоненты.

  2. После успешного развертывания, остановите все компоненты PAM.

3. Восстановление БД

  1. Из резервного хранилища выберите актуальную резервную копию базы данных.

  2. Восстановите БД штатными средствами:

    psql -U <user> -d <database> -f <database>.<timestamp>.sql
  3. После восстановления, проверьте БД:

    • проверьте целостность данных.

    • запустите БД в автономном режиме.

    • проведите валидацию структуры и ключевых таблиц PAM.

4. Восстановление файлов сессий

  1. Подключите сетевое файловое хранилище, в котором размещены резервные копии файлов сессий.

  2. Определите путь хранения сессий согласно конфигурации PAM.

  3. Сопоставьте структуру каталогов в подключенном хранилище со структурой в свежей инсталляции PAM.

  4. Выполните перенос файлов из резервного хранилища в PAM:

    rsync -av /var/bpam/backups/sessions/ /var/bpam/sessions/
  5. Проверьте наличие всех файлов.

5. Проверка работоспособности

  1. Запустите все сервисы PAM и убедитесь, что:

    • все компоненты стартуют корректно;

    • возможны подключения к целевым ресурсам;

    • записи сессий отображаются корректно;

    • интерфейс работает без ошибок;

    • в логах нет ошибок.

  2. Проверьте, что состояние окружения соответствует тому, которое было на момент создания резервной копии.

Проверка восстановления

После каждого восстановления проводите:

  • тестирование основных пользовательских сценариев.

  • проверку отображения записей сессий, как видео, так и текста.

  • анализ логов сервисов

  • проверку целостности БД через pg_checksums.

Все результаты необходимо фиксировать в журнале операций.

Плановое тестирование резервного копирования

Не реже одного раза в квартал проводите:

  • тестовое восстановление базы данных и файловой структуры сессий.

  • проверку пригодности резервных копий

Все результаты необходимо фиксировать в отчете.