В этом руководстве описывается, как синхронизировать локальные и удаленные каталоги в Linux с помощью Lsyncd (Live Syncing Daemon). Используя Lsyncd, мы можем легко отражать локальные каталоги и удаленные каталоги. Это будет очень полезно, если вы хотите синхронизировать данные между каталогами, которые часто обновляются новым содержанием. Lsyncd предназначен для синхронизации локального дерева каталогов с низким профилем ожидаемых изменений в удаленное зеркало. Это особенно полезно для синхронизации данных из защищенной области в не столь безопасном месте.
Синхронизация локальных и удаленных каталогов в Linux с использованием Lsyncd
Установка Lsyncd
В 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/
Синхронизация локальных каталогов на 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 13:14:12 2017 Normal: recursive startup rsync: /home/sk/source_dir/ -> /home/sk/dest_dir/ Sat Apr 15 13:14:12 2017 Normal: Startup of "/home/sk/source_dir/" finished.
Проверьте файл состояния Lsyncd:
more /var/log/lsyncd/lsyncd.status
Пример вывода:
Lsyncd status report at Sat Apr 15 13:14:12 2017 Sync1 source=/home/sk/source_dir/ There are 0 delays Excluding: nothing. Inotify watching 1 directories 1: /home/sk/source_dir/
Синхронизация локальных каталогов на 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 /
Пример вывода:
file10 file1 file2 file3 file4 file5 file6 file7 file8 file9
Проверьте содержание каталога dest_dir:
Ls dest_dir /
Пример вывода:
file10 file1 file2 file3 file4 file5 file6 file7 file8 file9
Отлично! Содержание source_dir было успешно синхронизировано с каталогом dest_dir.
Кроме того, вы можете просмотреть файлы журналов, чтобы проверить, завершена репликация или нет.
tail -10 /var/log/lsyncd.log
Проверьте файл состояния Lsyncd:
more /var/log/lsyncd.status
Синхронизировать удаленные каталоги на системах 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.10.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.10.150 (192.168.10.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.10.150's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.10.150'" and check to make sure that only the key(s) you wanted were added.
Здесь 192.168.10.150 является IP-адрес удаленной системы.
Теперь вы сможете войти по SSH на вашу удаленную систему без ввода пароля:
ssh root@192.168.10.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.10.150", targetdir = "/root/remotesync", }
Здесь 192.168.10.150 является IP-адрес моего удаленного хоста. И, директория назначения /root/remotesync/ на моей удаленной системе. Замените значения вашим собственным. Сохраните и закройте файл.
Перезапустите службу Lsyncd, чтобы начать реплицировать содержимое исходного каталога в пункт назначения.
sudo systemctl restart lsyncd
Теперь, подключитесь по SSH к вашей удаленной системе:
SSH root@192.168.10.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. Как вы можете видеть, что это очень легкий и прямой метод.
Ресурсы: