🛠 Как использовать rsync для резервного копирования файлов ваших VDS
Рассмотрим кейс резервного копирования файлов между сервером Prod и сервером Backup. В качестве инструмента будем использовать популярную бесплатную утилиту rsync. Синхронизация, мощный инструмент для системных администраторов. Синхронизация состояния файлов между двумя или более серверами, одна из повседневных задач системных администраторов. Утилита rsync позволяет производить синхронизацию директорий по ssh и поддерживает следующие методы: В статье разберем оба метода, а также автоматизируем комплексный backup по расписанию. Что нам понадобится: Серверы для тестов предоставлены компанией Selectel. Заходим по ssh на сервер Prod: Поскольку утилита rsync работает через ssh, необходимо сгенерировать ключ: Затем копируем сгенерированный ключ на сервер Backup: Копирование ключа делается один раз и позволяет не вводить пароль при соединении по SSH. Зайдем на бэкап-сервер с помощью ssh: Видим что мы зашли на сервер и у нас не спросили пароль 🙂 Так как мы на сервере Backup сервере предлагаю создать директорию При таком методе сохраняются только изменения в целевой директории. Утилита rsync мониторит директорию и если произошли следующие события отправляет изменения на сервер Backup. На сервере Prod создадим директорию и в ней файлы, которые будет мониторить утилита rsync: Мы перешли в Почти готово 🙂 Запускаем rsync в режиме синхронизации изменений: Видим что была отправка файлов на сервер Backup. Теперь внесем изменения. Удалим файл Повторно запустим rsync: Видим что rsync удалил в папке Теперь нет необходимости запоминать длинную команду rsync, а достаточно запустить sync.sh (не забудьте сделать его исполняемым с помощью команды chmod): У метода инкрементного бэкапа есть недостаток. Если вы, к примеру, ошибочно удалите файлы, то удаление также произойдет и в директории Snapshot кладем в предварительно созданную директорию Запускаем: Из вывода результата исполнения snapshot.sh видим, что была сделана и отправлена полная копия сохраняемой директории в backup с именем текущей даты и времени. Автоматизируем наш backup. Мы не зря создавали исполняемые файлы sync.sh и snapshot.sh. Теперь нужно создать в планировщике Cron задание: Готово! В планировщике два задания которые будут с помощью утилиты rsync копировать ежедневные изменении и раз в неделю делать полную копию. *** Чтобы ускорить работу системы, выберите провайдера инфраструктуры, который наилучшим образом соответствует требованиям вашего ресурса: объем накопителя, процессор и количество ядер, объем оперативки и ежемесячного трафика, наличие резервного копирования, быстрая техническая поддержка. Мы тестировали серверы, любезно предоставленные компанией Selectel. Для резервного копирования с одного рабочего сервера отдельная физическая машина может показаться избыточной, если проект не особенно крупный. Такая конфигурация скорее подойдет для нескольких серверов на проде (или одного, если он обслуживает большой проект). Selectel предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, а также с возможностью подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разработчиков. Интересно, посмотреть тарифы Selectel
ssh root@Prod-IP
ssh-keygen -t rsa -b 4096 -v Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA250q8TsT/X5pM+KE2n1Biz3Sre/p425I5wnRSI root@Gauss The key's randomart image is: +---[RSA 4096]----+ | | | | | . | | E o * | | S ...B.+.| | . + *+.ooB| | + +oB=o=+| | o +*=+Oo| | +*OBX| +----[SHA256]-----+
ssh-copy-id root@Backup-IP
ssh root@Backup-IP
backup
. Сюда будем сохранять резервные копии файлов с сервера Prod. Возвращаемся обратно на Prod сервер.
cd /root | mkdir backup exit
Метод Sync (инкрементальное сохранение изменений)
cd var mkdir www cd www touch 1.html index.html hello.html
var
и там создали директорию www
с файлами 1.html
, index.html
, hello.html
.
rsync -azvP --delete /var/www/ root@Backup-IP:/root/backup/ sending incremental file list ./ 1.html 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/4) hello.html 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=1/4) index.html 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=0/4) sent 222 bytes received 76 bytes 198.67 bytes/sec
hello.html
и создадим новый файл 2.html
:
rm -r hello.html touch 2.html
rsync -azvP --delete /var/www/ root@Backup-IP:/root/backup/
sending incremental file list deleting hello.html ./ 2.html 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/4) sent 150 bytes received 52 bytes 134.67 bytes/sec total size is 0 speedup is 0.00
backup
файл hello.html
и скопировал туда файл 2.html
. Предлагаю создать исполняемый файл, в дальнейшем он нам понадобится для автоматизации бекапа:
nano sync.sh
#!/bin/sh rsync -azvP --delete /var/www/ root@Backup-IP:/root/backup/
sh sync.sh
Метод Snapshot (создание полной копии указанной директории)
backup
. Файлы будут утеряны. Для решения проблемы можно реализовать следующий алгоритм:snapshot
на сервере Backup. Создаем snapshot.sh:
nano snapshot.sh
!/bin/sh DATE=$(date +%Y-%m-%d-t-%H-%M-%S) rsync -arvt -t /var/www/ root@5.188.118.203:/root/backup/snapshot/$DATE
sh snapshot.sh
sending incremental file list created directory /root/backup/snapshot/2021-09-01-t-16-44-29 ./ 1.html 2.html index.html snapshot.sh sync.sh sent 577 bytes received 180 bytes 1,514.00 bytes/sec total size is 213 speedup is 0.28
Автоматизируем задачу копирования файлов
crontab -e
# Ежедневное копирование изменений в 09:30 30 9 * * * /root/sync.sh # Еженедельное копирование полной копии в Понедельник 10:30 30 10 * * 1 /root/snapshot.sh
- 0 views
- 0 Comment
Свежие комментарии