GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak synchronizovat adresáře pomocí Lsyncd na Ubuntu 20.04

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.


Ubuntu
  1. Jak nainstalovat WordPress pomocí Nginx na Ubuntu 18.04

  2. Jak synchronizovat místní a vzdálené adresáře v Linuxu

  3. Jak nainstalovat qBitTorrent 4.0 v Ubuntu pomocí PPA

  1. Jak nainstalovat Maven na Ubuntu 18.04

  2. Jak monitorovat Nginx pomocí Netdata na Ubuntu 16.04

  3. Jak nainstalovat Gitea pomocí Dockeru na Ubuntu 20.04

  1. Jak synchronizovat soubory/složky pomocí FreeFileSync na Ubuntu

  2. Jak zálohovat pomocí duplicity na Ubuntu 16.04

  3. Jak synchronizovat čas pomocí serveru NTP v Ubuntu