Sinkronisasi Data di Remote Host dengan Rsync

July 12, 2007

Sering kali kita memiliki kebutuhan untuk melakukan sinkronisasi data antara satu host dengan host lain yang terhubung melalui Internet Protokol (baik dalam satu jaringan lokal maupun melalui jaringan Internet). Sinkronisasi yang dimaksud disini adalah melakukan duplikasi folder dan data di satu host ke host lain dengan terlebih dahulu melakukan pengecekan apakah file (data) yang akan diambil sudah terdapat sebelumnya atau apakah sudah terjadi perubahan, dengan demikian apabila sinkronisasi hendak dilakukan terhadap sekumpulan data dalam jumlah besar, maka tidak harus di kopi ulang semuanya.

Utilitas yang akan saya gunakan disini adalah Rsync melalui protokol SSH, seperti biasa mesin yang saya gunakan kedua-duanya menggunakan Debian Etch sebagai operating systemnya. Ada beberapa pilihan utilitas sinkronisasi lain, Rsync saya pilih karena kebetulan bisa memenuhi kebutuhan saya.

Apabila dikutip dari situs terkait, Rsync merupakan utilitas file transfer secara incremental. Perbedaannya dengan utilitas FTP yang lebih umum digunakan adalah kemampuan untuk membandingkan terlebih dahulu antara file yang akan dikopi dan file yang akan dioverwrite. Perbandingan dilakukan berdasarkan waktu dibuatnya file tersebut dan bahkan melalui pengecekan MD5 Hash. Sinkronisai yang ditawarkan Rsync berlaku untuk satu arah dan tidak dua arah, sebagai ilustrasi apabila kita melukan sinkronisasi dengan file server terhadap data lokal di komputer kita, ada dua hal yang mungkin terjadi;

  • Data yang ada dikomputer kita akan mengikuti data yang ada di File Server, termasuk apabila file/folder di File Server sudah tidak ada, maka File/Folder di Komputer kita akan ikut dihapus.
  • Data yang ada di File Server akan mengikuti data yang ada di Komputer lokal kita (kebalikan dari yang pertama)

Kasus yang terjadi adalah ketika saya melakukan backup data di Server Indoupload.NET yang akan digantikan dengan server baru, termasuk HDD baru, awalnya saya menggunakan utilitas Secure Copy atau SCP, untuk mengkopi data dari Server lama di Gd. Cyber ke Server baru di Matraman dengan mendapatkan jatah bandwidth 50 mbps, memang jadi lama, namun langkah tersebut diambil untuk menghindari bekerja sambil kedinginan di dalam Data Center tempat server Indoupload.NET diletakkan :D.

Entah karena apa, proses kopi data yang dilakukan dengan SCP tiba-tiba terputus ketika proses sedang berlangsung sekitar 70%, dan akan membutuhkan waktu lama apabila harus memeriksa ulang 5000an folder milik pengguna terdaftar Indoupload.NET, dan lebih lama lagi apabila harus mendownload ulang semua. Pada saat ini saya teringat akan Rsync dan kemudian menjalankan perintah ini;

rsync -e "ssh -l root -p xxx" -avzu --delete /path/ke/folder/asal root@yyy.yyy.yyy.yyy:/folder/tujuan

Perintah saya jalankan melalui terminal SSH di remote host (server lama) ke server baru dengan IP Address yyy.yyy.yyy.yyy melalui protokol SSH (-e) yang jalan pada port xxx (-p). Saya jalankan pada session lain dengan menggunakan utilitas screen, sehingga apabila terminal SSH tersebut saya tutup, proses tetap berjalan. Info lebih lanjut mengenai screen bisa di baca di linuxjournal.

Sehingga perintah lengkapnya menjadi

screen rsync -e "ssh -l root -p xxx" -avzu --delete /path/ke/folder/asal root@yyy.yyy.yyy.yyy:/folder/tujuan

atau

screen -d -m rsync -e "ssh -l root -p xxx" -avzu --delete /path/ke/folder/asal root@yyy.yyy.yyy.yyy:/folder/tujuan

untuk melakukan resume session tersebut (melihat prosesnya) bisa dengan perintah

screen -r

apabila lebih dari 1 session, screen -r akan memperlihatkan session yang ada, tinggal tambahkan session tersebut di belakang screen -r.

Penjelasan Rsync

Sinkronisasi satu arah ditentukan oleh /path/ke/folder/asal dan /path/ke/folder/tujuan, kalau peletakkan seperti perintah yang dicontohkan, maka data yang terdapat di /path/ke/folder/tujuan akan menyesuaikan dengan data yang terdapat di /path/ke/folder/asal.

Melalui contoh di atas, berikut keterangan artinya;

e “ssh -l root -p xxx” , memerintahkan Rsync untuk melakukan otentikasi dan transfer data melalui SSH yang berjalan pada port xxx di server remote.

-a , moda arsip, mengkopi direktori (folder) secara recursive dan mempertahankan permission dan ownership.

-v, verbosity, memperlihatkan proses yang sedang berlangsung di layar anda.

-z, melakukan kompresi terhadap data yang ditransfer.

-u, skip file yang lebih baru di komputer remote (tidak akan diproses lebih lanjut)

–delete, menghapus file/folder yang ada di komputer remote (server baru) namun tidak ada di komputer lokal (server lama) .. akan berlaku kebalikan apabila /path/ke/folder/asal dan /path/ke/folder/tujuan dibalik.

root@yyy.yyy.yyy.yyy:/path/ke/folder/tujuan, adalah USERNAME dan IP Address Mesin remote serta path tempat file / folder dari folder asal akan dikopi.

Perhatikan bahwa contoh perintah tidak menggunakan trailing slash karena hasilnya akan berbeda. /path/ke/folder/asal dan bukan /path/ke/folder/asal/.

Untuk melakukan perbandingan data lebih akurat bisa dilakukan dengan menambahkan opsi;

-c melakukan pemeriksaan melalui checksums.

Kelemahan dari penggunaan protokol SSH adalah enkripsi yang dilakukan akan menambah beban CPU host terkait, sehingga data transfer rate tidak menjadi bottle neck, melainkan kekuatan CPU itu sendiri.

3 Responses

  1. “-u, skip file yang lebih baru di komputer remote (tidak akan diproses lebih lanjut)”

    berarti intinya untuk pembaharuan file nya perintah itu kan mas?

  2. ^^ yap, kalau menurut dokumentasi sih begt, kebaruannya diliat dari tanggalnya ya.. perhatikan juga ada pilihan untuk mengecek melalui MD5, jadi tidak berdasarkan kebaruan file.. melainkan yang berbeda akan di kopi ulang… (-c), tapi juga jangan salah ya.. sinkronisasinya satu arah, semua tergantung mana yang mau disinkronin dan urutan remote serta local data..

Leave a Reply