Синхронизация каталогов с помощью Lsyncd в Linux

by itisgood

В этой статье я объясню, как установить Lsyncd (Live Syncing Mirror Daemon) в системах Linux и как синхронизировать удаленные и локальные каталоги в Linux.

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

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

По умолчанию это только rsync.

Все пользовательские файлы конфигурации написаны на языке Lua, таким образом, можно получить мощную, гибкую и простую конфигурацию.

Lsyncd 2.2.1 требует rsync 3.1 для всех исходных и целевых машин.

Установка Lsyncd на RHEL / CentOS 7

Чтобы включить lsyncd в системе CentOS 7.5, нам нужно включить репозиторий EPEL.

Вы можете просто запустить эту команду для ее установки.

#yum install epel-release
#yum install lsyncd

Вы можете подтвердить установленную версию, выполнив следующую команду:

# lsyncd -version
Version: 2.2.2

Настройка Lsyncd

Файл конфигурации Lsyncd создается автоматически в /etc/lsyncd.conf в системе RHEL / CentOS 7.5.

По умолчанию его содержимое выглядит следующим образом:

# cat /etc/lsyncd.conf
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/

Мы должны изменить этот файл конфигурации в соответствии с нашей целью.

Как упоминалось в этом файле конфигурации, все примеры сценариев доступны в следующем месте: /usr/share/doc/lsyncd-2.2.2/examples/

# cd /usr/share/doc/lsyncd-2.2.2/examples/
[root@li1050-94 examples]# ll
total 40
-rw-r--r--. 1 root root 715 Feb 16 2017 lalarm.lua
-rw-r--r--. 1 root root 1055 Feb 16 2017 lbash.lua
-rw-r--r--. 1 root root 534 Feb 16 2017 lecho.lua
-rw-r--r--. 1 root root 3376 Feb 16 2017 lftp.lua
-rw-r--r--. 1 root root 2278 Feb 16 2017 lgforce.lua
-rw-r--r--. 1 root root 2737 Feb 16 2017 limagemagic.lua
-rw-r--r--. 1 root root 2770 Feb 16 2017 lpostcmd.lua
-rw-r--r--. 1 root root 211 Feb 16 2017 lrsync.lua
-rw-r--r--. 1 root root 204 Feb 16 2017 lrsyncssh.lua
-rw-r--r--. 1 root root 4047 Feb 16 2017 lsayirc.lua

Все эти файлы представляют собой файлы конфигурации lsyncd.

Ниже приведены примеры файлов конфигурации:

Пример конфигурации для локальной синхронизации:

# cat /usr/share/doc/lsyncd-2.2.2/examples/lrsync.lua
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
}

sync{
default.rsync,
source="src",
target="trg",
}

Пример конфигурации для удаленной синхронизации:

# cat /usr/share/doc/lsyncd-2.2.2/examples/lrsyncssh.lua
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
sync{default.rsyncssh, source="src", host="localhost", targetdir="dst/"}

Чтобы сохранить этот процесс синхронизации вместо запуска задания cron каждые X минут, lsyncd использует хуксы ядра Linux, чтобы получать уведомления, когда какой-либо файл в каталоге был изменен.

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

sync {
default.rsyncssh,
source = "SRC",
target = "DEST",
delete = "running", -- prevents deletion of files on startup (ie when a server comes back online, don't delete files that are new on the backup)
delay = 5, -- run every 5 seconds instead of default 20
}

Во время использования команды sync default.rsyncssh всегда рекомендуется использовать параметр –delete для предотвращения отсутствия файлов из целевых папок.

После создания или изменения файла конфигурации lsyncd необходимо перезапустить процесс lsyncd.

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

Ниже перечислены некоторые важные параметры rsync:

  • –delete: этот параметр гарантирует, что все файлы в удаленном каталоге, которые не находятся в исходном каталоге, будут удалены.
  • -times: этот параметр довольно важен, если вы будете запускать этот сценарий снова и снова, так как он будет синхронизировать время между двумя файлами.
  • –force: этот параметр позволяет удалить непустой каталог для замены пустым каталогом.
  • -links: эта опция используется для копирования символических ссылок в виде символических ссылок.
  • –progress2: он показывает общий прогресс всей передачи, а не только одного файла, который копируется.
  • -dry-run: этот вариант выполняет пробный запуск без фактических операций с удалением или переносом, но сообщает вам, что он будет делать. Я настоятельно рекомендую использовать эту опцию при первом запуске любой команды rsync после ее написания.
  • –owner: обеспечивает сохранение владельца пользователя файла (а не уровня разрешения для владельца).
  • – group: обеспечивает сохранение группового пользователя файла (а не уровня разрешений для группы).
  • –perms: сохранить разрешения.
  • –sparse: обеспечивает эффективную передачу разреженных файлов изображений.

Синхронизация локальных каталогов

Теперь давайте посмотрим, как синхронизировать две локальные папки с помощью lsyncd.

Мы можем создать исходную папку, а именно SRC_DIR и целевую папку, а именно DEST_DIR, чтобы более подробно объяснить этот процесс.

Давайте создадим папки и добавим некоторые файлы в исходный каталог для выполнения синхронизации.

# mkdir SRC_DIR *// Create source directory //*
# mkdir DEST_DIR *// Create target directory //*
# cd SRC_DIR/ *// Move to the source folder and create some random files //*
# touch file{1..10}
~/SRC_DIR# ll *// List out the Source folder contents //*
total 8
drwxr-xr-x 2 root root 4096 Aug 2 07:45 ./
drwx------ 7 root root 4096 Aug 2 07:46 ../
-rw-r--r-- 1 root root 0 Aug 2 07:45 file1
-rw-r--r-- 1 root root 0 Aug 2 07:45 file10
-rw-r--r-- 1 root root 0 Aug 2 07:45 file2
-rw-r--r-- 1 root root 0 Aug 2 07:45 file3
-rw-r--r-- 1 root root 0 Aug 2 07:45 file4
-rw-r--r-- 1 root root 0 Aug 2 07:45 file5
-rw-r--r-- 1 root root 0 Aug 2 07:45 file6
-rw-r--r-- 1 root root 0 Aug 2 07:45 file7
-rw-r--r-- 1 root root 0 Aug 2 07:45 file8
-rw-r--r-- 1 root root 0 Aug 2 07:45 file9

Затем вы можете создать файлы журнала lsyncd и файлы статуса, чтобы отслеживать процесс.

Эти шаги являются необязательными.

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

Теперь нам нужно изменить наш конфигурационный файл lsyncd для выполнения локального rsync.

Как мы обсуждали ранее, файл конфигурации lsyncd по умолчанию для системы CentOS – это /etc/lsyncd.conf.

Нам нужно обновить эти файлы конфигурации с помощью исходных и целевых каталогов и наших файлов журналов.

# cat /etc/lsyncd.conf
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
--
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
default.rsync,
source = "/root/SRC_DIR",
target = "/root/DEST_DIR",
}

Вы можете заменить исходный и целевой каталоги на свои собственные значения.

Сохраните и закройте файл конфигурации.

Как только это будет сделано, перезапустите и включите службу lsyncd.

# systemctl enable lsyncd
lsyncd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable lsyncd
# systemctl start lsyncd

Теперь сравните содержимое исходных и целевых каталогов, чтобы подтвердить корректность его работы.

SRC_DIR]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 2 13:51 file1
-rw-r--r--. 1 root root 0 Aug 2 13:51 file10
-rw-r--r--. 1 root root 0 Aug 2 13:51 file2
-rw-r--r--. 1 root root 0 Aug 2 13:51 file3
-rw-r--r--. 1 root root 0 Aug 2 13:51 file4
-rw-r--r--. 1 root root 0 Aug 2 13:51 file5
-rw-r--r--. 1 root root 0 Aug 2 13:51 file6
-rw-r--r--. 1 root root 0 Aug 2 13:51 file7
-rw-r--r--. 1 root root 0 Aug 2 13:51 file8
-rw-r--r--. 1 root root 0 Aug 2 13:51 file9

DEST_DIR]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 2 13:51 file1
-rw-r--r--. 1 root root 0 Aug 2 13:51 file10
-rw-r--r--. 1 root root 0 Aug 2 13:51 file2
-rw-r--r--. 1 root root 0 Aug 2 13:51 file3
-rw-r--r--. 1 root root 0 Aug 2 13:51 file4
-rw-r--r--. 1 root root 0 Aug 2 13:51 file5
-rw-r--r--. 1 root root 0 Aug 2 13:51 file6
-rw-r--r--. 1 root root 0 Aug 2 13:51 file7
-rw-r--r--. 1 root root 0 Aug 2 13:51 file8
-rw-r--r--. 1 root root 0 Aug 2 13:51 file9

Ура! Содержимое исходного каталога SRC_DIR успешно синхронизировано с целевым каталогом.

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

# tail -10 /var/log/lsyncd/lsyncd.log
Thu Aug 2 14:03:16 2018 Normal: --- Startup ---
Thu Aug 2 14:03:16 2018 Normal: recursive startup rsync: /root/SRC_DIR/ -> /root/DEST_DIR/
Thu Aug 2 14:03:16 2018 Normal: Startup of /root/SRC_DIR/ -> /root/DEST_DIR/ finished.

# more /var/log/lsyncd/lsyncd.status
Lsyncd status report at Thu Aug 2 14:03:27 2018

Sync1 source=/root/SRC_DIR/
There are 0 delays
Excluding:
nothing.

Inotify watching 1 directories
1: /root/SRC_DIR/

 

You may also like

Leave a Comment