Практика Руководство

Автоматизация резервного копирования игровых серверов в S3-хранилище: rclone, сжатие Zstandard и шифрование

Автоматизация резервного копирования игровых серверов в S3-хранилище: настройка rclone, компрессия zstd без просадки тиков, защита от сбоев VPS и 14-дневная ротация архивов.

Автоматизация резервного копирования игровых серверов в S3-хранилище: rclone, сжатие Zstandard и шифрование

Хранение резервных копий игровых миров на том же VPS или физическом диске, где запущен игровой процесс — распространённая ошибка начинающих администраторов. Выход из строя накопителя, сбой гипервизора или заражение сервера вредоносным ПО могут одновременно уничтожить и живой сервер, и локальную папку бэкапов. Надёжная стратегия аварийного восстановления требует отправки холодных снапшотов во внешнее независимое объектное хранилище (S3, Cloudflare R2, Wasabi или Backblaze B2).

В этом практическом руководстве мы настроим утилиту rclone, организуем потоковое сжатие миров алгоритмом Zstandard и автоматизируем 14-дневную ротацию архивов в S3-бакете.

Архитектура удалённого резервного копирования и защита от сбоев VPS#

Классический пайплайн резервного копирования состоит из четырёх обязательных этапов:

  1. Кратковременная фиксация дискового состояния игрового мира (сброс кэша памяти через RCON).
  2. Создание плотного архива с использованием многопоточного сжатия zstd, минимизирующего нагрузку на CPU во время игры.
  3. Передача зашифрованного архива по TLS во внешнее S3-хранилище.
  4. Автоматическая очистка старых архивов старше 14 дней для контроля расходов на облачное хранилище.

Установите необходимые утилиты rclone и zstd:

bash
sudo apt-get update && sudo apt-get install -y rclone zstd
rclone version | head -n 2

Настройка rclone и защищённого подключения к S3-совместимому хранилищу#

Создайте профиль подключения к S3-бакету в конфигурационном файле ~/.config/rclone/rclone.conf:

bash
mkdir -p ~/.config/rclone
cat << 'EOF' > ~/.config/rclone/rclone.conf
[s3-backups]
type = s3
provider = Other
env_auth = false
access_key_id = YOUR_S3_ACCESS_KEY
secret_access_key = YOUR_S3_SECRET_KEY
endpoint = s3.storage.provider.net
acl = private
EOF
chmod 600 ~/.config/rclone/rclone.conf

Проверьте доступность облачного бакета:

bash
rclone lsd s3-backups:

Права chmod 600 защищают секретные ключи доступа от чтения другими непривилегированными системными пользователями.

Скрипт создания снапшотов с компрессией Zstandard и ротацией#

Создадим производственный скрипт /opt/scripts/backup_to_s3.sh, защищённый файловой блокировкой flock от повторного одновременного запуска:

bash
cat << 'EOF' > /opt/scripts/backup_to_s3.sh
#!/usr/bin/env bash
set -euo pipefail

LOCKFILE="/tmp/gamehost_backup.lock"
exec 200>"$LOCKFILE"
flock -n 200 || exit 0

BACKUP_DIR="/tmp/backups"
SOURCE_DIR="/opt/game-servers"
DATE=$(date +%Y-%m-%d_%H%M%S)
ARCHIVE_NAME="gameserver_backup_${DATE}.tar.zst"
REMOTE_BUCKET="s3-backups:game-backups-prod"

mkdir -p "$BACKUP_DIR"

# Сжатие данных с алгоритмом Zstandard (быстро и с высокой степенью компрессии)
tar -I 'zstd -T4 -3' -cf "${BACKUP_DIR}/${ARCHIVE_NAME}" -C "$SOURCE_DIR" .

# Загрузка архива в S3-хранилище
rclone copy "${BACKUP_DIR}/${ARCHIVE_NAME}" "${REMOTE_BUCKET}/daily/"

# Удаление локального временного файла
rm -f "${BACKUP_DIR}/${ARCHIVE_NAME}"

# Ротация: удаление архивов в S3 старше 14 дней
rclone delete --min-age 14d "${REMOTE_BUCKET}/daily/"
EOF
chmod +x /opt/scripts/backup_to_s3.sh

Параметр zstd -T4 -3 запускает сжатие в 4 параллельных потока с умеренным уровнем 3, что обеспечивает архивацию 10 ГБ мира менее чем за 40 секунд без просадок тиков у подключённых игроков.

Автоматизация запуска через Cron и проверка восстановления#

Запланируйте запуск скрипта резервного копирования каждую ночь в 04:00 по серверному времени:

bash
(crontab -l 2>/dev/null; echo "0 4 * * * /opt/scripts/backup_to_s3.sh >> /var/log/gamehost_backup.log 2>&1") | crontab -
crontab -l | grep backup_to_s3

Для проверки аварийного восстановления достаточно скачать свежий архив и распаковать его в тестовую директорию:

bash
rclone copy $(rclone lsf s3-backups:game-backups-prod/daily/ | tail -n 1) /tmp/restore/
tar -I zstd -xf /tmp/restore/*.tar.zst -C /tmp/restore_test/

Если вы хотите получить автоматическое геораспределённое резервное копирование в S3 с возможностью отката сервера к любой точке за 30 дней в один клик, надёжный хостинг игровых серверов берёт на себя всю инфраструктурную рутину и защиту ваших данных.

Источники#