ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Как сделать синхронизацию локальных и удаленных каталогов в 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