ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как сделать синхронизацию локальных и удаленных каталогов в Linux

Как синхронизации локальных и удаленных каталогов в Linux

В этом руководстве описывается, как синхронизировать локальные и удаленные каталоги в 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. Как вы можете видеть, что это очень легкий и прямой метод.

Ресурсы:

Exit mobile version