Sinkronisasi File/Folder Secara Otomatis Menggunakan Rsync dan Inotify

Ada apa ini?

Di kantor saya ada beberapa rutinitas yang sering dilakukan dan menurut saya kurang baik juga kalau dilakukan terus menerus, dimana ada sebuah file yang berisi rule pembatasan fitur/paket terhadap setiap pelanggan. Setiap ada pelanggan baru yang berlangganan, secara manual kami menambahkan username dari klien ke file tersebut. Cukup mudah sebenernya.

Mending kalau cuma satu server, yang jadi masalah server nya ada banyak. Team harus input nama klien tersebut di seluruh server yang ada. Kalau server nya ada 100? ya, SSH satu persatu ke setiap server yang ada dan masukkan username nya ke file tersebut.

Pertanyaannya, bisa nggak kalau kita hanya cukup melakukan input disalah satu server yang utama, secara otomatis di seluruh server yang ada juga ikut berubah dan menghasilkan file yang sama persis. Dan hal tersebut berlaku bukan hanya saat menambahkan klien, saat menghapus nama klien dalam file tersebut juga bisa menjadi sama persis sehingga waktu dan effort yang dibutuhkan juga lebih simple dan enak.

Jawabannya:

Ya, pasti ada ..

Terus Solusinya?

Kalau rajin nge-googling, pasti ada tutorialnya, bejibun. Termasuk tulisan ini, namun hal ini saya tulis karena berdasarkan pengalaman yang saya lakukan dan sebagai catatan juga dikemudian hari. Hitung-hitung menambah post blog dan bagian dari improvisasi Google Adsense yang penghasilannya segitu-gitu aja (ini curhat).

Solusinya bisa pakai inotify untuk melakukan monitoring saat ada file yang berubah, kemudian dikolaborasikan dengan rsync yang digunakan untuk melakukan sinkronisasi ke seluruh server yang ada. Dan kedua aplikasi ini dimasukkan kedalam shell script.

Sudah beberapa aplikasi yang saya coba seperti fswatch, namun saya pikir ini lebih efektif dan mudah penggunaannya.

Bagaimana Caranya?

Topologi

Server 1 : 192.168.80.121 (Utama)
Server 2 : 192.168.80.122
Server 3 : 192.168.80.123
Server 4 : 192.168.80.124

Pastikan

  1. Antar server bisa saling berkomunikasi
  2. Sudah terpasang rsync di seluruh server
  3. Sudah melakukan SSH/Rsync tanpa password, agar proses rsync berjalan otomatis, lihat disini.

Konfigurasi

Lakukan instalasi inotify-tools pada server1/192.168.80.121. Contoh saya menggunakan CentOS:

yum install inotify-tools

Jika menggunakan Ubuntu:

apt-get install inotify-tools

Jika menggunakan openSUSE/SLES:

zypper install inotify-tools

Sebagai contoh, saya akan melakukan sinkronisasi otomatis terhadap file /home/dhenandi/test.txt. File tersebut akan disinkronisasikan dengan bash script. Buat terlebih dahulu bash scriptnya:

~: vi sync-file.sh
 
#!/bin/bash
while true; do
  inotifywait -r -e modify,attrib,close_write,move,create,delete /home/dhenandi/test.txt
  rsync -avz --delete-after /home/dhenandi/test.txt namauser@192.168.80.122:/home/dhenandi/test.txt
  rsync -avz --delete-after /home/dhenandi/test.txt namauser@192.168.80.123:/home/dhenandi/test.txt
  rsync -avz --delete-after /home/dhenandi/test.txt namauser@192.168.80.124:/home/dhenandi/test.txt
done

Jalankan file bash nya dengan perintah berikut:

bash sync-file.sh

Saat skrip berjalan, silahkan edit isi dari file tersebut, semestinya berubah pada tiap server :-D.

BTW, ini kan untuk file saja, bisa gak untuk folder dan seluruh isinya?

Bisa, tinggal sesuaikan saja lokasinya.

Sudah jalan tapi …

Shell script harus jalan terus, terminal gak boleh ditutup bro. Gimana cara ngatasi nya supaya berjalan terus sebagai services.

Jika menggunakan Systemv init cukup jalankan perintah berikut:

setsid sync-file.sh >/dev/null 2>&1 < /dev/null &

Agar otomatis load saat booting, masukkan juga perintah diatas pada /etc/rc.local.

Kalau pakai Systemd? buat servicenya, karena saya males nulis, lihat disini saja ya http://bartsimons.me/sync-folders-and-files-on-linux-with-rsync-and-inotify/. Tautan tersebut juga saya jadikan acuan sebagai sumber.

Sekian, semoga bermanfaat :-D.

Leave a Reply