Membangun layanan yang tetap hidup saat komponen gagal: merancang high availability, mengelola virtual IP dengan keepalived, dan mendistribusikan trafik dengan load balancer HAProxy

Semua episode sebelumnya membuat sistem bekerja dan aman. Episode 21 ini membahas pertanyaan yang menentukan kualitas sebuah layanan: apa yang terjadi saat satu komponen gagal? Apakah layanan ikut mati, atau tetap berjalan tanpa pengguna sadar? Jawabannya ditentukan oleh desain high availability (HA) — fondasi yang membedakan layanan "uji coba" dari layanan produksi.
Mengapa episode ini penting? Karena kegagalan adalah keniscayaan — disk rusak, server down, jaringan putus. Yang membedakan System Engineer profesional adalah bagaimana desainnya menyerap kegagalan tersebut. Episode ini membahas tiga alat utama: redundancy/clustering (dua komponen yang saling menggantikan), keepalived (virtual IP untuk failover), dan load balancer (mendistribusikan trafik antar server).
Prinsip dasar HA: hilangkan single point of failure (SPOF). Jika satu server melayani segalanya, server itu adalah SPOF. Solusinya adalah redundancy — duplikasi komponen kritis:
Tingkat ketersediaan yang sering disebut sebagai "nines":
| Availability | Downtime/tahun | Arti Praktis |
|---|---|---|
| 99% (two nines) | ~3,7 hari | Kurang baik untuk produksi |
| 99,9% (three nines) | ~8,8 jam | Layanan umum |
| 99,99% (four nines) | ~52 menit | Enterprise kritis |
Ingat: HA menambah kompleksitas dan biaya. Targetkan sesuai kebutuhan bisnis (episode 24 membahas SLO lebih dalam) — jangan membangun four-nines untuk aplikasi internal yang bisa down 1 jam.
keepalived mengelola virtual IP (VIP) yang dipakai bersama dua server. Selama primary sehat, VIP ada di primary; saat primary gagal, VIP otomatis pindah ke backup. Aplikasi cukup memakai VIP — tidak peduli server mana yang melayani.
Konfigurasi dasar (dua server, primary + backup):
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass rahasia-vrrp
}
virtual_ipaddress {
10.0.1.100/24 dev eth0
}
track_script {
chk_nginx
}
}vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass rahasia-vrrp
}
virtual_ipaddress {
10.0.1.100/24 dev eth0
}
}Perhatikan track_script: keepalived memeriksa kesehatan layanan. Saat nginx mati di primary, ia menurunkan prioritas dan VIP pindah ke backup:
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2
fall 2
rise 2
}Verifikasi:
sudo systemctl status keepalived
ip addr show eth0 | grep 10.0.1.100 # VIP ada di server ini?
sudo journalctl -u keepalived -n 20Note
VRRP (yang dipakai keepalived) memakai multicast di jaringan. Pastikan switch antar kedua node mengizinkan protokol ini, dan virtual_router_id harus sama di kedua server. Kesalahan umum: VIP tidak pindah karena id router berbeda atau autentikasi tidak cocok.
Jika web server ditambah menjadi dua atau tiga, trafik harus dibagi. Load balancer berdiri di depan server dan mendistribusikan request — plus melakukan health check dan otomatis menarik node yang mati.
global
log /dev/log local0
maxconn 4096
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
frontend http-in
bind *:80
default_backend web_servers
backend web_servers
balance roundrobin
option httpchk GET /healthz
server web01 10.0.1.11:8080 check
server web02 10.0.1.12:8080 checkPoin penting:
httpchk — health check via HTTP; node yang tidak lolos otomatis dikeluarkan.balance roundrobin — pembagian giliran; opsi lain: leastconn (untuk koneksi panjang), source (sticky).check — aktifkan health check per server.Menguji failover:
# Dari mesin lain, request berulang
for i in $(seq 1 10); do
curl -s http://10.0.1.100/ | grep -o "web0[12]"
done
# Matikan web01, ulangi — trafik otomatis ke web02
sudo systemctl stop nginx # di web01| Lapisan | Contoh | Digunakan Untuk |
|---|---|---|
| L4 (TCP) | HAProxy mode tcp, IPVS | Distribusi berdasarkan IP/port |
| L7 (HTTP) | HAProxy mode http, Nginx | Routing berdasarkan path/host |
| Cloud | ALB, GCLB | Managed, otomatis scalable |
Kombinasi produksi yang umum: keepalived (VIP) di depan dua HAProxy — sehingga load balancer sendiri tidak menjadi SPOF.
Skenario lab: dua web server + satu LB ber-HA.
# 1. Web01 & web02: install nginx, bedakan halaman identitas
# 2. Install & konfigurasi HAProxy di dua node LB
sudo apt install -y haproxy keepalived
# ... buat config sesuai contoh di atas ...
# 3. Aktifkan di kedua node LB
sudo systemctl enable --now haproxy keepalived
# 4. Verifikasi: satu VIP, trafik terbagi, failover bekerja
curl -s http://10.0.1.100/
sudo ip addr show | grep 10.0.1.100httpchk GET /healthz lebih akurat.stick-table atau balance source).Inti yang harus dibawa pulang:
track_script health check.Di episode 22 selanjutnya kita melihat jangka panjang: capacity & lifecycle management — capacity planning, decommission, dan asset management. Sampai jumpa di episode 22!