Untuk melakukan sync data antar server di Linux sangat mudah sekali dengan menggunakan rsync. Rsync ini adalah salah satu program yang bisa dibilang hampir ada di semua distro server popular. Jika tidak ada pun, bisa diinstall dengan sangat mudah.
Gunanya apa? Gunanya adalah untuk melakukan backup sinkronisasi data antar server, bisa juga untuk backup dan restore/recovery data ke remote server/external server.
Langkah Backup Data ke Remote Server dengan Rsync
Yang pertama, buka koneksi ke remote server, bisa dengan menggunakan SSH Key. Kita buat dulu SSH Key Private dan Public di server local:
ssh-keygen -t rsa
Nanti akan generated sebuah pasangan SSH Keys di ~/.ssh/id_rsa.pub and ~/.ssh/id_rsa.
Selanjutnya, kita transfer public key kita ke remote server, commandnya:
ssh-copy-id username@remotehostname
Isian remotehostname di sini bisa berupa IP atau hostname
Pertama konek kita akan diminta mengisikan username dan password. Setelah logged in, public key di server kita (yang sudah generated) akan dicopy ke server lain. Pastikan public key kita sudah masuk ke file .ssh/authorized_keys di server tujuan, dan pastikan permission file authorized_keys tersebut adalah 644 dan permission folder .ssh adalah 755, serta mode End Of Line adalah UNIX (bukan DOS/Windows)
Berikutnya kita tinggal melakukan command “ssh remotehostname” untuk bisa login ke server yang remote.
Melakukan Upload Rsync
Berikutnya, lakukan rsync “push” dari local server ke remote server, commandnya
rsync -azv /path/to/local/directory/ username@remote_host:path/to/remote/directory
Di atas contoh untuk arsip data. Untuk menghapus data di folder tujuan yg sudah tidak ada di folder asli, kita tambahkan flag delete dan ignore errors
rsync -azv --delete --ignore-errors /path/to/local/directory/ username@remote_host:path/to/remote/directory
Untuk melakukan upload, seringkali ada kegagalan atau rsync tidak responsive. Ada baiknya kita berikan time limit (dalam detik) kapan rsync harus diakhiri, untuk ini kita gunakan fungsi timeout, misalnya timeout dalam 18.000 detik (6 jam) setelah process rsync dimulai pada tengah malam (00:00), maka proses rsync akan berhenti tepat pukul 06:00.
timeout 18000 rsync -azv --delete --ignore-errors /path/to/local/directory/ username@remote_host:path/to/remote/directory
Ingat: source directory diakhiri /, target directory TANPA akhiran /
Testing dulu sebelum melakukan rsync!
Melakukan Download Rsync
Untuk sebaliknya, melakukan rsync “pull” dari remote server ke local server, tinggal dibalik urutannya
rsync -azv username@remote_host:path/to/remote/directory/ /path/to/local/directory
Di atas contoh untuk arsip data. Untuk menghapus data di folder tujuan yg sudah tidak ada di folder asli
rsync -azv --delete username@remote_host:path/to/remote/directory/ /path/to/local/directory
Seperti umumnya kode untuk copy file, argumen pertama selalu merupakan source file, berikutnya baru target files
Ingat: source directory diakhiri /, target directory TANPA akhiran /
Agar Bisa Diakses Public
Ingin membuat local CDN? Tambahkan –chmod=D755,F644 pada parameter saat melakukan rsync, agar file yang disinkronisasikan bisa diakses oleh public
Agar Tetap Berjalan Saat Terminal Mati
Tambahkan ampersand (&) di akhir rsync, lalu masukkan perintah disown pada baris selanjutnya untuk membuat rsync tetap berjalan walau terminal di komputer kita mati atau terputus.
disown %1
Tentang Slash
You may have noticed that there is a trailing slash (/) at the end of the first argument in the above commands:
rsync -a dir1/ dir2
This is necessary to mean “the contents of
dir1
”. The alternative, without the trailing slash, would placedir1
, including the directory, withindir2
. This would create a hierarchy that looks like:
~/dir2/dir1/[files]
https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps
Beberapa Parameter Penting
-azv // untuk mengarsipkan file
–delete // untuk menghapus file di tujuan yang sudah tidak ada di sumber
–chmod=Du=rwx,Dgo=rx,Fu=rw,Fog=r // untuk membuat file tujuan ber-permission 644 dan folder tujuan berpermission 755
–exclude error_log // exclude folder atau file dengan nama error_log
–exclude ‘*.php’ // exclude folder atau file dengan akhiran *.php
Pastikan Hanya Satu Rsync Yang Berjalan
Agar tidak ada beberapa proses rsync yg berjalan bersamaan, silakan ikuti tutorial Memastikan Hanya Satu Instance Bash Script Yang Berjalan
Referensi:
https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps
Backup Dengan Rsync ke S3 Storage?
Gunakan rclone, https://rclone.org/
Run rclone config
to setup. See rclone config docs for more details.
rclone config
Sync /home/local/directory
to the remote bucket, deleting any excess files in the bucket.
rclone sync /home/local/directory remote:bucket --auto-confirm
–auto-confirm If enabled, do not request console confirmation (source)
-i, –interactive Enable interactive mode
Mau dibalik juga bisa, dari remote ke local. Ganti saja urutan source dan destinationnya, menjadi:
rclone sync remote:bucket /home/local/directory --auto-confirm
PENTING: perhatikan bahwa di local directory dan remot bucket tidak ada akhiran /
Bisa juga ditambah timeout 86400s, jadi max jalan 24 jam
timeout 86400s rclone sync /home/local/directory remote:bucket –auto-confirm
PENTING: rclone sync tidak menghapus folder yang sudah ada, hanya upload file baru ke remote. Jadi hapus backup lama, biar mudah semuanya digabungkan dalam sebuah file .sh
Begini contoh file .sh yang dipakai dan bisa dijalankan setiap hari:
https://ahlikompie.com/wp-content/uploads/2023/03/rclone-to-s3idcloudhost.sh
Leave a Reply