Утилита rsync позволяет производить синхронизацию директорий по ssh и поддерживает следующие методы:
- Sync method (синхронизация только изменений указанной директории).
- Snapshot (создание полной копии указанной директории).
В статье разберем оба метода, а также автоматизируем комплексный backup по расписанию.
Что нам понадобится:
- Сервер с OS Ubuntu 20.04 LTS – Prod.
- Сервер с OS Ubuntu 20.04 LTS – Backup.
Заходим по ssh на сервер Prod:
Поскольку утилита rsync работает через ssh, необходимо сгенерировать ключ:
Затем копируем сгенерированный ключ на сервер Backup:
Копирование ключа делается один раз и позволяет не вводить пароль при соединении по SSH. Зайдем на бэкап-сервер с помощью ssh:
Видим что мы зашли на сервер и у нас не спросили пароль :) Так как мы на сервере Backup сервере предлагаю создать директорию backup
. Сюда будем сохранять резервные копии файлов с сервера Prod. Возвращаемся обратно на Prod сервер.
Метод Sync (инкрементальное сохранение изменений)
- Если были добавлены новые файлы.
- Если были произведены изменения в файлах контролируемой директории.
- Если было удаление файлов в контролируемой директории.
На сервере Prod создадим директорию и в ней файлы, которые будет мониторить утилита rsync:
Мы перешли в var
и там создали директорию www
с файлами 1.html
, index.html
, hello.html
.
Почти готово :) Запускаем rsync в режиме синхронизации изменений:
Видим что была отправка файлов на сервер Backup. Теперь внесем изменения. Удалим файл hello.html
и создадим новый файл 2.html
:
Повторно запустим rsync:
Видим что rsync удалил в папке backup
файл hello.html
и скопировал туда файл 2.html
. Предлагаю создать исполняемый файл, в дальнейшем он нам понадобится для автоматизации бекапа:
Теперь нет необходимости запоминать длинную команду rsync, а достаточно запустить sync.sh (не забудьте сделать его исполняемым с помощью команды chmod):
Метод Snapshot (создание полной копии указанной директории)
У метода инкрементного бэкапа есть недостаток. Если вы, к примеру, ошибочно удалите файлы, то удаление также произойдет и в директории backup
. Файлы будут утеряны. Для решения проблемы можно реализовать следующий алгоритм:
- Делаем инкрементный backup каждый день утром в 09:30.
- Делаем полный backup (Snapshot) еженедельно в понедельник 10:30.
Snapshot кладем в предварительно созданную директорию snapshot
на сервере Backup. Создаем snapshot.sh:
Запускаем:
Из вывода результата исполнения snapshot.sh видим, что была сделана и отправлена полная копия сохраняемой директории в backup с именем текущей даты и времени.
Автоматизируем задачу копирования файлов
Автоматизируем наш backup. Мы не зря создавали исполняемые файлы sync.sh и snapshot.sh. Теперь нужно создать в планировщике Cron задание:
Готово! В планировщике два задания которые будут с помощью утилиты rsync копировать ежедневные изменении и раз в неделю делать полную копию.
Для резервного копирования с одного рабочего сервера отдельная физическая машина может показаться избыточной, если проект не особенно крупный. Такая конфигурация скорее подойдет для нескольких серверов на проде (или одного, если он обслуживает большой проект). Selectel предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, а также с возможностью подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разработчиков.
Комментарии