Поиск по сайту:

Синхронизируйте локальные и удаленные каталоги с помощью Lsyncd в Linux

В этом руководстве описывается, как синхронизировать локальные и удаленные каталоги в Linux с помощью Lsyncd (демон Live Syncing). Используя Lsyncd, мы можем зеркалировать локальные каталоги в локальные или локальные в удаленные каталоги. Это удобно, если вы хотите синхронизировать данные между каталогами, которые часто обновляются новым содержимым. Lsyncd предназначен для синхронизации локального дерева каталогов с низким профилем ожидаемых изменений с удаленным зеркалом. Особенно полезно синхронизировать данные из безопасной области с не очень безопасной.

Установите Lsyncd в Linux

В Debian и его производных, таких как Ubuntu, Linux Mint запускает следующую команду для установки Lsyncd:

sudo apt-get install lsyncd

В RHEL, CentOS вам необходимо сначала включить репозиторий EPEL.

sudo yum install epel-release

Затем установите Lsyncd с помощью команды:

sudo yum install lsyncd

Конфигурация Lsyncd в Debian и Ubuntu и их производных

Lsyncd не предоставляет файл конфигурации по умолчанию в системах на базе DEB. Нам нужно создать его вручную. Однако Lsyncd включает в себя несколько примеров файлов конфигурации, которые полезны для получения общего представления о том, что и как он выполняет синхронизацию. Примеры файлов конфигурации находятся в каталоге "/usr/share/doc/lsyncd-*/examples".

ls /usr/share/doc/lsyncd/examples/

Пример вывода:

lbash.lua lgforce.lua lpostcmd.lua lrsyncssh.lua
lecho.lua limagemagic.lua lrsync.lua

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

cat /usr/share/doc/lsyncd/examples/lrsync.lua

Вот как выглядит файл конфигурации Lrsync:

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings = {
 statusFile = "/tmp/lsyncd.stat",
 statusInterval = 1,
}

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

Конфигурация Lsyncd в RHEL и CentOS

В системах RHEL и CentOS файл конфигурации Lsyncd будет создан автоматически. Посмотреть содержимое этого файла можно командой:

cat /etc/lsyncd.conf

Примеры файлов конфигурации доступны в следующем месте.

ls /usr/share/doc/lsyncd-2.1.5/examples/

Синхронизируйте локальные и удаленные каталоги в Linux с помощью Lsyncd

Как уже говорилось, Lyncd может синхронизировать содержимое двух локальных каталогов и локального каталога с удаленным каталогом. Сначала мы увидим, как синхронизировать локальные каталоги.

1. Синхронизируйте локальные каталоги в Debian, Ubuntu.

Теперь мы синхронизируем два локальных каталога.

Давайте создадим два каталога с примерами содержимого.

sudo mkdir source_dir
sudo mkdir dest_dir

Создайте несколько случайных файлов в каталоге source_dir:

sudo touch source_dir/file{1..10}

При желании вы можете создать несколько файлов журналов для Lysyncd. Это просто необязательно. Если вам не нужны файлы журналов, пропустите этот шаг.

sudo mkdir /var/log/lsyncd
sudo touch /var/log/lsyncd/lsyncd.{log,status}

Затем создайте файл конфигурации для Lsyncd:

sudo mkdir /etc/lsyncd
sudo nano /etc/lsyncd/lsyncd.conf.lua

Отредактируйте/измените следующие строки:

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
        default.rsync,
        source = "/home/sk/source_dir",
        target = "/home/sk/dest_dir",
}

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

Включите и запустите или перезапустите службу Lsyncd с помощью команд:

sudo systemctl enable lsyncd
sudo systemctl restart lsyncd

Теперь проверьте содержимое каталогов source_dir и dest_dir.

ls source_dir/

Пример вывода:

file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

Проверьте содержимое dest_dir:

ls dest_dir/

Пример вывода:

file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

Видеть? Мы создали файлы только в каталоге source_dir, и содержимое этого каталога автоматически синхронизировалось с каталогом dest_dir.

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

tail -10 /var/log/lsyncd/lsyncd.log

Пример вывода:

Sat Apr 15 17:07:34 2017 Normal: recursive startup rsync: /home/sk/source_dir/ -> /home/sk/dest_dir/
Sat Apr 15 17:07:34 2017 Normal: Startup of "/home/sk/source_dir/" finished.

Проверьте файл состояния Lsyncd:

more /var/log/lsyncd/lsyncd.status

Пример вывода:

Lsyncd status report at Sat Apr 15 17:07:44 2017

Sync1 source=/home/sk/source_dir/
There are 0 delays
Excluding:
 nothing.


Inotify watching 1 directories
 1: /home/sk/source_dir/

2. Синхронизируйте локальные каталоги на RHEL, CentOS.

Отредактируйте файл конфигурации Lsyncd:

sudo nano /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.log",
 statusFile = "/var/log/lsyncd.status"
}

sync {
 default.rsync,
 source = "/root/source_dir",
 target = "/root/dest_dir",

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

Включите и запустите службу Lsyncd с помощью команд:

sudo systemctl enable lsyncd
sudo systemctl start lsyncd

Теперь проверьте содержимое каталогов source_dir и dest_dir.

ls source_dir/

Пример вывода:

file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

Проверьте содержимое dest_dir:

ls dest_dir/

Пример вывода:

file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

Поздравляю! Содержимое source_dir успешно синхронизировано с каталогом dest_dir.

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

tail -10 /var/log/lsyncd.log

Проверьте файл состояния Lsyncd:

more /var/log/lsyncd.status

3. Синхронизируйте удаленные каталоги в системах Debian, Ubuntu.

Нам нужно настроить SSH-вход без пароля. Это связано с тем, что Lsyncd автоматически реплицирует содержимое локального каталога в удаленный каталог без вмешательства пользователя.

sudo su
ssh-keygen -t rsa

Не вводите парольную фразу. Просто нажмите ENTER, чтобы принять значения по умолчанию.

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/home/sk/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:dHc2aKk5F2wBq7CIc5sVHJwYNjoPdwgxDKb1KuBBkgs sk@ubuntuserver
The key's randomart image is:
+---[RSA 2048]----+
|o*=.++.. ... |
|E..*.+o. o + |
|+o+ + = . o O + |
|+ .B o = o * + . |
|..+ + o S + . |
| . o + o |
| o |
| |
| |
+----[SHA256]-----+

Теперь скопируйте открытый ключ SSH в свою удаленную систему:

ssh-copy-id root@192.168.43.150

Пример вывода:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.43.150 (192.168.43.150)' can't be established.
ECDSA key fingerprint is SHA256:U7I0O1OOzzbHFlhIG0HoGDr1usHzLBju6Jmr6bUB9Es.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.43.150's password: 

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@192.168.43.150'"
and check to make sure that only the key(s) you wanted were added.

Здесь 192.168.43.150 — это IP-адрес удаленной системы.

Теперь вы сможете подключиться к удаленной системе по SSH без необходимости ввода пароля:

ssh root@192.168.43.150

Создайте целевой каталог в удаленной системе с помощью команды:

mkdir remotesync

Выйдите из удаленной системы:

exit

Затем отредактируйте файл конфигурации Lsyncd на исходном компьютере:

sudo nano /etc/lsyncd/lsyncd.conf.lua

Отредактируйте/измените следующие строки:

settings {
 logfile = "/var/log/lsyncd/lsyncd.log",
 statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
 default.rsync,
 source = "/home/sk/source_dir",
 host = "192.168.43.150",
 targetdir = "/root/remotesync",
}

Здесь 192.168.43.150 — это IP-адрес моего удаленного хоста. И /root/remotesync/ — это каталог назначения в моей удаленной системе. Замените значения на свои. Сохраните и закройте файл.

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

sudo systemctl restart lsyncd

Теперь подключите SSH к вашей удаленной системе:

ssh root@192.168.43.150

И проверьте содержимое целевого каталога (т. е. /root/remotesync/ в нашем случае). Вы увидите, что все файлы из исходного каталога локальной системы были реплицированы в целевой каталог целевой системы.

root@server1 ~]# ls remotesync/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

Эта процедура одинакова для систем RHEL и CentOS. Настройте вход по SSH без пароля и убедитесь, что вы изменили правильные исходные и целевые пути в основном файле конфигурации Lsyncd (/etc/lsyncd.conf) в вашей системе RHEL или CentOS, а остальные шаги такие же.

Вы знаете, как синхронизировать локальные и удаленные каталоги в Linux с помощью Lsyncd. Как видите, это очень простой и понятный метод.

Ресурс:

  • Страница Lsyncd на GitHub

Статьи по данной тематике