Cara Sinkronisasi Direktori Secara Real-Time di Linux
Sinkronisasi direktori di Linux dapat dilakukan dengan menggunakan rsync, dengan kombinasi cronjob sinkronisasi dapat berjalan secara otomatis pada waktu yang telah ditentukan. Namun pada situasi tertentu, kita ingin sinkronisasi berjalan secara live atau real-time ketika terjadi perubahan pada direktori atau file. Untuk kasus seperti itu kita bisa menggunakan tool lsyncd. lsyncd memantau perubahan pada direktori kemudian melakukan sinkronisasi ke target atau slave. Sinkronisasi hanya satu arah, dari source ke target.
0. Instalasi lsyncd
Di tutorial ini saya menggunakan distro Linux CentOS 7 untuk percobaan.
Instalasi lsyncd
1 2 3 | # yum install epel-release -y # yum install lsyncd -y # lsyncd -version |
1. Sinkronisasi di Lokal
File konfigurasi lsyncd berada di /etc/lsyncd.conf. Tersedia contoh konfigurasi di /usr/share/doc/lsyncd-2.2.2/examples.
a. Satu Source Satu Target
Percobaan pertama melakukan sinkronisasi dari folder /var/www/html ke folder /root/backup.
Buka file konfigurasi.
1 | # nano /etc/lsyncd.conf |
Ubah isinya menjadi seperti di bawah ini.
1 2 3 4 5 6 7 8 9 10 | settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sync { default.rsync, source = "/var/www/html", target = "/root/backup", } |
Aktifkan dan jalankan service.
1 2 | # systemctl enable lsyncd # systemctl start lsyncd |
Sekarang uji dengan melakukan perubahan pada folder /var/www/html dan periksa pada folder /root/backup apakah memiliki data yang sama.
Proses sinkronisasi terjadi di background, kita dapat memeriksa sinkronisasi apa saja yang telah dilakukan dengan membaca file log /var/log/lsyncd/lsyncd.log dan file status /var/log/lsyncd/lsyncd.status.
Jika masih ada folder yang ingin disinkronkan, tambahkan config sync.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sync { default.rsync, source = "/root/documents/data1", target = "/root/backup1", } sync { default.rsync, source = "/root/documents/data2", target = "/root/backup2", } sync { default.rsync, source = "/root/documents/data3", target = "/root/backup3", } |
Jangan lupa melakukan restart service setelah melakukan perubahan konfigurasi.
1 | # systemctl restart lsycnd |
b. Satu Source Banyak Target
Percobaan kedua melakukan sinkronisasi dari satu sumber direktori ke lebih dari satu tujuan direktori. Target didefinisikan dalam array dan proses sinkronisasi dimasukkan ke dalam operasi pengulangan for.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } targets = { '/root/backup1', '/root/backup2', '/root/backup3', } for _, target in ipairs( targets ) do sync { default.rsync, source='/var/www/html', target=target } end |
c. Banyak Source Satu Target
Percobaan ketiga, banyak sumber direktori yang disinkronisasi ke satu direktori tujuan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sources = { '/var/www/html', '/root/data1', '/root/data2', } for _, source in ipairs( sources ) do sync { default.rsync, source=source, target='/root/backups' } end |
2. Sinkronisasi ke Remote Server
Selanjutnya sinkronisasi ke remote server. Sebelum melakukan konfigurasi lsyncd, terlebih dahulu mesin Master harus bisa login SSH ke Slave tanpa password.
Terdapat 3 mesin CentOS:
- Master: 45.76.180.137
- Slave 1: 149.28.153.15
- Slave 2: 139.180.208.163
a. Satu Source Satu Target
Pada opsi Target dituliskan nomor IP slave beserta direktorinya. Kemudian pada opsi rsync dituliskan perintah ssh login dengan username root dan private key.
1 2 3 4 5 6 7 8 9 10 11 | settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sync { default.rsync, source="/var/www/html", target="149.28.153.15:/var/www/html", rsync={rsh = "/usr/bin/ssh -l root -i /root/.ssh/private-key",} } |
b. Satu Source Banyak Target
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } targets = { '149.28.153.15:/var/www/html', '139.180.208.163:/var/www/html', } for _, target in ipairs( targets ) do sync { default.rsync, source="/var/www/html", target=target, rsync={rsh = "/usr/bin/ssh -l root -i /root/.ssh/private-key",} } end |
selamat mencoba 🙂
mantap mas, berguna sekali artikelnya, kalo backup database secara realtime bisa ga ya?
saya belum tahu apakah bisa backup database secara realtime, biasanya hanya ditetapkan waktu backupnya dan berjalan secara otomatis.
saya coba backup ke server lain kok gagal ya? bikin private-key itu gimana mas? kalo diganti id_rsa bisa?
bikin ssh key = ssh-keygen. nama key bisa diubah.
private-key nya dikasih password ga?
private-key tidak perlu pakai password (Passphrase)
Maaf artikelnya pas sekali dengan yang saya cari , namun mohon dibantu ada beberapa pertanyaan
1. Apabila kita menggunakan contoh 3 virtual server di 1 server, dan data sourcenya ada di server berbeda. Data source server database A , ubuntu server /var/www/html – target promox 3 virtual ubuntu server . server a /var/www, server b /var/www, server c /var/www. Apakah dengan point terakhir dari penjelasan bisa saya ikuti, untuk panduan master dan slave apakah ada?
2. Apakah itu private key ?
3. Point pertanyaan saya yang no 1 apakah semua di set rsync atau cukup di server source
Terima kasih atas bantuannya dan mohon maaf sebelumnya
1. Berarti banyak source satu target, untuk kasus seperti ini belum coba yang berjalan di network, contoh di atas konfigurasinya di satu server.
2. Private key digunakan untuk login SSH, jadi tanpa password.
3. Ada source dan target, berarti sinkronisasi satu arah dari source ke target.
Tanya mas :
1. Kalo misalnya target server nya pake port ssh non standar gimana ya cara penulisannya (misalnya 10.10.1.102:48765) ;
2. Kalo OS yg berbasisi debian 10, software ini juga ready gak ya ?
Terima kasih
1. coba tambahkan parameter
-p 48765
2. install
sudo apt install lsyncd
maaf mau tanya kalau bukan user root bisa juga ya?
belum pernah coba user lain, sepertinya sih bisa, selama foldernya bisa di read-write oleh si user
baik saya coba, maaf tanya lagi kalau targetnya bisa digabung? misal ke beda direktory dan remote server
coba aja kombinasikan targetnya, ke local directory dan remote server