Lab / VPS / DevOPS

rsync: Как настроить синхронизацию двух VPS серверов или настроить бекап на виртуальном сервере

Наверняка вы сталкивались с задачей настоить бекапы на вашем кастомном VPS сервере или у вас возникало желание настроить синхронизацию папок или целых VPS серверов между собой.

Не смотря на кажущуюся с первого взгляда сложность, задачка это достаточно простая. Во всех unix подобных системах есть отличный встроенный инструмент под названием rsync который отлично справляется со всеми выше описанными сценариями. Кстати rsync работет и на MacOS, так что вы можете бекапить прямо в свой домашний компьютер.

Давайте рассмотрим на примере копирования файлов вашего VPS на локальную машину. Так как я использую MacOS нужно просто зайти в терминал и выполнить вот такую команду:

sudo rsync --archive root@<IP>:/* --exclude={"/tmp/","/sys/","/proc/","/dev/","/mnt/"} .

Данная команда полностью скачает содержимое вашего VPS сервера на ваш локальный компьютер. Перед выполнением заменяем <ip> на IP вашего сервера, а в параметре --exclude исключаем не нужные нам папки, например node_modules для проектов на ноде или папку vendor если вы подключаете зависимости через композер. В примере выше мы исключили не важные для состояния сервера системные папки.

Основы

Синтаксис использования rsync достаточно простой:

rsync SRC DEST

Где SRC это исходная папка, а DEST папка в которую мы будем бекапить данные.

Давайте рассмотрим полезные флаги:

-a — Рекурсивное копирование следует применять почти всегда

-z — Сжимает данные для уменьшнние передаваемого по сети трафика

-v — Выводить в консоль результат работы скрипта

-P — Отображает прогресс и позволяет возобновить прерванное копирование

-h — Дополняет параметр -P конвертируя байты в mb и gb

Все параметры можно сочетать между собой для полной автоматизации. Например, мой самый частый кейс использования:

rsync -azPh SRC DEST

Как вы наверное уже догадались тут идёт синхронизация папок рекурсивно, со сжатием и выводом прогресса на экран.

Автоматизация

Запускать каждый раз руками эту процедуру — весьма утомительно, благо для решения этой задачи у rsync есть демон, который можно запусить как фоновый процесс. Конфиг демона находится по этому пути: /etc/rsyncd.conf, что бы его запустить используйсте следующую команду rsync --daemon

Удалённый сервер

Для того, что бы настроить автоматический бекап с удалённого сервера всё точно идентично:

rsync -az root@180.0.0.1:/var/www/ /rbackup

После выполнения команды разрешите подключение к удалённому серверу и введить от него парль