GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Menyinkronkan Direktori Menggunakan Lsyncd di Ubuntu 20.04

Lsyncd adalah alat sederhana dan ringan yang memungkinkan Anda untuk mencerminkan direktori lokal Anda ke direktori lain di server jauh. Ia bekerja dengan terus memantau direktori yang ditentukan untuk perubahan setiap beberapa detik dan jika ada perubahan yang dibuat maka mereka disinkronkan ke server jauh. Alat ini sangat berguna untuk menyinkronkan data dari area aman ke area tidak aman.

Dalam tutorial ini, kami akan menunjukkan cara menginstal dan menggunakan Lsyncd untuk menyinkronkan direktori lokal dan direktori jarak jauh.

Prasyarat

  • Server yang menjalankan Ubuntu 20.04.
  • Kata sandi root telah disiapkan di server Anda.

Memulai

Sebelum memulai, sebaiknya perbarui paket sistem Anda ke versi terbaru. Anda dapat memperbaruinya menggunakan perintah berikut:

apt-get update -y
apt-get upgrade -y

Setelah semua paket diperbarui, mulai ulang sistem Anda untuk menerapkan perubahan.

Instal Lsyncd

Secara default, paket Lsyncd tersedia di sebagian besar sistem operasi Linux. Anda dapat menginstalnya hanya dengan menjalankan perintah berikut:

apt-get install lsyncd -y

Setelah Lsyncd diinstal, Anda dapat memverifikasi versi Lsyncd yang diinstal dengan perintah berikut:

lsyncd --version

Anda akan mendapatkan output berikut:

Version: 2.2.3

Konfigurasikan Lsyncd untuk Menyinkronkan Direktori Lokal

Di bagian ini, kita akan mengkonfigurasi Lsyncd untuk menyinkronkan direktori /etc/ ke direktori /mnt/ pada sistem lokal.

Pertama, buat direktori untuk Lsyncd dengan perintah berikut:

mkdir /etc/lsyncd

Selanjutnya, buat file konfigurasi Lsyncd baru dan tentukan direktori sumber dan tujuan yang ingin Anda sinkronkan.

nano /etc/lsyncd/lsyncd.conf.lua

Tambahkan baris berikut:

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status",
   statusInterval = 20,
   nodaemon   = false
}

sync {
        default.rsync,
        source = "/etc/",
        target = "/mnt"
}

Simpan dan tutup file setelah Anda selesai.

systemctl start lsyncd
systemctl enable lsyncd

Anda juga dapat memeriksa status layanan Lsyncd dengan perintah berikut:

systemctl status lsyncd

Anda akan melihat output berikut:

? 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.

Anda dapat memeriksa file log Lsyncd untuk detail lebih lanjut seperti yang ditunjukkan di bawah ini:

tail -f /var/log/lsyncd/lsyncd.log

Anda akan melihat output berikut:

/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.

Anda juga dapat memeriksa status sinkronisasi dengan perintah berikut:

tail -f /var/log/lsyncd/lsyncd.status

Anda seharusnya dapat melihat perubahan di direktori /mnt dengan perintah berikut:

ls /mnt/

Anda akan melihat bahwa semua file dan direktori dari direktori /etc ditambahkan ke direktori /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

Konfigurasikan Lsyncd untuk Menyinkronkan Direktori Jarak Jauh

Di bagian ini, kita akan mengonfigurasi Lsyncd untuk menyinkronkan direktori /etc/ pada sistem lokal ke direktori /opt/ pada sistem jarak jauh.

Sebelum memulai, Anda perlu menyiapkan otentikasi berbasis kunci SSH antara sistem lokal dan server jarak jauh sehingga sistem lokal dapat terhubung ke server jarak jauh tanpa kata sandi.

Pada sistem lokal, jalankan perintah berikut untuk menghasilkan kunci publik dan pribadi:

ssh-keygen -t rsa

Anda akan melihat output berikut:

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]-----+

Perintah di atas akan menghasilkan kunci privat dan publik di dalam direktori ~/.ssh.

Selanjutnya, Anda perlu menyalin kunci publik ke server jarak jauh. Anda dapat menyalinnya dengan perintah berikut:

ssh-copy-id [email protected]

Anda akan diminta untuk memberikan kata sandi pengguna root jarak jauh seperti yang ditunjukkan di bawah ini:

[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.

Setelah pengguna diautentikasi, kunci publik akan ditambahkan ke file otor_keys pengguna jarak jauh dan koneksi akan ditutup.

Sekarang, Anda seharusnya dapat masuk ke server jarak jauh tanpa memasukkan kata sandi.

Untuk mengujinya coba saja login ke server jarak jauh Anda melalui SSH:

ssh [email protected]

Jika semuanya berjalan dengan baik, Anda akan segera login.

Selanjutnya, Anda perlu mengedit file konfigurasi Lsyncd dan menentukan variabel rsyncssh dan host target:

nano /etc/lsyncd/lsyncd.conf.lua

Ubah file seperti gambar di bawah ini:

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"
}

Simpan dan tutup file setelah Anda selesai. Kemudian, restart layanan Lsyncd untuk memulai sinkronisasi.

systemctl restart lsyncd

Anda dapat memeriksa status sinkronisasi dengan perintah berikut:

tail -f /var/log/lsyncd/lsyncd.log

Anda akan melihat output berikut:

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

Anda seharusnya dapat melihat perubahan di direktori /opt pada server jauh dengan perintah berikut:

ls /opt

Anda akan melihat bahwa semua file dan direktori dari direktori /etc ditambahkan ke direktori /opt server jauh:

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

Kesimpulan

Dalam panduan di atas, kami mempelajari cara menginstal dan mengonfigurasi Lsyncd untuk sinkronisasi lokal dan sinkronisasi jarak jauh. Anda sekarang dapat menggunakan Lsyncd di lingkungan produksi untuk tujuan pencadangan. Jangan ragu untuk bertanya kepada saya jika Anda memiliki pertanyaan.


Ubuntu
  1. Cara Menginstal WordPress Menggunakan Nginx di Ubuntu 18.04

  2. Cara Menyinkronkan Direktori Lokal Dan Jarak Jauh Di Linux

  3. Cara Menginstal qBitTorrent 4.0 di Ubuntu menggunakan PPA

  1. Cara Menginstal Maven di Ubuntu 18.04

  2. Cara Memantau Nginx menggunakan Netdata di Ubuntu 16.04

  3. Cara Menginstal Gitea menggunakan Docker di Ubuntu 20.04

  1. Cara Menyinkronkan File/Folder Menggunakan FreeFileSync di Ubuntu

  2. Cara Mencadangkan Menggunakan Duplicity di Ubuntu 16.04

  3. Cara Menyinkronkan Waktu menggunakan Server NTP di Ubuntu