Используемые термины: rsync , Linux , CentOS , Ubuntu .
Lsyncd позволяет отслеживать состояние каталога с помощью подсистемы ядра inotify, и при помощи утилиты синхронизации rsync, менять содержимое другого каталога, таким образом, приводя оба каталога к единому виду. Это может использоваться для зеркалирования кластерной системы или создания оперативного бэкапа (не путать с полноценной резервной копией).
В данной инструкции нами будет рассмотрен процесс установки и настройки Lsyncd на компьютер с Linux CentOS версий 8 и 7, а также Ubuntu. Мы настроим синхронизацию папок как на локальном компьютере, так и удаленных по сети.
Установка и настройка тестовой синхронизации
Синхронизация по сети с использованием SSH
Примеры использования дополнительных настроек
Исключений
Использование комментарий
Указание порта SSH
Настройка ограничений
Установка прав
Работа в режиме кластера active-active
Возможные ошибки
Выполним установку lsyncd на Linux, а также настроим сервис для синхронизации двух каталогов на локальном компьютере.
В зависимости от типа операционной системы, наши действия будут отличаться.
а) RPM (Rocky Linux, CentOS):
yum install epel-release
yum install lsyncd
б) DEB (Debian, Ubuntu):
apt update
apt install lsyncd
mkdir /etc/lsyncd
Установка завершена.
Разрешаем автозапуск сервиса:
systemctl enable lsyncd
Открываем конфигурационный файл.
а) Для CentOS:
vi /etc/lsyncd.conf
б) Для Ubuntu:
mkdir -p /etc/lsyncd
vi /etc/lsyncd/lsyncd.conf.lua
Приводим его к виду:
settings {
logfile = «/var/log/lsyncd.log»,
statusFile = «/var/log/lsyncd.stat»,
statusInterval = 5,
insist = true,
nodaemon = false,
}
sync {
default.rsync,
source=»/tmp/source»,
target=»/tmp/target»,
}
* где:
* в данном примере мы синхронизируем два каталога на локальном компьютере. Таким же образом, можно синхронизировать данные и в подмонтированных каталогах, например, по nfs или cifs (smb).
Создадим два тестовых каталога:
mkdir /tmp/source
mkdir /tmp/target
Перезапускаем сервис lsyncd:
systemctl restart lsyncd
Пробуем создать тестовый файл к каталоге-источнике:
touch /tmp/source/testfile
Ждем 5-10 секунд. Проверяем содержимое каталога-цели:
ls /tmp/target/
Мы должны увидеть файл:
testfile
Сервис готов к работе.
Для корректной передачи данных по сети с помощью SSH, нужно настроить возможность беспарольного подключения, затем — сам Lsyncd. Рассмотрим оба процесса по очереди.
На компьютере, с которого будем передавать файлы (lsyncd) генерируем ключи:
ssh-keygen -t ed25519
… на все запросы просто нажимаем Enter.
Переносим id_rsa.pub на целевой компьютер (куда будем передавать данные с помощью lsyncd):
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.15
* обратите внимание, что мы передаем созданный ключ в каталог пользователя root . Это значит, что мы будем подключаться к целевому компьютеру от этого пользователя. Важно, чтобы у последнего были подходящие права для редактирования файлов в целевой папке, в которую мы будем синхронизировать данные.
Если порт для подключения по SSH отличается от стандартного, применяем команду с ключом -p:
ssh-copy-id -p 2222 -i /root/.ssh/id_ed25519.pub root@192.168.1.15
Пробуем подключиться к удаленному компьютеру:
ssh root@192.168.1.15
Мы должны подключиться по SSH без ввода пароля. В противном случае, на целевом компьютере (к которому у нас не получилось подключиться) открываем конфигурационный файл для ssh:
vi /etc/ssh/sshd_config
И приводим опцию AuthorizedKeysFile к следующему значению:
AuthorizedKeysFile .ssh/authorized_keys
Перезапускаем sshd:
systemctl restart sshd
Снова пробуем подключиться по SSH.
Открываем конфигурационный файл.
а) Для CentOS:
vi /etc/lsyncd.conf
б) Для Ubuntu:
vi /etc/lsyncd/lsyncd.conf.lua
Добавляем блок настроек sync:
sync {
default.rsyncssh,
source = «/tmp/source»,
host = «root@192.168.1.15»,
targetdir = «/tmp/target»,
rsync = {
_extra = { «-a» }
}
}
* где:
На целевом компьютере создаем каталог, куда будем синхронизировать данные:
mkdir /tmp/target
И не забываем назначить ему владельца, от пользователя которого мы планируем подключиться по ssh:
chown root:root /tmp/target
Также на целевом компьютере необходимо установить rsync.
а) на CentOS:
yum install rsync
б) на Ubuntu:
apt install rsync
После на компьютере источнике перезапускаем lsync:
systemctl restart lsyncd
Ждем 5-10 секунд и проверяем на целевом компьютере наличие файла:
ls /tmp/target/
Мы должны увидеть файл:
testfile
Передача по сети работает.
Рассмотрим примеры использования некоторых настроек, которые могут показаться полезными.
Мы можем настроить исключение файлов по маске, которые не нужно передавать в другую директорию. Это делается с помощью опций exclude или excludeFrom в разделе sync, например:
sync {
…
exclude = { ‘*.bak’ , ‘*.tmp’ },
}
sync {
…
excludeFrom=»/etc/lsyncd.exclude»,
}
* в первом блоке мы исключим все файлы, которые заканчиваются на .bak или .tmp . Для второго мы будем использовать файл /etc/lsyncd.exclude , в котором перечислим исключения.
Для второго блока создаем файл с исключениями:
vi /etc/lsyncd.exclude
*.tmp
*.bak
testfile.txt
test/
* в данном примере мы игнорируем файлы, заканчиваются на .bak или .tmp ,а также файл testfile.txt и содержимое каталога test .
Стоит обратить внимание, что комментарии в конфигурационном файле ставятся с помощью двух дефисов, например:
sync {
— протокол синхронизации
default.rsyncssh,
— источник данных
source = «/tmp/source»,
— сервер назначения
host = «root@192.168.1.15»,
— каталог назначения
targetdir = «/tmp/target»,
}
Отдельный порт для подключения по ssh мы можем указать в блоке sync, разделе ssh:
sync {
default.rsyncssh,
source = «/tmp/source»,
…
ssh = {
port = 2222
}
}
* в этом примере мы указываем использовать порт 2222 для подключения по SSH.
При необходимости, мы можем установить некоторые значения для ограничения или обхода ограничений. Настройки задаются в блоке settings:
settings {
…
statusInterval = 5
maxDelays = 900,
maxProcesses = 6,
}
* где:
Мы можем задать права после синхронизации. Это настраивается в блоке sync, разделе rsync:
sync {
…
rsync = {
…
owner=true,
chown=»nginx:nginx»,
chmod=»775″,
perms=true,
}
}
* где:
При настройке нескольких нод, которые должны синхронизировать файлы друг на друга, может возникнуть проблема, когда одна из нод поднимается после выключения — она может удалить все файлы, которые успели создаться на другой ноде. То есть, при старте lsyncd, он считает, что информация на его комьпютере самая актуальная, и нужно привести ее в соответствие на других серверах.
Проблему решаем такими опциями:
sync {
…
delete = ‘running’,
—delay = 20,
rsync = {
…
update = true,
}
}
* где:
В процессе настройки и эксплуатации системы, мы можем столкнуться с различными проблемами. Опишем решение некоторых из них.
Данную ошибку мы можем увидеть в логе или статусе сервиса lsyncd. При этом, сама служба останавливается с ошибкой.
Причина: для оптимизации нагрузки, ядро Linux не позволяет сильно нагружать подсистему inotify. Но если мы указываем каталог синхронизации с большим количеством файлов, это приведет к тому, что мы упремся в установленный лимит.
Решение: необходимо увеличить предел наблюдения за ядром inotify. Для этого создаем файл настройки ядра:
vi /etc/sysctl.d/10-max_user_watches.conf
fs.inotify.max_user_watches = 524288
Применяем настройки:
sysctl -p /etc/sysctl.d/10-max_user_watches.conf
Перезапускаем сервис:
systemctl restart lsyncd
И проверяем его состояние:
systemctl status lsyncd
Данную ошибку можно увидеть в статусе сервиса. При этом, сам сервис завершает свою работу. Полный лог имеет, примерно, такой вид:
… lsyncd[20316]: bash: rsync: command not found
… lsyncd[20316]: rsync: connection unexpectedly closed (0 bytes received so far) [sender]
… lsyncd[20316]: rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.3]
Причина: на компьютере, с которым мы устанавливаем соединение по rsync не установлена одноименная утилита.
Решение: для установки необходимого пакета выполняем подходящую команду.
а) на CentOS:
yum install rsync
б) на Ubuntu:
apt install rsync
На компьютере с lsync перезапускаем сервис:
systemctl restart lsyncd
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…