Membedah perilaku replika Longhorn untuk high availability: bagaimana kuorum bekerja, apa arti status degraded vs offline, cara rebuild replika yang gagal, pengaruh dataLocality terhadap performa, serta simulasi kegagalan node dengan kubectl cordon dan drain.

Di episode 8 kita menata data lifecycle dan backup. Episode 9 menjawab pertanyaan yang selalu muncul saat node mati: kenapa volume saya masih jalan / stuck / offline? Ini adalah jantung high availability Longhorn — memahami kuorum, rebuild, dan status volume.
Mengapa penting? Sebagai operator, kalian harus tahu kapan cluster aman dan kapan berbahaya. Menjalankan volume dengan 2 dari 3 replika sehat adalah normal; menjalankan dengan 1 replika sehat adalah alarm. Di episode ini kalian juga akan mempraktikkan simulasi kegagalan tanpa merusak data.
Volume dengan numberOfReplicas: 3 membutuhkan kuorum 2 untuk bertulis (write). Artinya:
| Replica Sehat | Status Volume | Kapabilitas |
|---|---|---|
| 3/3 | Healthy | Write + Read normal |
| 2/3 | Degraded | Write + Read tetap jalan (kuorum terpenuhi) |
| 1/3 | Offline (no healthy replica) | Tidak bisa attach — data tidak boleh ditulis |
Ketika dua node mati bersamaan dari volume 3-replica, sisa satu tidak cukup membentuk kuorum → volume offline untuk keamanan (mencegah data korupsi).
longhorn-ha).kubectl drain worker-2 --ignore-daemonsets --delete-emptydir-data.Degraded 2/3 — masih jalan.Healthy 3/3.kubectl -n longhorn-system get volumes
kubectl -n longhorn-system get replicas.longhorn.ioRebuild terjadi otomatis maupun manual. Langkah manual di UI:
ERR/terjoin → Rebuild.Perubahan numberOfReplicas juga memicu auto reconciliation:
# set StorageClass baru atau edit volume
numberOfReplicas: "2"Longhorn otomatis menyesuaikan jumlah replika seluruh volume yang memakai StorageClass tersebut. Ini rekonsiliasi desired state — bukan operasi manual per volume.
Rebuild = transfer semua data volume ke node baru. Untuk volume 100 GB, rebuild menghabiskan bandwidth dan I/O. Bijaklah: jangan melakukan rebuild banyak volume bersamaan di saat window peak.
Semua replika berada di node yang sama dengan volume aktif. Latency I/O paling rendah (tidak ada jaringan antar replika), tetapi tidak ada replikasi cross-node — kalau node mati, volume mati. Cocok untuk beban I/O yang sangat sensitif dan sudah menerima single-node risk.
Mencoba menaruh replika di node yang memakai volume (lokal), tapi tetap bisa menyebar bila node penuh. Ini default yang seimbang: read datang dari replika lokal, dan masih ada replika di node lain.
Longhorn bebas menempatkan replika di mana pun — performa paling bervariasi.
Untuk database 2-node: gunakan best-effort untuk keseimbangan latency + HA.
kubectl cordon worker-1
kubectl drain worker-1 --delete-emptydir-data --ignore-daemonsets --forceDrain akan memindahkan Pod. Longhorn mendeteksi node tidak terjadwal; replika yang di sana menandai diri Failed; Kubernetes tidak bisa memakai volume dari node tersebut hingga replika rebuild di node sehat.
Setelah perawatan selesai, kembalikan node:
kubectl uncordon worker-1Longhorn perlahan me-rebuild replika yang hilang setelah node kembali — status volume kembali Healthy tanpa downtime data.
Caution
Drain node storage akan memicu rebuild — perhatikan disk dan bandwidth. Pastikan ada node lain dengan ruang cukup sebelum menjalankan drain. Jika tidak, replika tidak bisa dijadwalkan dan volume akan stuck degraded selamanya.
kubectl -n longhorn-system get volumes → Degraded.Healthy.Praktik ini membangun reflek: sebelum maintenance node apa pun, pastikan Longhorn punya ruang untuk rebuild.
Inti yang harus dibawa pulang:
numberOfReplicas → auto reconciliation.strict-local = latency terbaik tapi tanpa HA; best-effort = keseimbangan.Di episode 10 selanjutnya kita akan membahas management node & disk Longhorn — menambah/mengurangi disk, menandai node non-schedulable untuk maintenance, disk eviction saat mengganti SSD, dan membuat StorageClass multi-tier (SSD vs HDD). Sampai jumpa di episode 10!