Синхронизируйте локальные и удаленные каталоги с помощью 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