L
High Availability & Scaling • Literally Web ID

Membangun High Availability Load Balancer dengan HAProxy dan Keepalived

⏱️ 18 menit baca • 📅 14 Oct 2026 • 👁️ 2 views
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)

  1. 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).
  2. VRRP Heartbeat: Keepalived pada node Master secara berkala mengirimkan paket multicast VRRP ke node Backup untuk menyatakan "saya masih hidup".
  3. 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.
  4. 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
  • Backend Servers: Minimal 2 server web (misal: Nginx + PHP-FPM / Node.js) di IP 192.168.1.20 dan 192.168.1.21.
  • Akses: Hak akses root atau sudo pada 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 /healthz pada server backend. Jika backend mengembalikan status HTTP selain 200, HAProxy otomatis mengeluarkannya dari pool.
  • priority 101 (Master) vs 100 (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.100 ke 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 8404 terlindungi 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.

🏷️ Tags: #High Availability #Infrastructure #Haproxy #Keepalived #Load Balancer