Menyusun strategi disaster recovery untuk Longhorn: merestorasi backup ke cluster baru, memakai Longhorn volume DR untuk replikasi asinkron lintas-cluster, menjadwalkan test restore rutin, dan menetapkan target RPO/RTO yang realistis.

Backup sudah berjalan otomatis di episode 15. Episode 16 menjawab pertanyaan paling menegangkan: apa yang terjadi kalau semua cluster hilang? Inilah disaster recovery — bukan sekadar "punya backup", melainkan bisa membuktikan bahwa backup bisa dikembalikan.
Mengapa penting? Backup yang tidak pernah diuji = backup yang kemungkinan besar rusak. RTO/RPO hanya angka sampai kalian membuktikan restore bekerja. Di episode ini kalian mempraktikkan restore ke cluster baru dan merancang DR policy.
Atau via manifest dengan StorageClass fromBackup:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-from-backup
provisioner: driver.longhorn.io
parameters:
fromBackup: "s3://my-bucket@us-east-1/backups?backup=backup-xyz"Setelah PVC Bound, mount ke StatefulSet (kembalikan data-postgres-0) lalu jalankan:
kubectl exec -it postgres-0 -- psql -U postgres -d laravel -c "\dt"Cek struktur tabel & data — ini bukti restore berhasil. Jangan hanya lihat status PVC Bound.
Longhorn menyediakan volume DR: replikasi asinkron ke cluster sekunder. Backup tetap dikelola cluster utama, cluster DR menunggu dengan volume aktif standby:
Ini memberikan RPO mendekati backup terakhir (menit-jam, tergantung siklus) dan RTO dalam menit — jauh lebih besar dari restore manual.
Alat seperti Velero atau CloudCasa mengelola backup + DR secara terkelola (resource + volume). Longhorn menyediakan integrasi CSI snapshot yang dipakai Velero. Kita bedah lebih lanjut di episode 23.
| Pendekatan | RPO | RTO | Kompleksitas |
|---|---|---|---|
| Restore manual dari backup | sesuai siklus backup (jam) | jam | Rendah |
| Longhorn volume DR | menit (siklus poll) | menit | Sedang |
| Velero/CloudCasa full DR | menit | menit | Tinggi |
Backup yang tidak pernah di-restore adalah ilusi keamanan. Jadwalkan test restore — lewat worry list, uji pemicu:
Setiap 3 bulan:
1. Restore backup terbaru ke cluster staging-lab.
2. Jalankan PostgreSQL, verifikasi `\dt`, hitung row.
3. Simulasikan login Laravel: API response normal.
4. Catat durasi restore → update RTO nyata.Catatan: latihan ini sekaligus "membakar" proses — jika restore gagal, kalian tahu sebelumnya, bukan saat bencana.
Gunakan pipeline (GitHub Actions, schedule cron) yang menjalankan:
kubectl apply -f restore-sc.yaml
kubectl apply -f postgres-restore-sts.yaml
kubectl wait --for=condition=ready pod -l app=postgres-restore --timeout=300s
kubectl exec deploy/postgres-restore -- psql -c "SELECT 1;" && echo "restore-ok"Kalau berhasil, kirim notifikasi; jika gagal, alert. Ini menjadikan DR sebuah mekanisme yang terus diuji, bukan dokumentasi yang menganggur.
| Metrik | Definisi | Contoh Target |
|---|---|---|
| RPO (Recovery Point Objective) | Seberapa jauh waktu kembali — seberapa banyak data yang rela hilang | 4 jam (backup 4×/hari) |
| RTO (Recovery Time Objective) | Seberapa cepat layanan kembali | 4 jam (restore + migrasi) |
Target ini menentukan frekuensi backup dan arsitektur DR:
Important
RPO/RTO adalah keputusan bisnis, bukan teknis murni. Diskusikan dengan stakeholder berapa menit/jam toleransi downtime data. Setelah itu baru kalkulasi frekuensi backup dan investasi DR — jangan kebalik.
Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kita akan membahas monitoring & observability Longhorn — metrik Prometheus bawaan, dashboard Grafana resmi, alerting untuk volume degraded & backup gagal, health UI, dan sentralisasi log manager. Sampai jumpa di episode 17!