Oke judulnya mungkin rada berlebihan, tapi begitulah adanya. Server gue menjalankan 9 aplikasi dengan server seharga $5/bulan. Untuk trafik sangat bergantung dengan traefik, mungkin bila load nya sudah naik gue pertimbangkan untuk menambah server.

Server gue enggak menyimpan satu source code pun! Semuanya hanyalah data, aplikasi di "running" via Docker image yang diambil dari registry yang sudah gue set. Struktur direktorinya adalah seperti ini:

user@hostname:~$ tree -L 1
.
|-- data
`-- docker-compose.yml

1 directory, 1 file

Ya, kuncinya ada di docker-compose.yml, direktori data adalah tempat dimana aplikasi gue menyimpan data (data dari MySQL, MongoDB, dsb). Aplikasi semua didefinisikan di docker-compose.yml yang mana sudah memiliki 158 baris!

user@hostname:~$ wc -l docker-compose.yml

158 docker-compose.yml

Baik mari kita lanjutkan, basa-basi diatas hanya untuk memberikan gambaran tentang server "miskin" gue.

Proses backup

Perlu diketahui gue belum membuat cluster ataupun server pool, hanya 1 server. Jadi proses backup masih relatif mudah. Biasanya orang-orang untuk melakukan backup, hal yang dilakukan adalah:

  • Buat tar file per directory
  • Beri nama biasanya nama_directory-timestamp
  • Upload ke manapun

Disini gue enggak melakukan itu, melainkan menggunakan rclone. Kalo lo sudah tau tentang rsync, hampir sama dengan rsync , bedanya, khusus untuk cloud. Mengapa menggunakan rclone?

  • Simple
  • Mudah
  • Didesain untuk cloud
  • Incremental

Maksud dari incremental adalah hanya upload file yang "berubah" saja dilakukan checksum via MD5/SHA1 secara otomatis. Jadi untuk melakukan "archiving" seperti menggunakan tar sepertinya tidak perlu disini, kecuali untuk mengurangi backup size.

Gue menggunakan Google Drive sebagai storage backend, karena GDrive gue jarang dipakai. Daripada dinganggurin, mending dipakai untuk backup ini (meskipun gue punya akun AWS S3).

Mulai

Install rclone, caranya disini.

Buat remote storage di rclone dengan cara yang ada disini.

Buat kredensial untuk bisa berinteraksi dengan Google Drive API dengan cara yang ada disini.

Cek apakah sudah tersambung dengan Google Drive dengan cara:

$ rclone lsd drive:

Jika muncul list directory di gdrive kamu, berarti rclone berhasil di setup!

Backup backup backup

Untuk mulai membackup, kamu bisa jalankan perintah berikut:

$ rclone copy <source directory> <remote_name>:<dest directory>
$ rclone copy /home/fariz/data drive:backup_infra

Silahkan tunggu sampai rclone selesai meng-upload. Jika kamu ingin melihat progress nya, bisa tambahkan --progress di perintah diatas:

$ rclone copy /home/fariz/data drive:backup_infra --progress

Hal-hal yang perlu diperhatikan adalah:

  • Apakah current user bisa akses file/direktori yang dimaksud?
  • Apakah ingin upload file/direktori yang sifatnya symlink?

Dan jangan lupa dengan file-file yang sifatnya "berubah-ubah secara terus menerus" seperti file log, database, dsb. Kadang rclone akan gagal meng-upload file tersebut karena beda checksum atau karena corrupted.

Ini contoh outputnya ketika tidak ada file yang berubah:

Transferred:   	        0 / 0 Bytes, -, 0 Bytes/s, ETA -
Errors:                 0
Checks:               363 / 363, 100%
Transferred:            0 / 0, -
Elapsed time:          0s

Dan ini contoh bila ada yang berubah:

Transferred:   	   4.605M / 4.605 MBytes, 100%, 616.927 kBytes/s, ETA 0s
Errors:                 0
Checks:               714 / 714, 100%
Transferred:            5 / 5, 100%
Elapsed time:        7.6s

Dari total 714 files, yang ditransfer hanyalah 5 files saja :))

Dan ini contoh yang ada di Gdrive nya:

Aman ya?

user@hostname:~$ tree -L 1 data/

data/
|-- **redacted**
|-- **redacted**
|-- **redacted**
|-- **redacted**
|-- **redacted**
|-- **redacted**
`-- **redacted**

7 directories, 0 files

Gue enggak melakukan backup database, karena pada dasarnya gue ngebackup keseluruhan data di database 😂

Catatan

Belum di test di cluster dan belum menemukan cara yang efektif & efisien untuk itu. Biasanya cluster menggunakan konsep master-slave (atau manager-node), dan biasanya, data-data dipecah ke berbagai node.

Gue curiga untuk kasus gue sekarang scaling yang paling benar adalah secara vertical terlebih untuk file storage (terlebih cloud provider gue enggak memberikan layanan block storage), butuh riset lebih lanjut seputar ini. Hadoop anyone?

Untuk sekarang, ini udah efektif banget untuk gue. Tinggal buat Cronjob untuk melakukan backup secara otomatis per-jam, bisa di integrasikan dengan chatops klo lo tipe orang yang insecure.

Mana tutorialnya???

Lol gak ada, cuma berbagi aja. Jika punya solusi yang lebih mantap, bisa diskusi disini. Terima kasih!