Хочешь уверенно проходить IT-интервью?

Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых голова идёт кругом. Но с AI тренажёром всё гораздо проще.
💡 Почему Т1 тренажёр — это мастхэв?
- Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше
- Научишься не только решать задачи, но и объяснять своё решение так, чтобы интервьюер сказал: "Вау!".
- Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих целях.
Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов!
Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy
Утилита rsync позволяет производить синхронизацию директорий по ssh и поддерживает следующие методы:
- Sync method (синхронизация только изменений указанной директории).
- Snapshot (создание полной копии указанной директории).
В статье разберем оба метода, а также автоматизируем комплексный backup по расписанию.
Что нам понадобится:
- Сервер с OS Ubuntu 20.04 LTS – Prod.
- Сервер с OS Ubuntu 20.04 LTS – Backup.
Заходим по 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 (инкрементальное сохранение изменений)
- Если были добавлены новые файлы.
- Если были произведены изменения в файлах контролируемой директории.
- Если было удаление файлов в контролируемой директории.
На сервере 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 предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, а также с возможностью подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разработчиков.
Комментарии