Как синхронизировать каталоги с помощью Lsyncd в Ubuntu 20.04
На этой странице
- Предпосылки
- Начало работы
- Установите Lsyncd
- Настройте Lsyncd для синхронизации локальных каталогов
- Настройка Lsyncd для синхронизации удаленных каталогов
- Заключение
Lsyncd — это простой и легкий инструмент, который позволяет зеркалировать ваш локальный каталог в другой каталог на удаленном сервере. Он работает, постоянно отслеживая изменения в указанном каталоге каждые несколько секунд, и если какие-либо изменения вносятся, они синхронизируются с удаленным сервером. Этот инструмент очень полезен для синхронизации данных из защищенной области в незащищенную область.
В этом руководстве мы покажем вам, как установить и использовать Lsyncd для синхронизации локальных и удаленных каталогов.
Предпосылки
- Сервер под управлением Ubuntu 20.04.
- На вашем сервере установлен пароль root.
Начиная
Перед запуском рекомендуется обновить системный пакет до последней версии. Вы можете обновить их с помощью следующей команды:
apt-get update -y
apt-get upgrade -y
После обновления всех пакетов перезагрузите систему, чтобы изменения вступили в силу.
Установить Lsyncd
По умолчанию пакет Lsyncd доступен в большинстве операционных систем Linux. Вы можете установить его, просто выполнив следующую команду:
apt-get install lsyncd -y
После установки Lsyncd вы можете проверить установленную версию Lsyncd с помощью следующей команды:
lsyncd --version
Вы должны получить следующий результат:
Version: 2.2.3
Настройте Lsyncd для синхронизации локальных каталогов
В этом разделе мы настроим Lsyncd для синхронизации каталога /etc/ с каталогом /mnt/ в локальной системе.
Сначала создайте каталог для Lsyncd с помощью следующей команды:
mkdir /etc/lsyncd
Затем создайте новый файл конфигурации Lsyncd и определите исходный и целевой каталоги, которые вы хотите синхронизировать.
nano /etc/lsyncd/lsyncd.conf.lua
Добавьте следующие строки:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false } sync { default.rsync, source = "/etc/", target = "/mnt" }
Сохраните и закройте файл, когда закончите.
systemctl start lsyncd
systemctl enable lsyncd
Вы также можете проверить статус службы Lsyncd с помощью следующей команды:
systemctl status lsyncd
Вы должны увидеть следующий вывод:
? lsyncd.service - LSB: lsyncd daemon init script Loaded: loaded (/etc/init.d/lsyncd; generated) Active: active (running) since Fri 2020-05-01 03:31:20 UTC; 9s ago Docs: man:systemd-sysv-generator(8) Process: 36946 ExecStart=/etc/init.d/lsyncd start (code=exited, status=0/SUCCESS) Tasks: 2 (limit: 4620) Memory: 12.5M CGroup: /system.slice/lsyncd.service ??36921 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua ??36952 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua May 01 03:31:20 ubuntu20 systemd[1]: lsyncd.service: Succeeded. May 01 03:31:20 ubuntu20 systemd[1]: Stopped LSB: lsyncd daemon init script. May 01 03:31:20 ubuntu20 systemd[1]: Starting LSB: lsyncd daemon init script... May 01 03:31:20 ubuntu20 lsyncd[36946]: * Starting synchronization daemon lsyncd May 01 03:31:20 ubuntu20 lsyncd[36951]: 03:31:20 Normal: --- Startup, daemonizing --- May 01 03:31:20 ubuntu20 lsyncd[36946]: ...done. May 01 03:31:20 ubuntu20 systemd[1]: Started LSB: lsyncd daemon init script.
Вы можете проверить файл журнала Lsyncd для получения более подробной информации, как показано ниже:
tail -f /var/log/lsyncd/lsyncd.log
Вы должны увидеть следующий вывод:
/lsyncd/lsyncd.conf.lua Fri May 1 03:30:57 2020 Normal: Finished a list after exitcode: 0 Fri May 1 03:31:20 2020 Normal: --- Startup, daemonizing --- Fri May 1 03:31:20 2020 Normal: recursive startup rsync: /etc/ -> /mnt/ Fri May 1 03:31:20 2020 Normal: Startup of /etc/ -> /mnt/ finished.
Вы также можете проверить статус синхронизации с помощью следующей команды:
tail -f /var/log/lsyncd/lsyncd.status
Вы должны увидеть изменения в каталоге /mnt с помощью следующей команды:
ls /mnt/
Вы должны увидеть, что все файлы и каталоги из каталога /etc добавляются в каталог /mnt:
acpi dconf hosts logrotate.conf newt rc2.d subuid- adduser.conf debconf.conf hosts.allow logrotate.d nginx rc3.d sudoers alternatives debian_version hosts.deny lsb-release nsswitch.conf rc4.d sudoers.d apache2 default init lsyncd ntp.conf rc5.d sysctl.conf apparmor deluser.conf init.d ltrace.conf openal rc6.d sysctl.d apparmor.d depmod.d initramfs-tools lvm opt rcS.d systemd apport dhcp inputrc machine-id os-release resolv.conf terminfo apt dnsmasq.d insserv.conf.d magic overlayroot.conf rmt timezone at.deny docker iproute2 magic.mime PackageKit rpc tmpfiles.d bash.bashrc dpkg iscsi mailcap pam.conf rsyslog.conf ubuntu-advantage bash_completion e2scrub.conf issue mailcap.order pam.d rsyslog.d ucf.conf bash_completion.d environment issue.net manpath.config passwd screenrc udev bindresvport.blacklist ethertypes kernel mdadm passwd- securetty ufw binfmt.d fonts kernel-img.conf mime.types perl security update-manager byobu fstab landscape mke2fs.conf php selinux update-motd.d ca-certificates fuse.conf ldap modprobe.d pki sensors3.conf update-notifier ca-certificates.conf fwupd ld.so.cache modules pm sensors.d vdpau_wrapper.cfg calendar gai.conf ld.so.conf modules-load.d polkit-1 services vim console-setup groff ld.so.conf.d mtab pollinate shadow vmware-tools cron.d group legal multipath popularity-contest.conf shadow- vtrgb cron.daily group- letsencrypt multipath.conf profile shells vulkan cron.hourly grub.d libaudit.conf mysql profile.d skel wgetrc cron.monthly gshadow libnl-3 nanorc protocols sos.conf X11 crontab gshadow- locale.alias netplan pulse ssh xattr.conf cron.weekly gss locale.gen network python3 ssl xdg cryptsetup-initramfs hdparm.conf localtime networkd-dispatcher python3.8 subgid zsh_command_not_found crypttab host.conf logcheck NetworkManager rc0.d subgid- dbus-1 hostname login.defs networks rc1.d subuid
Настройте Lsyncd для синхронизации удаленных каталогов
В этом разделе мы настроим Lsyncd для синхронизации каталога /etc/ в локальной системе с каталогом /opt/ в удаленной системе.
Перед началом вам необходимо настроить аутентификацию на основе ключей SSH между локальной системой и удаленным сервером, чтобы локальная система могла подключаться к удаленному серверу без пароля.
В локальной системе выполните следующую команду, чтобы сгенерировать открытый и закрытый ключи:
ssh-keygen -t rsa
Вы должны увидеть следующий вывод:
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): 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:c7fhjjhAamFjlk6OkKPhsphMnTZQFutWbr5FnQKSJjE The key's randomart image is: +---[RSA 3072]----+ | E .. | | ooo | | oo= + | |=.+ % o . . | | oSo. o | |ooo=B o .o o o | |=o.... o o | |+. o .. o | | . ... . | +----[SHA256]-----+
Приведенная выше команда сгенерирует закрытый и открытый ключи внутри каталога ~/.ssh.
Далее вам нужно будет скопировать открытый ключ на удаленный сервер. Вы можете скопировать его с помощью следующей команды:
ssh-copy-id
Вам будет предложено ввести пароль удаленного пользователя root, как показано ниже:
's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh ''" and check to make sure that only the key(s) you wanted were added.
Как только пользователь будет аутентифицирован, открытый ключ будет добавлен к файлу author_keys удаленного пользователя, и соединение будет закрыто.
Теперь вы сможете войти на удаленный сервер без ввода пароля.
Чтобы проверить это, просто попробуйте войти на удаленный сервер через SSH:
ssh
Если все прошло хорошо, вы сразу войдете в систему.
Далее вам нужно будет отредактировать файл конфигурации Lsyncd и определить переменные rsyncssh и target host:
nano /etc/lsyncd/lsyncd.conf.lua
Измените файл, как показано ниже:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false } sync { default.rsyncssh, source = "/etc/", host = "remote-server-ip", targetdir = "/opt" }
Сохраните и закройте файл, когда закончите. Затем перезапустите службу Lsyncd, чтобы начать синхронизацию.
systemctl restart lsyncd
Вы можете проверить статус синхронизации с помощью следующей команды:
tail -f /var/log/lsyncd/lsyncd.log
Вы должны увидеть следующий вывод:
Fri May 1 04:32:05 2020 Normal: --- Startup, daemonizing --- Fri May 1 04:32:05 2020 Normal: recursive startup rsync: /etc/ -> 45.58.38.21:/opt/ Fri May 1 04:32:06 2020 Normal: Startup of "/etc/" finished: 0
Вы должны увидеть изменения в каталоге /opt на удаленном сервере с помощью следующей команды:
ls /opt
Вы должны увидеть, что все файлы и каталоги из каталога /etc добавляются в каталог удаленных серверов /opt:
acpi dconf hosts logrotate.conf newt rc2.d subuid- adduser.conf debconf.conf hosts.allow logrotate.d nginx rc3.d sudoers alternatives debian_version hosts.deny lsb-release nsswitch.conf rc4.d sudoers.d apache2 default init lsyncd ntp.conf rc5.d sysctl.conf apparmor deluser.conf init.d ltrace.conf openal rc6.d sysctl.d apparmor.d depmod.d initramfs-tools lvm opt rcS.d systemd apport dhcp inputrc machine-id os-release resolv.conf terminfo apt dnsmasq.d insserv.conf.d magic overlayroot.conf rmt timezone at.deny docker iproute2 magic.mime PackageKit rpc tmpfiles.d bash.bashrc dpkg iscsi mailcap pam.conf rsyslog.conf ubuntu-advantage bash_completion e2scrub.conf issue mailcap.order pam.d rsyslog.d ucf.conf bash_completion.d environment issue.net manpath.config passwd screenrc udev bindresvport.blacklist ethertypes kernel mdadm passwd- securetty ufw binfmt.d fonts kernel-img.conf mime.types perl security update-manager byobu fstab landscape mke2fs.conf php selinux update-motd.d ca-certificates fuse.conf ldap modprobe.d pki sensors3.conf update-notifier ca-certificates.conf fwupd ld.so.cache modules pm sensors.d vdpau_wrapper.cfg calendar gai.conf ld.so.conf modules-load.d polkit-1 services vim console-setup groff ld.so.conf.d mtab pollinate shadow vmware-tools cron.d group legal multipath popularity-contest.conf shadow- vtrgb cron.daily group- letsencrypt multipath.conf profile shells vulkan cron.hourly grub.d libaudit.conf mysql profile.d skel wgetrc cron.monthly gshadow libnl-3 nanorc protocols sos.conf X11 crontab gshadow- locale.alias netplan pulse ssh xattr.conf cron.weekly gss locale.gen network python3 ssl xdg cryptsetup-initramfs hdparm.conf localtime networkd-dispatcher python3.8 subgid zsh_command_not_found crypttab host.conf logcheck NetworkManager rc0.d subgid- dbus-1 hostname login.defs networks rc1.d subuid
Заключение
В приведенном выше руководстве мы узнали, как установить и настроить Lsyncd для локальной и удаленной синхронизации. Теперь вы можете использовать Lsyncd в производственной среде для целей резервного копирования. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.