ELMA365 On-Premises > ELMA365 On-Premises Enterprise / Резервное копирование и восстановление баз данных с помощью WAL-G и Rclone 

Резервное копирование и восстановление баз данных с помощью WAL-G и Rclone

Вы можете настроить резервное копирование и восстановление данных ELMA365 с помощью следующих программ:

  • WAL-G — это утилита для создания резервных копий и восстановления баз данных, которая поддерживает несколько СУБД, включая PostgreSQL и MongoDB.

Она использует механизм непрерывного архивирования (Continuous Archiving) и точки восстановления (Point-in-Time Recovery, PITR) для обеспечения надёжной архивации и восстановления данных.

WAL-G поддерживает хранение резервных копий в различных облачных хранилищах, таких как Amazon S3, Google Cloud Storage, Azure Blob Storage и других.

  • Rclone — это многопоточная программа с открытым исходным кодом и командной строкой для управления контентом. Позволяет переносить данные в облако и другие хранилища.

В статье описан процесс резервного копирования и восстановления PostgreSQL 15 и MongoDB 6 в ОС Ubuntu Linux 22.04.

Настройка WAL-G для PostgreSQL

Для резервного копирования данных с помощью WAL-G выполните следующие действия:

  1. Предварительно установите WAL-G с официального GitHub-репозитория:

wget https://github.com/wal-g/wal-g/releases/download/v3.0.5/wal-g-pg-ubuntu-22.04-amd64.tar.gz
tar -xzf wal-g-pg-ubuntu-22.04-amd64.tar.gz 
sudo mv wal-g-pg-ubuntu-22.04-amd64 /usr/local/bin/wal-g-pg

  1. Настройте переменные окружения для доступа к облачному хранилищу. Для этого откройте файл конфигурации /etc/postgresql/15/main/.walg.json и добавьте следующие параметры:

{
"WALG_S3_PREFIX": "s3://elma365-backup/postgres",
"AWS_ENDPOINT": "https://storage.yandexcloud.net",
"AWS_ACCESS_KEY_ID": "<your-access-key-id>",
"AWS_SECRET_ACCESS_KEY": "<your-secret-access-key>",
"AWS_REGION": "us-east-1",
"AWS_S3_FORCE_PATH_STYLE": "true",
"WALG_COMPRESSION_METHOD": "brotli",
"WALG_DELTA_MAX_STEPS": "6",
"PGHOST": "/var/run/postgresql",
"PGDATA": "/var/lib/postgresql/15/main",
"PGSSLMODE": "disable"
}

Здесь:

  • WALG_S3_PREFIX  — указывает путь к хранилищу S3, где будут храниться резервные копии и .WAL-файлы (Write-Ahead Logs);
  • AWS_ENDPOINT — указывает точку доступа (endpoint) для S3-совместимого хранилища;
  • AWS_ACCESS_KEY_ID — идентификатор ключа доступа (Access Key ID) для аутентификации в S3-совместимом хранилище;
  • AWS_SECRET_ACCESS_KEY — секретный ключ (Secret Access Key) для аутентификации в S3-совместимом хранилище;
  • AWS_REGION — регион, в котором находится S3-совместимое хранилище;
  • AWS_S3_FORCE_PATH_STYLE  — указывает, что нужно использовать path-style для доступа к S3-бакетам;
  • WALG_COMPRESSION_METHOD  — метод сжатия, используемый для резервных копий. В данном случае используется алгоритм Brotli, который обеспечивает хорошее соотношение между степенью сжатия и скоростью;
  • WALG_DELTA_MAX_STEPS  — максимальное количество шагов (delta steps), которые WAL-G может использовать для постепенно увеличивающихся (дельта) резервных копий. Позволяет экономить место, храня только изменения между резервными копиями;
  • PGHOST — указывает путь к сокету PostgreSQL, через который WAL-G будет подключаться к базе данных. Используется для выполнения команд, требующих подключения к PostgreSQL;
  • PGDATA — путь к каталогу данных PostgreSQL. WAL-G использует этот параметр для определения, где находятся данные PostgreSQL, чтобы корректно выполнять резервное копирование и восстановление;
  • PGSSLMODE — указывает, что SSL/TLS-шифрование для подключения к PostgreSQL отключено. Это может быть полезно для локальных подключений, где шифрование не требуется.
  1. Меняем владельца файла:

chown postgres: /etc/postgresql/15/main/.walg.json

  1. Чтобы использовать WAL-G, настройте PostgreSQL для работы с непрерывным архивированием. Для этого откройте файл конфигурации /etc/postgresql/15/main/postgresql.conf и добавьте следующие параметры:

archive_mode = on
archive_timeout = 600s
archive_command = '/usr/local/bin/wal-g-pg wal-push "%p" --config /etc/postgresql/15/main/.walg.json >> /var/log/postgresql/archive_command.log 2>&1'
wal_level = replica
restore_command = '/usr/local/bin/wal-g-pg wal-fetch "%f" "%p" --config /etc/postgresql/15/main/.walg.json >> /var/log/postgresql/restore_command.log 2>&1'

  1. Для создания полной резервной копии базы данных выполните команду:

sudo -u postgres /usr/local/bin/wal-g-pg backup-push --config /etc/postgresql/15/main/.walg.json /var/lib/postgresql/15/main/

Для восстановления базы данных из резервной копии с помощью WAL-G:

Начало внимание

Восстановление из резервной копии должно производиться в пустую базу данных. Предварительно убедитесь, что у вас есть резервная копия удаляемой БД. Только после этого приступайте к удалению. Подробнее об этом читайте в статье «PostgreSQL».

Конец внимание

  1. Остановите PostgreSQL, если он запущен:

sudo systemctl stop postgresql

  1. Переместите или удалите содержимое директории /var/lib/postgresql/15/main:

sudo mv /var/lib/postgresql/15/main /var/lib/postgresql/15/main_old

  1. Создайте пустую директорию для восстановления:

sudo mkdir /var/lib/postgresql/15/main
sudo chown postgres:postgres /var/lib/postgresql/15/main

  1. Для просмотра списка резервных копий баз данных выполните команду:

sudo -u postgres /usr/local/bin/wal-g-pg backup-list --config /etc/postgresql/15/main/.walg.json

  1. Выполните команду восстановления:

sudo -u postgres /usr/local/bin/wal-g-pg backup-fetch /var/lib/postgresql/15/main LATEST --config /etc/postgresql/15/main/.walg.json

Здесь LATEST указывает на последнюю резервную копию, либо можно ввести наименование нужной копии, полученной из списка на предыдущем шаге, например: base_000000010000000000000009.

  1. Запустите PostgreSQL:

sudo systemctl start postgresql

Настройка WAL-G для MongoDB

Для резервного копирования данных с помощью WAL-G выполните следующие действия:

  1. Предварительно установите WAL-G с официального GitHub-репозитория:

wget https://github.com/wal-g/wal-g/releases/download/v3.0.5/wal-g-mongo-ubuntu-22.04-amd64.tar.gz
tar -xzf wal-g-mongo-ubuntu-22.04-amd64.tar.gz
sudo mv wal-g-mongo-ubuntu-22.04-amd64 /usr/local/bin/wal-g-mongo

  1. Настройте переменные окружения для доступа к облачному хранилищу. Откройте файл конфигурации /home/user/.walg.json и добавьте следующие параметры:

{
"WALG_S3_PREFIX": "s3://elma365-backup/mongo",
"AWS_ENDPOINT": "https://storage.yandexcloud.net",
"AWS_ACCESS_KEY_ID": "<your-access-key-id>",
"AWS_SECRET_ACCESS_KEY": "<your-secret-access-key>",
"AWS_REGION": "us-east-1",
"AWS_S3_FORCE_PATH_STYLE": "true",
"WALG_COMPRESSION_METHOD": "brotli",
"MONGODB_URI": "mongodb://superuser:SecretPassword@mongodb-server.your_domain:27017/?authSource=admin&connect=direct&socketTimeoutMS=60000&connectTimeoutMS=10000",
"WALG_STREAM_CREATE_COMMAND": "mongodump --archive --oplog --uri='mongodb://superuser:SecretPassword@mongodb-server.your_domain:27017/?authSource=admin&connectTimeoutMS=10000'",
"WALG_STREAM_RESTORE_COMMAND": "mongorestore --archive --oplogReplay --uri='mongodb://superuser:SecretPassword@mongodb-server.your_domain:27017/?authSource=admin&connectTimeoutMS=10000'"
}

Здесь:

  • WALG_S3_PREFIX — указывает путь к S3, где будут храниться резервные копии и .WAL-файлы (Write-Ahead Logs);
  • AWS_ENDPOINT — указывает точку доступа (endpoint) для S3-совместимого хранилища;
  • AWS_ACCESS_KEY_ID — идентификатор ключа доступа (Access Key ID) для аутентификации в S3-совместимом хранилище;
  • AWS_SECRET_ACCESS_KEY — секретный ключ (Secret Access Key) для аутентификации в S3-совместимом хранилище;
  • AWS_REGION — регион, в котором находится S3-совместимое хранилище;
  • AWS_S3_FORCE_PATH_STYLE — указывает, что нужно использовать path-style для доступа к S3-бакетам;
  • WALG_COMPRESSION_METHOD — метод сжатия, используемый для резервных копий. В данном случае используется алгоритм Brotli, который обеспечивает хорошее соотношение между степенью сжатия и скоростью;
  • MONGODB_URI — URI для подключения к MongoDB;
  • WALG_STREAM_CREATE_COMMAND — команда, используемая WAL-G для создания резервной копии MongoDB;
  • ALG_STREAM_RESTORE_COMMAND — команда, используемая WAL-G для восстановления резервной копии MongoDB.
  1. Для создания полной резервной копии баз данных выполните команду:

/usr/local/bin/wal-g-mongo backup-push --config /home/user/.walg.json

  1. Для просмотра списка резервных копий баз данных выполните команду:

/usr/local/bin/wal-g-mongo backup-lis --config /home/user/.walg.json

Для восстановления базы данных из резервной копии выполните команду:

/usr/local/bin/wal-g-mongo backup-fetch LATEST --config /home/user/.walg.json

Начало внимание

Восстановление из резервной копии должно производиться в пустую базу данных. Предварительно убедитесь, что у вас есть резервная копия удаляемой базы данных. Только после этого приступайте к удалению БД. Подробнее об этом читайте в статье «MongoDB».

Конец внимание

Здесь LATEST указывает на последнюю резервную копию, либо можно указать наименование нужной копии, полученной из списка на предыдущем шаге, например: stream_20250214T093724Z.

Настройка Rclone

Для установки Rclone используйте команду:

sudo -v ; curl https://rclone.org/install.sh | sudo bash

Чтобы настроить Rclone для работы с S3:

  1. Запустите команду для настройки нового S3-хранилища:

rclone config

  1. В открывшемся окне выберите опцию n для создания нового хранилища.
  2. Введите имя для вашего хранилища. Например source-s3 для исходного хранилища и backup-s3 для целевого.
  3. Выберите тип хранилища (s3). 
  4. Выберите провайдера (Other). 
  5. Введите параметры доступа к вашему S3-хранилищу:
  • access_key_id — ваш идентификатор ключа доступа;
  • secret_access_key — ваш секретный ключ;
  • region — регион вашего S3-хранилища;
  • endpoint — укажите точку доступа S3-хранилища.
  1. Повторите шаги для настройки второго S3-хранилища.

Для копирования данных из одного S3-хранилища в другое используйте команду rclone copy:

rclone copy source-s3:bucket-name/path backup-s3:backup-bucket-name/path -v --ignore-errors --fast-list --checksum

Здесь:

  • source-s3 — имя удалённого хранилища, настроенного для исходного S3;
  • bucket-name/path — имя бакета и путь к данным в исходном хранилище;
  • backup-s3 — имя удалённого хранилища, настроенного для целевого S3;
  • backup-bucket-name/path — имя бакета и путь для резервной копии в целевом хранилище;
  • -v — включает подробный вывод (verbose mode);
  • --ignore-errors — игнорирует ошибки, возникающие во время выполнения команды;
  • --fast-list — ускоряет процесс создания списка файлов и директорий, особенно при работе с облачными хранилищами, такими как S3, Google Drive и другими;
  • --checksum — включает проверку контрольных сумм (хешей) файлов при копировании или синхронизации.