Добавить в корзинуПозвонить
Найти в Дзене
Записки сисадмина

Синхронизация файлов сервера linux

Иногда возникает необходимость держать одинаковые файлы на нескольких серверах, будь то какие-то конфигурационные файлы, либо обычные картинки, видео и т.д. Когда приходит такая задача, любому начинающему админу сразу вспоминается rsync. Он удобен для передачи данных между машинами, достаточно гибок в настройке, может пропускать не измененные файлы, чтобы лишний раз не нагружать систему. Однако, rsync имеет свои недостатки: он медленный в работе и не дает нам возможности автоматизировать процесс синхронизации на лету. В таких случаях нам на помощь может прийти надстройка над rsync - lsync. Итак, что же такое lsync? Lsync - это инструмент для синхронизации файлов и директорий между двумя системами или между локальной системой и удаленной. Он отслеживает изменения в файловой системе для минимизации объема данных, которые нужно передавать, и тем самым обеспечивает более быструю синхронизацию. (На CentOS или RHEL:) yum install lsyncd rsync (Ubuntu или Debian:) sudo apt-get install lsyncd r

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

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

Однако, rsync имеет свои недостатки: он медленный в работе и не дает нам возможности автоматизировать процесс синхронизации на лету.

В таких случаях нам на помощь может прийти надстройка над rsync - lsync.

Итак, что же такое lsync?

Lsync - это инструмент для синхронизации файлов и директорий между двумя системами или между локальной системой и удаленной. Он отслеживает изменения в файловой системе для минимизации объема данных, которые нужно передавать, и тем самым обеспечивает более быструю синхронизацию.

  • Для начала установим его:
(На CentOS или RHEL:)
yum install lsyncd rsync
(Ubuntu или Debian:)
sudo apt-get install lsyncd rsync

Важно: lsyncd в своей работе использует пакет rsync, так что без него работать не будет

  • Создадим папку для логов:
mkdir -p /var/log/lsyncd
  • Настроим наш конфигурационный файл:
базовая конфигурация lsyncd
базовая конфигурация lsyncd

Для начала, кофигурация lsyncd написана на языке yaml, так что количество пробелов при отступе имеет значение.

Давайте разберемся, что же написано в нашем конфиге:

source = "/path/to/directory/on/server/" - папка на нашем сервере, файлы из которой будут передаваться клиенту. В кавычках нужно указать полный путь.

host = "target_host" - Клиент, которому мы передаем наши файлы. Можно указать как "user@ip.ip.ip.ip", можно указать как "user@domain_name", а можно как у меня - строкой из конфигурации ssh.

запись для нашего клиента из .ssh/config
запись для нашего клиента из .ssh/config

targetdir = "/path/to/directory/on/client/" - папка на клиенте, в которую мы будем синхронизировать файлы. Так же нужно указывать полный путь.

excludeFrom = "/root/lsync_exclude.ls" - полный путь до файла с исключениями (файлы, которые не нужно синхронизировать). В файле указываются только относительные пути (относительно директивы source)

rsync = {rsh = "/usr/bin/ssh -l root -i /root/.ssh/id_rsa", compress = true, _extra = {"-auSs",},} - здесь мы указываем то, что для синхронизации будет использоваться пакет rsync, для входа на клиент будет запущена команда ssh от пользователя root, по ключу /root/.ssh/id_rsa. Также файлы будут сжиматься при передаче, чтобы процесс проходил быстрее.

  • Теперь нам осталось только запустить нашего демона и добавить его в автозапуск:
systemctl start lsyncd
systemctl enable lsyncd

  • Для проверки состояния нашего демона мы можем вывести
systemctl status lsyncd
-3

Как только демон начнет свою работу, в его статусе и в лог файле вы увидите записи о том, когда и какие файлы он отправил.

Важно: lsync реагирует только на измененные файлы, пропуская все остальные. Удается ему это благодаря тому, что он держит в памяти информацию о всех ваших файлах в директивах "source". Так что при перезапуске демона, он может не сразу начать синхронизацию.