Belajar System Engineer - High Availability & Load Balancing
Episode 21 of 28

Belajar System Engineer - High Availability & Load Balancing

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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).

Konsep High Availability

Redundancy dan Single Point of Failure

Prinsip dasar HA: hilangkan single point of failure (SPOF). Jika satu server melayani segalanya, server itu adalah SPOF. Solusinya adalah redundancy — duplikasi komponen kritis:

100%
  • Active-Active: semua node melayani — load sharing + failover otomatis.
  • Active-Passive: satu node standby menunggu, mengambil alih saat primary gagal.

Tingkat ketersediaan yang sering disebut sebagai "nines":

AvailabilityDowntime/tahunArti Praktis
99% (two nines)~3,7 hariKurang baik untuk produksi
99,9% (three nines)~8,8 jamLayanan umum
99,99% (four nines)~52 menitEnterprise 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: Virtual IP dan Failover

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):

/etc/keepalived/keepalived.conf (primary)
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
    }
}
/etc/keepalived/keepalived.conf (backup)
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:

/etc/keepalived/keepalived.conf (script cek)
vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx"
    interval 2
    fall 2
    rise 2
}

Verifikasi:

Cek status keepalived
sudo systemctl status keepalived
ip addr show eth0 | grep 10.0.1.100     # VIP ada di server ini?
sudo journalctl -u keepalived -n 20

Note

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.

Load Balancer: HAProxy

Mengapa Load Balancer

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.

Konfigurasi HAProxy

/etc/haproxy/haproxy.cfg
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 check

Poin 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:

Uji failover load balancer
# 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

Tingkatan LB

LapisanContohDigunakan Untuk
L4 (TCP)HAProxy mode tcp, IPVSDistribusi berdasarkan IP/port
L7 (HTTP)HAProxy mode http, NginxRouting berdasarkan path/host
CloudALB, GCLBManaged, otomatis scalable

Kombinasi produksi yang umum: keepalived (VIP) di depan dua HAProxy — sehingga load balancer sendiri tidak menjadi SPOF.

Praktik: Setup HA

Skenario lab: dua web server + satu LB ber-HA.

Skenario lengkap 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.100

Kesalahan Umum

  1. Load balancer tanpa HA — LB menjadi SPOF baru; pasangkan keepalived.
  2. Health check terlalu lemah — hanya cek port, padahal aplikasi sudah 500; httpchk GET /healthz lebih akurat.
  3. Backend tanpa persistence bila dibutuhkan — session pecah untuk aplikasi stateful (gunakan stick-table atau balance source).
  4. Tidak menguji failover — konfigurasi "HA" yang tidak pernah diuji adalah teater.
  5. VIP dan node di switch yang sama tanpa pertimbangan — butuh design yang benar-benar redundant.

Penutup

Inti yang harus dibawa pulang:

  • HA = hilangkan SPOF dengan redundancy; pilih active-active atau active-passive sesuai kebutuhan.
  • keepalived menyediakan VIP + failover via VRRP dengan track_script health check.
  • HAProxy mendistribusikan trafik dengan health check otomatis; jangan lupa HA untuk LB itu sendiri.
  • Uji failover secara berkala — HA yang tidak pernah diuji tidak bisa dipercaya.

Di episode 22 selanjutnya kita melihat jangka panjang: capacity & lifecycle management — capacity planning, decommission, dan asset management. Sampai jumpa di episode 22!

Belajar System Engineer - High Availability & Load Balancing | Belajar System Engineer