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.