Резервное копирование данных в S3-хранилище на Windows Server
Зачастую требуется где-то разместить резервные копии данных и желательно, чтобы Хранилище было доступным по сети, имело ограниченный безопасный доступ и желательно имело структуру кластера, т.е. должно быть отказоустойчивым. S3 - хранилище имеет неоспоримые плюсы перед хранением бэкапом по ftp, и главный плюс отказоустойчивая структура S3-хранилища.
Инструкция по установке
-
Установка и настройка на сервере-источнике утилиты rclone.
-
Создание и настройка скрипта переноса файлов резервного копирования в облачное хранилище S3 с логированием выполненных заданий.
-
Настройка запуска скрипта в Планировщике заданий Windows
Установка и настрока утилиты rclone
Установка для Windows
Предварительно скомпилированный двоичный файл.
Чтобы установить rclone в операционной системе Windows, скачиваем бесплатную утилиту rclone для Windows и распаковываем ее.
Получите правильный двоичный файл для вашего типа процессора, нажав на эти ссылки. Если не уверены, используйте первую ссылку.
- Откройте этот файл в проводнике и извлеките rclone.exe.
Rclone — это портативный исполняемый файл, поэтому вы можете разместить его в любом удобном месте.
Откройте окно CMD (или powershell) и запустите двоичный файл.
Обратите внимание, что rclone не запускает GUI (графический интерфейс) по умолчанию, он работает в окне командной строки CMD.
- Запустите
rclone.exe config
для настройки. Подробнее см. в документации по конфигурации rclone .
При желании можно настроить автоматическое выполнение .
Если вы планируете использовать функцию монтирования rclone , вам также потребуется установить стороннюю утилиту WinFsp .
Менеджер пакетов Windows (Winget)
Winget поставляется с предустановленными последними версиями Windows. Если нет, обновите пакет App Installer из магазина Microsoft.
Чтобы установить rclone
winget install Rclone.Rclone
Чтобы удалить rclone
winget uninstall Rclone.Rclone --force
Конфигурация rclone для Windows
Например мы распокавали утилиту в директорию rclone
запустим PowerShell или CMD
Конфигурируем rclone в PowerShell
В командной строке запустим конфигурацию:
C:\rclone\rclone.exe config
Далее производим настройку как в мануле:
Скрипт переноса бэкапа в S3-хранилище
Рассмострим пример, в котором бэкапы создаются для баз 1С в PostgreSQL методом описанным в данной инструкции:
Исходные данные
В данном примере рабочее дерево каталогов будет таким:
ДиректорияBAC
ДиректорияBackup
- backup.files // файлы бэкапов для переноса
ДиректорияLogback
- files_data.log //файлы логов
- run_backup.cmd //скрипт бэкапа
- rclone-to-net.cmd // создадим файл скрипта для переноса бэкапов
Разбор скрипта
Создаем батник или cmd файл в любимом Вашем текстовом редакторе или блокноте, я писал Notepad++, красиво, удобно с подсветкой.
- Установим переменные окружения:
- сформируем имя файла отчета с присвоением даты создания;
- укажем куда укладывать лог-файлы;
- укажем где находится утилита rclone;
- Укажем директорию источника файлов для переноса;
- Укажем место назначения, сконофигурированное ранее в
rclone config
название нашего хранилища, в нашем случае это s3-adman
- Запустим утилиту
rclone
на копирование с логированием из источника в место назначения. - Проверим, успешно ли выполнен перенос:
- В случае ошибки - сделаем запись в лог и выйдем из скрипта
- В случае успеха - сделаем запись в лог и удалим в каталоге источнике все файлы старше 2 дней (можно настроить на свое усмотрение)
- Закончим скрипт.
CLSECHO OFFCHCP 1251
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%SET LOGFILE=rclone_backup_%DATETIME%.logSET LOGPATH="Logback\%LOGFILE%"SET BINPATH="c:\rclone"SET SOURCEPATH="c:\BAC\Backup"SET DESTINATION=s3-admanCALL %BINPATH%\rclone -vP copy --log-file=%LOGPATH% --no-traverse %SOURCEPATH% %DESTINATION%:new-backupIF NOT %ERRORLEVEL%==0 GOTO ErrorGOTO Successfull:ErrorECHO ECHO %DATETIME% Ошибка! Резервные копии не перенесены, подробней в rclone_backup.log >> backup_rclone.logGOTO End:SuccessfullECHO %DATETIME% Резервные копии успешно перенесены >> backup_rclone.logGOTO Cleaning:Cleaningforfiles /p %SOURCEPATH% /S /D -2 /C "cmd /c del /f /a /q @file"IF NOT %ERRORLEVEL%==0 GOTO EndECHO %DATETIME% Очистка от старых бэкапов проведена успешно! >> backup.log:End
Автоматизация запуска скрипта по времени
Ставим задачу в планировщик задач.
Запускаем планировщик:
Пуск – Панель Управления – Администрирование – Планировщик заданий.
Создаем задачу -> Задаем ей имя в планировщике
и устанавливаем триггеры (расписание начала задачи). Например ставим еженедельно задачу в рабочие дни ночью на пару часов позже задачи на бэкап.
Далее указываем Действие: Создать -> программу сценарий: (находим нашу программу) rclone-to-net.cmd жмем Ок.
Всё, наш Скрипт создан и установлен в планировщик Windows.
Осталось проверить его работоспособность:
Проверка работоспособности скрипта
Прямо в планировщике задач выбираем нашу задачу и вызвав правой кнопкой мыши контекстное меню, выбираем “Запустить” – далее смотрим результат. Радуемся жизни или анализируем причины записи ошибок в лог.
После того, как скрипт отработал, можно подключиться к S3-хранилищу, например S3-браузером или любым другим инструментом и проверить, перенесены ли необходимые файлы в хранилище.
Проверка логирования
Так же можем проверить лог успешного выполнения задачи и смоделировать ошибку чтобы проверить то, что и ошибка успешно логируется.
Для этого достаточно в скрипте указать неправильное название места назначения, в нашем примере изменить s3-adman
на что-то другое.
Проверка удаления старых файлов
После успешной передачи в хранилище, можно проверить удаление старых файлов . Для данной задачи можно перед запуском скрипта разместить в рабочей директории файлы с датой создания раньше установленного нами в скрипте предела:
:Cleaningforfiles /p %SOURCEPATH% /S /D -2 /C "cmd /c del /f /a /q @file"
Запустить скрипт и после его успешной отработки, проверить удаление данных файлов.