Membangun layanan yang tidak pernah mati saat dibutuhkan: konsep high availability, clustering, load balancing, health check, dan failover otomatis, lalu praktik setup HA sederhana di lab.

Di episode 16 kalian mengenal load balancer; episode 21 membuat server cepat. Episode 22 menggabungkan keduanya menuju tujuan terakhir operasional: layanan yang terus tersedia — High Availability (HA).
Kenyataan yang harus diterima setiap sysadmin: semua server akan mati. Yang membedakan organisasi profesional adalah seberapa cepat layanan kembali. HA bukan soal mencegah kegagalan — itu mustahil — melainkan soal merancang sistem agar kegagalan satu komponen tidak menghentikan layanan.
Ketersediaan diukur dengan uptime percentage:
| Uptime | Downtime/tahun | Julukan |
|---|---|---|
| 99% | 3.65 hari | "Tiga sembilan" |
| 99.9% | 8.76 jam | Tiga sembilan |
| 99.99% | 52.6 menit | Empat sembilan |
| 99.999% | 5.26 menit | Lima sembilan |
Semakin banyak "sembilan", semakin mahal biayanya — HA adalah keputusan bisnis, bukan sekadar teknis. Kalian tidak butuh 99.999% untuk blog; kalian butuh untuk sistem pembayaran.
HA dibangun dari tiga komponen yang saling bekerja:
Poin penting yang sering dilupakan: redundancy tanpa failover otomatis hanyalah "dua server mati bergantian". Sistem harus mendeteksi dan beralih sendiri.
Health check adalah denyut nadi backend. Ada beberapa level:
| Level | Contoh Probe | Mendeteksi |
|---|---|---|
| TCP | Port terbuka? | Server hidup |
| HTTP | GET /health mengembalikan 200? | Aplikasi merespons |
| Deep | Aplikasi cek database sendiri | Ketergantungan hilang |
Implementasi dengan Nginx:
upstream backend_app {
server 192.168.56.11:3000 max_fails=3 fail_timeout=30s;
server 192.168.56.12:3000 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_app;
}
}max_fails=3 fail_timeout=30s berarti: jika 3 probe gagal dalam 30 detik, backend dikeluarkan dari pool sementara — dan Nginx mengarahkan semua trafik ke server yang sehat. Inilah failover otomatis level dasar.
Tip
Sediakan endpoint /health khusus di aplikasi kalian — yang memeriksa hal penting (koneksi database, storage, dependensi) dan mengembalikan status nyata. Health check yang hanya "port terbuka" akan mengira server sehat padahal aplikasinya macet total.
Load balancer sendiri bisa menjadi titik gagal. Solusinya clustering: dua node aktif-standby dengan Virtual IP (VIP) — satu IP yang melayani, berpindah otomatis saat node aktif mati.
Tool klasiknya: Keepalived (VRRP) atau Pacemaker/Corosync untuk level cluster penuh.
sudo apt install -y keepalivedvrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass ha-secret
}
virtual_ipaddress {
192.168.56.100
}
}sudo systemctl enable --now keepalived
ip addr | grep 192.168.56.100Saat master mati, node backup (priority 90) mengambil alih VIP 192.168.56.100 — client tidak perlu tahu apa-apa, karena yang mereka tuju adalah VIP, bukan server spesifik.
Warning
HA melindungi dari kegagalan server — tetapi bukan dari: kehilangan data, kesalahan konfigurasi, ransomware, atau bencana lokasi. Data yang sama di dua server (replikasi tanpa backup) tetaplah satu data. HA dan backup (episode 9) adalah pasangan wajib, bukan pilihan.
Bagian tersulit HA adalah state — data yang hidup. Dua pendekatan umum:
| Pendekatan | Contoh | Trade-off |
|---|---|---|
| Shared storage | SAN / NFS | Tahan server mati; storage jadi titik fokus baru |
| Replication | PostgreSQL streaming / MySQL replication | Copy data ke beberapa node; menangani konflik |
Untuk lab, coba PostgreSQL replication sederhana (primary-standby) agar paham konsepnya:
# Di primary: tambahkan ke postgresql.conf
wal_level = replica
max_wal_senders = 5
# Di standby: bangun dari base backup, jalankan
pg_basebackup -h primary-ip -D /var/lib/postgresql/16/main -U replicator -P -RKetika primary mati, standby bisa dipromosikan (failover) — kehilangan data seminimal mungkin, sesuai RPO yang ditetapkan.
Latihan terpadu di lab:
# 1. Dua instance aplikasi (port 3000 di dua VM / dua container)
docker run -d -p 127.0.0.1:3000 --name app1 my-app:1.0.0 # server A
docker run -d -p 127.0.0.1:3000 --name app2 my-app:1.0.0 # server B
# 2. Load balancer Nginx dengan health check (di atas)
# 3. Uji failover: matikan app1
docker stop app1
curl -sS http://app.example.com # masih merespons (dilayani app2)
# 4. Hidupkan kembali & amati health check
docker start app1Jika curl masih merespons saat app1 mati — HA kalian bekerja. Anda baru saja menyaksikan perbedaan antara "satu server" dan "layanan".
Inti yang harus dibawa pulang dari episode 22:
Di episode 23 selanjutnya kita akan membahas Disaster Recovery Planning — RPO/RTO, DR site, dan runbook, dengan praktik simulasi DR di lab. HA menjaga layanan tetap hidup; DR memastikan kalian bisa bangkit kembali setelah yang terburuk!