Membangun High Availability Load Balancer dengan HAProxy dan Keepalived
1. Konteks Industri & Analisis Akar Masalah
Dalam lanskap infrastruktur web modern, Single Point of Failure (SPOF) adalah musuh utama ketersediaan sistem. Bayangkan sebuah aplikasi enterprise berbasis Node.js, PHP/Go dengan database MySQL/MariaDB dan caching Redis, yang melayani jutaan request harian di balik server Nginx atau Apache tunggal. Ketika server tersebut mengalami kegagalan hardware, kernel panic, atau gangguan jaringan, seluruh layanan mati total. Kerugian finansial, rusaknya reputasi brand, dan frustrasi pengguna adalah konsekuensi langsung yang harus ditanggung.
Sebelum penerapan arsitektur High Availability (HA) berbasis HAProxy dan Keepalived, perusahaan sering kali mengandalkan DNS Round-Robin atau load balancer tunggal konvensional. Pendekatan ini memiliki kelemahan fatal: jika server load balancer utama tumbang, DNS propagation memakan waktu terlalu lama (TTL delay), membuat failover otomatis mustahil dilakukan secara instan. Selain itu, pembagian beban (load balancing) yang merata tidak terjadi secara dinamis berdasarkan kesehatan aplikasi backend.
Setelah menerapkan arsitektur High Availability (HA) menggunakan HAProxy sebagai lapisan load balancer cerdas dan Keepalived untuk manajemen Virtual IP (VIP) berbasis protokol VRRP (Virtual Router Redundancy Protocol), sistem mencapai tingkat ketahanan five-nines (99.999% uptime). Traffic masuk didistribusikan secara efisien berdasarkan algoritma tingkat lanjut, sementara node cadangan mengambil alih IP virtual dalam hitungan detik saat node utama gagal.
2. Konsep Inti & Deep Dive Arsitektur
Arsitektur HA Load Balancer ini menggabungkan dua komponen open-source legendaris: HAProxy (High Availability Proxy) untuk layer 4 (TCP) dan layer 7 (HTTP) routing, serta Keepalived untuk mengimplementasikan VRRP demi menjamin ketersediaan IP address.
Alur Kerja Sistem (Under the Hood)
- Virtual IP (VIP): Klien (browser, mobile apps, API consumers) melakukan request ke satu alamat IP virtual yang dikelola bersama oleh dua server HAProxy (Master dan Backup).
- VRRP Heartbeat: Keepalived pada node Master secara berkala mengirimkan paket multicast VRRP ke node Backup untuk menyatakan "saya masih hidup".
- Failover Otomatis: Jika node Master terputus atau daemon HAProxy-nya mati, Keepalived di node Backup berhenti menerima sinyal, mengambil alih IP virtual tersebut dalam waktu di bawah 1 detik, dan langsung melayani traffic.
- Load Balancing & Health Check: HAProxy menerima traffic dari VIP, mengevaluasi kesehatan backend (Nginx/Apache, Node.js, PHP-FPM) secara real-time melalui HTTP/TCP health check, lalu merutekan request ke node backend yang paling sehat.
[ Client / DNS / CDN (Cloudflare) ]
│
▼
{ Virtual IP (VIP) }
/ \
▼ ▼
┌──────────────┐ ┌──────────────┐
│ HAProxy 01 │ │ HAProxy 02 │
│ (MASTER) │◄─┼─►(BACKUP) │ (Keepalived / VRRP)
└──────┬───────┘ └──────┬───────┘
│ │
└────────┬────────┘
│
▼
┌──────────────────────────┐
│ Backend Pool (Nginx/Go) │
│ Node 1 │ Node 2 │ Node 3 │
└──────────────────────────┘
3. Perbandingan Komparatif / Analisis Pendekatan
Berikut adalah analisis komparatif antara berbagai metode load balancing dan failover yang umum digunakan dalam arsitektur enterprise.
| Fitur / Parameter | HAProxy + Keepalived | Nginx Plus (Commercial HA) | Cloud Load Balancer (AWS/GCP) | DNS Round-Robin |
|---|---|---|---|---|
| Biaya | Gratis (Open Source) | Lisensi Komersial Tinggi | Pay-per-use + Bandwidth | Gratis |
| Failover Speed | < 1 Detik (VRRP) | < 1 Detik | Otomatis (Managed Cloud) | Menit / Jam (Bergantung TTL) |
| Layer Support | Layer 4 & Layer 7 | Layer 4 & Layer 7 | Layer 4 & Layer 7 | Layer 3 (IP Only) |
| Overhead CPU/RAM | Sangat Rendah | Rendah | Dikelola Cloud Provider | Nihil |
| Kontrol & Kustomisasi | Penuh (Root Access) | Tinggi | Terbatas pada fitur Cloud | Sangat Terbatas |
| Kompleksitas Setup | Menengah - Tinggi | Menengah | Rendah | Sangat Rendah |
[!TIP] Pilihlah HAProxy + Keepalived jika Anda mengoperasikan infrastruktur on-premise, hybrid cloud, atau ingin menghindari vendor lock-in dengan kontrol penuh atas parameter TCP stack dan memori.
4. Prasyarat Sistem & Persiapan Lingkungan
Sebelum memulai instalasi, pastikan Anda telah menyiapkan lingkungan dengan spesifikasi berikut:
- OS: Ubuntu 22.04 LTS atau Debian 12 (Minimum 2 Node untuk Load Balancer).
- Network:
- LB Master IP:
192.168.1.10 - LB Backup IP:
192.168.1.11 - Virtual IP (VIP):
192.168.1.100
- LB Master IP:
- Backend Servers: Minimal 2 server web (misal: Nginx + PHP-FPM / Node.js) di IP
192.168.1.20dan192.168.1.21. - Akses: Hak akses
rootatausudopada seluruh node.
Verifikasi konektivitas jaringan antar node dan pastikan firewall (UFW / iptables) mengizinkan lalu lintas VRRP (protokol IP 112) serta port web (80/443).
5. Panduan Implementasi Langkah demi Langkah
Langkah 1: Instalasi HAProxy dan Keepalived (Pada Node Master & Backup)
Jalankan perintah berikut di kedua node LB:
sudo apt update
sudo apt install -y haproxy keepalived
Langkah 2: Konfigurasi HAProxy (/etc/haproxy/haproxy.cfg)
Ganti isi file /etc/haproxy/haproxy.cfg pada kedua node dengan konfigurasi produksi berikut:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
maxconn 50000
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
defaults
log global
mode http
option httplog
option dontlognull
retries 3
timeout connect 5s
timeout client 50s
timeout server 50s
errorfile 400 /etc/haproxy/errors/400.http
errorfile 503 /etc/haproxy/errors/503.http
frontend stats_front
bind *:8404
stats enable
stats uri /
stats refresh 5s
stats admin if TRUE
frontend web_frontend
bind 192.168.1.100:80
bind 192.168.1.100:443 ssl crt /etc/ssl/certs/combined.pem
mode http
option forwardfor
http-request set-header X-Forwarded-Proto https if { ssl_fc }
default_backend web_backend
backend web_backend
mode http
balance roundrobin
option httpchk GET /healthz
http-check expect status 200
server web01 192.168.1.20:80 check inter 3s rise 2 fall 3
server web02 192.168.1.21:80 check inter 3s rise 2 fall 3
Langkah 3: Konfigurasi Keepalived pada Node Master (192.168.1.10)
Buat file /etc/keepalived/keepalived.conf di node Master:
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass SecureSecretPass123
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
check_haproxy
}
}
Langkah 4: Konfigurasi Keepalived pada Node Backup (192.168.1.11)
Buat file /etc/keepalived/keepalived.conf di node Backup:
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass SecureSecretPass123
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
check_haproxy
}
}
Langkah 5: Aktifkan dan Jalankan Layanan
Jalankan perintah berikut di kedua node:
sudo systemctl enable haproxy
sudo systemctl restart haproxy
sudo systemctl enable keepalived
sudo systemctl restart keepalived
6. Bedah Kode & Penjelasan Detail Baris Kunci
stats socket /run/haproxy/admin.sock: Menyediakan soket Unix untuk administrasi real-time tanpa perlu me-restart HAProxy (misal: menonaktifkan backend secara manual saat maintenance).balance roundrobin: Algoritma pembagian beban bergilir yang mendistribusikan request secara merata ke setiap server backend.option httpchk GET /healthz: Melakukan pengecekan kesehatan periodik ke endpoint/healthzpada server backend. Jika backend mengembalikan status HTTP selain 200, HAProxy otomatis mengeluarkannya dari pool.priority 101(Master) vs100(Backup): Menentukan prioritas VRRP. Node dengan prioritas lebih tinggi akan memegang Virtual IP. Jika node Master mati, prioritasnya turun, dan Backup mengambil alih.
7. Skenario Produksi & Studi Kasus Dunia Nyata
Dalam sebuah e-commerce besar yang mengalami lonjakan traffic saat Flash Sale, ribuan request per detik menghantam lapisan load balancer. Dengan konfigurasi di atas:
- HAProxy menangani SSL Termination secara efisien, mengurangi beban komputasi TLS handshake pada server backend Nginx/Node.js.
- Jika salah satu server HAProxy mengalami kegagalan catu daya atau kernel crash, Keepalived memindahkan VIP
192.168.1.100ke node cadangan dalam waktu kurang dari 800 milidetik tanpa interupsi koneksi aktif. - Session persistence (sticky sessions) atau pembagian beban berbasis cookie dapat diaktifkan dengan mudah pada blok backend jika aplikasi backend belum sepenuhnya stateless.
8. Common Pitfalls, Anti-Patterns & Solusi
[!WARNING] Kesalahan Fatal #1: Firewall Memblokir Multicast VRRP. Banyak sysadmin lupa mengizinkan protokol VRRP atau port multicast (
224.0.0.18) pada UFW/iptables, menyebabkan kedua node bertindak sebagai MASTER secara bersamaan (Split-Brain Syndrome) dan menyebabkan konflik IP.
[!IMPORTANT] Kesalahan Fatal #2: Menggunakan Health Check yang Terlalu Berat. Hindari melakukan query database berat pada endpoint health check (
/healthz). Lakukan pemeriksaan mandiri yang ringan (misal: cek status memori dan koneksi lokal saja) agar health check tidak justru melumpuhkan server backend.
9. Benchmark, Metrik Kinerja & Tuning Performa
Untuk menguji ketahanan load balancer, gunakan tool pengujian beban seperti wrk atau k6:
wrk -t12 -c400 -d30s http://192.168.1.100/
Tuning Kernel Linux (/etc/sysctl.conf)
Untuk menangani puluhan ribu koneksi konkuren (C10M problem), tambahkan parameter tuning berikut pada node HAProxy:
net.ipv4.ip_nonlocal_bind=1
net.ipv4.tcp_tw_reuse=1
net.core.somaxconn=65535
fs.file-max=100000
Terapkan perubahan dengan perintah sudo sysctl -p.
10. Checklist Penerapan Produksi & Kesimpulan
- Pastikan Virtual IP dapat di-ping dan berpindah otomatis saat Master dimatikan (
sudo systemctl stop haproxy). - Verifikasi halaman statistik HAProxy di port
8404terlindungi oleh autentikasi atau dibatasi ke IP internal. - Uji skenario failover backend saat server Nginx/Node.js dimatikan secara mendadak.
- Konfigurasikan rotasi log (
logrotate) untuk file log HAProxy guna mencegah kehabisan ruang disk.
Penerapan HAProxy dan Keepalived memberikan fondasi infrastruktur yang sangat tangguh, menghilangkan titik kegagalan tunggal (SPOF), dan menjamin ketersediaan aplikasi web enterprise Anda pada tingkat tertinggi.