Синхронизируем данные между серверами с помощью rsync

Итак, несколько дней назад мне понадобилось перенести кое-какие данные с одного сервера на другой. Немного поискав в нете инфы о том, с помощью чего это можно сделать быстро, качественно, в защищенном канале и без гемора, да и так, чтобы если вдруг такой файл есть на целевом сервере, то его не трогать… и т.д.

Задача:

  1. Надо перенести файлы, с умной проверкой с одного сервера на другой
  2. Проверять на существование файлов, не перезаписывать если такой уже есть, дописать, если дата изменения отличатеся, или размер меньше
  3. Производить все операции в защищенном канале (туннеле)
  4. Возможность настроить на автоматические действия по расписанию, то есть делать тоже самоеделать но по указанному времени, автоматом, например через cron
  5. Не использовать другие протоколы передачи данных, кроме http

Решение:

  1. Устанавливаем rsync
    portinstall -R rsync
  2. далее все просто: указываем опции (options), источник (source) и приемник (destination):
    rsync -azvh(n) -e 'ssh -p 1627 -l root' site.com:/source/dir(/) /destin/dir/ 

Расшифровка:

  • e — заменяет протокол с rsh на ssh (в одинарных кавычках: -p – порт, -l – пользователь)
  • progress — вывод хода процесса работы на терминал
  • l — пересоздание symlinks, это значит, что символические ссылки будут так же переноситься
  • z — использовать сжатие
  • u — update. Обновление, он будет пропускать файлы которые новей, чем на удалённом сервере
  • o — установить владельца конечного файла таким же, как и у исходного
  • g — установить группу конечного файла таким же, как и у исходного
  • t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации
  • h — вывод информации на терминал в удобном для чтения (human-readable) виде
  • v — verbose. Вывод сообщений в терминал.
  • r — рекурсивный режим
  • n — отладочный режим
  • compress-level — уровень сжатия
  • delete-after — удалять файлы, которые не были найдены на удалённом сервере, “-after” означает, что удалить их нужно, только после окончания синхранизации. Так-же есть delete-before, delete-during, delete-excluded и просто delete

отладочный режим

Перед тем как запустить скрипт на рабочей машине, опробуйте всё в отладочном режиме, для этого используется ключь “-n”. В этом случае, rsyncне будет менять или удалять файлы, но покажет, весь ход работы.

исключение файлов

RSync может как исключать, так и включать файлы, по заданному шаблону. Например —exclude *.run исключит все файлы с расширением run.

В источнике указываем хост, разделитель : указывает на директорию. В приемнике просто директорию. Формат host:/dir – можно использовать как в источнике так и в применике, все зависит от того, что и куда вы синхронизируете.

Еще момент, если в источнике указать в конце слэш / , то будет синхронизированы только файлы в этой директории, если без слэша, то директория и все, что в ней.

Данная утилита позволяет также хранить пароль для уделенного пользователя в отдельном файле, и при вызове указывать путь к этому файлу, это удобно в том случае, когда вы настраиваете автоматический бекап файлов на удаленный сервер, с помощью ssh и удаленного пользователя, у котого установлен пароль.

Ну и конечно же, куда без man rsync 🙂

Leave a Reply