Share This
Связаться со мной
Крути в низ
Categories
//🛠 Как использовать rsync для резервного копирования файлов ваших VDS

🛠 Как использовать rsync для резервного копирования файлов ваших VDS

Рассмотрим кейс резервного копирования файлов между сервером Prod и сервером Backup. В качестве инструмента будем использовать популярную бесплатную утилиту rsync.

kak ispolzovat rsync dlja rezervnogo kopirovanija fajlov vashih vds 79853f6 - 🛠 Как использовать rsync для резервного копирования файлов ваших VDS

Синхронизация, мощный инструмент для системных администраторов. Синхронизация состояния файлов между двумя или более серверами, одна из повседневных задач системных администраторов.

Утилита rsync позволяет производить синхронизацию директорий по ssh и поддерживает следующие методы:

  • Sync method (синхронизация только изменений указанной директории).
  • Snapshot (создание полной копии указанной директории).

В статье разберем оба метода, а также автоматизируем комплексный backup по расписанию.

Что нам понадобится:

  • Сервер с OS Ubuntu 20.04 LTS – Prod.
  • Сервер с OS Ubuntu 20.04 LTS – Backup.

Серверы для тестов предоставлены компанией Selectel.

Заходим по ssh на сервер Prod:

         ssh root@Prod-IP     

Поскольку утилита rsync работает через ssh, необходимо сгенерировать ключ:

         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]-----+       

Затем копируем сгенерированный ключ на сервер Backup:

         ssh-copy-id root@Backup-IP       

Копирование ключа делается один раз и позволяет не вводить пароль при соединении по SSH. Зайдем на бэкап-сервер с помощью ssh:

         ssh root@Backup-IP     

Видим что мы зашли на сервер и у нас не спросили пароль 🙂 Так как мы на сервере Backup сервере предлагаю создать директорию backup. Сюда будем сохранять резервные копии файлов с сервера Prod. Возвращаемся обратно на Prod сервер.

         cd /root | mkdir backup exit      

Метод Sync (инкрементальное сохранение изменений)

При таком методе сохраняются только изменения в целевой директории. Утилита rsync мониторит директорию и если произошли следующие события отправляет изменения на сервер Backup.

  • Если были добавлены новые файлы.
  • Если были произведены изменения в файлах контролируемой директории.
  • Если было удаление файлов в контролируемой директории.

На сервере Prod создадим директорию и в ней файлы, которые будет мониторить утилита rsync:

         cd var mkdir www cd www touch 1.html index.html hello.html       

Мы перешли в var и там создали директорию www с файлами 1.html, index.html, hello.html.

Почти готово 🙂 Запускаем rsync в режиме синхронизации изменений:

         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      

Видим что была отправка файлов на сервер Backup. Теперь внесем изменения. Удалим файл hello.html и создадим новый файл 2.html:

         rm -r hello.html touch 2.html       

Повторно запустим rsync:

         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       

Видим что rsync удалил в папке backup файл hello.html и скопировал туда файл 2.html. Предлагаю создать исполняемый файл, в дальнейшем он нам понадобится для автоматизации бекапа:

         nano sync.sh       
         #!/bin/sh  rsync -azvP --delete /var/www/ root@Backup-IP:/root/backup/       

Теперь нет необходимости запоминать длинную команду rsync, а достаточно запустить sync.sh (не забудьте сделать его исполняемым с помощью команды chmod):

         sh sync.sh     

Метод Snapshot (создание полной копии указанной директории)

У метода инкрементного бэкапа есть недостаток. Если вы, к примеру, ошибочно удалите файлы, то удаление также произойдет и в директории backup. Файлы будут утеряны. Для решения проблемы можно реализовать следующий алгоритм:

  • Делаем инкрементный backup каждый день утром в 09:30.
  • Делаем полный backup (Snapshot) еженедельно в понедельник 10:30.

Snapshot кладем в предварительно созданную директорию 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       

Из вывода результата исполнения snapshot.sh видим, что была сделана и отправлена полная копия сохраняемой директории в backup с именем текущей даты и времени.

Автоматизируем задачу копирования файлов

Автоматизируем наш backup. Мы не зря создавали исполняемые файлы sync.sh и snapshot.sh. Теперь нужно создать в планировщике Cron задание:

         crontab -e       
         # Ежедневное копирование изменений в 09:30 30 9 * * * /root/sync.sh  # Еженедельное копирование полной копии в Понедельник 10:30 30 10 * * 1 /root/snapshot.sh       

Готово! В планировщике два задания которые будут с помощью утилиты rsync копировать ежедневные изменении и раз в неделю делать полную копию.

*** Чтобы ускорить работу системы, выберите провайдера инфраструктуры, который наилучшим образом соответствует требованиям вашего ресурса: объем накопителя, процессор и количество ядер, объем оперативки и ежемесячного трафика, наличие резервного копирования, быстрая техническая поддержка. Мы тестировали серверы, любезно предоставленные компанией Selectel.

Для резервного копирования с одного рабочего сервера отдельная физическая машина может показаться избыточной, если проект не особенно крупный. Такая конфигурация скорее подойдет для нескольких серверов на проде (или одного, если он обслуживает большой проект). Selectel предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, а также с возможностью подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разработчиков.

Интересно, посмотреть тарифы Selectel

  • 5 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close