Lsyncd je jednoduchý a lehký nástroj, který vám umožňuje zrcadlit váš místní adresář do jiného adresáře na vzdáleném serveru. Funguje to tak, že každých několik sekund nepřetržitě monitoruje zadaný adresář pro změny a pokud jsou provedeny nějaké změny, synchronizují se se vzdáleným serverem. Tento nástroj je velmi užitečný pro synchronizaci dat ze zabezpečené oblasti do nezabezpečené oblasti.
V tomto tutoriálu vám ukážeme, jak nainstalovat a používat Lsyncd k synchronizaci místních adresářů a vzdálených adresářů.
Předpoklady
- Server se systémem Ubuntu 20.04.
- Na vašem serveru je nastaveno heslo uživatele root.
Začínáme
Než začnete, je dobré aktualizovat balíček vašeho systému na nejnovější verzi. Můžete je aktualizovat pomocí následujícího příkazu:
apt-get update -y
apt-get upgrade -y
Jakmile jsou všechny balíčky aktualizovány, restartujte systém, aby se změny projevily.
Instalovat Lsyncd
Ve výchozím nastavení je balíček Lsyncd dostupný ve většině operačních systémů Linux. Můžete jej nainstalovat pouhým spuštěním následujícího příkazu:
apt-get install lsyncd -y
Po instalaci Lsyncd můžete ověřit nainstalovanou verzi Lsyncd pomocí následujícího příkazu:
lsyncd --version
Měli byste získat následující výstup:
Version: 2.2.3
Konfigurace Lsyncd pro synchronizaci místních adresářů
V této části nakonfigurujeme Lsyncd tak, aby synchronizoval adresář /etc/ do adresáře /mnt/ na místním systému.
Nejprve vytvořte adresář pro Lsyncd pomocí následujícího příkazu:
mkdir /etc/lsyncd
Dále vytvořte nový konfigurační soubor Lsyncd a definujte zdrojový a cílový adresář, který chcete synchronizovat.
nano /etc/lsyncd/lsyncd.conf.lua
Přidejte následující řádky:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false } sync { default.rsync, source = "/etc/", target = "/mnt" }
Po dokončení uložte a zavřete soubor.
systemctl start lsyncd
systemctl enable lsyncd
Stav služby Lsyncd můžete také zkontrolovat pomocí následujícího příkazu:
systemctl status lsyncd
Měli byste vidět následující výstup:
? 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.
Další podrobnosti naleznete v souboru protokolu Lsyncd, jak je uvedeno níže:
tail -f /var/log/lsyncd/lsyncd.log
Měli byste vidět následující výstup:
/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.
Stav synchronizace můžete také zkontrolovat pomocí následujícího příkazu:
tail -f /var/log/lsyncd/lsyncd.status
Měli byste být schopni vidět změny v adresáři /mnt pomocí následujícího příkazu:
ls /mnt/
Měli byste vidět, že všechny soubory a adresáře z adresáře /etc jsou přidány do adresáře /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
Konfigurace Lsyncd pro synchronizaci vzdálených adresářů
V této části nakonfigurujeme Lsyncd tak, aby synchronizoval adresář /etc/ na místním systému s adresářem /opt/ na vzdáleném systému.
Než začnete, budete muset nastavit ověřování na základě klíče SSH mezi místním systémem a vzdáleným serverem, aby se místní systém mohl připojit ke vzdálenému serveru bez hesla.
V místním systému spusťte následující příkaz pro vygenerování veřejného a soukromého klíče:
ssh-keygen -t rsa
Měli byste vidět následující výstup:
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 [email protected] The key's randomart image is: +---[RSA 3072]----+ | E .. | | ooo | | oo= + | |=.+ % o . . | |[email protected] oSo. o | |ooo=B o .o o o | |=o.... o o | |+. o .. o | | . ... . | +----[SHA256]-----+
Výše uvedený příkaz vygeneruje soukromý a veřejný klíč v adresáři ~/.ssh.
Dále budete muset zkopírovat veřejný klíč na vzdálený server. Můžete jej zkopírovat pomocí následujícího příkazu:
ssh-copy-id [email protected]
Budete požádáni o zadání hesla vzdáleného uživatele root, jak je uvedeno níže:
[email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added.
Jakmile je uživatel ověřen, veřejný klíč bude připojen k souboru autorizovaných klíčů vzdáleného uživatele a připojení bude ukončeno.
Nyní byste měli být schopni se přihlásit ke vzdálenému serveru bez zadávání hesla.
Chcete-li to otestovat, zkuste se přihlásit ke vzdálenému serveru přes SSH:
ssh [email protected]
Pokud vše proběhlo v pořádku, budete okamžitě přihlášeni.
Dále budete muset upravit konfigurační soubor Lsyncd a definovat proměnné rsyncssh a cílového hostitele:
nano /etc/lsyncd/lsyncd.conf.lua
Změňte soubor, jak je znázorněno níže:
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" }
Po dokončení uložte a zavřete soubor. Poté restartujte službu Lsyncd a spusťte synchronizaci.
systemctl restart lsyncd
Stav synchronizace můžete zkontrolovat pomocí následujícího příkazu:
tail -f /var/log/lsyncd/lsyncd.log
Měli byste vidět následující výstup:
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
Měli byste být schopni vidět změny v adresáři /opt na vzdáleném serveru pomocí následujícího příkazu:
ls /opt
Měli byste vidět, že všechny soubory a adresáře z adresáře /etc jsou přidány do adresáře /opt vzdáleného serveru:
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
Závěr
Ve výše uvedené příručce jsme se naučili, jak nainstalovat a nakonfigurovat Lsyncd pro místní synchronizaci a vzdálenou synchronizaci. Nyní můžete Lsyncd používat v produkčním prostředí pro účely zálohování. Neváhejte se mě zeptat, pokud máte nějaké otázky.