Beyond Load Balancing: Arsitektur High Availability yang Sebenarnya (Part 3)
9 min read

Setelah berhasil melakukan pengujian di artikel sebelumnya, kita sekarang memiliki sistem yang mampu menangani kegagalan di level aplikasi. Namun, mari kita jujur: jika satu-satunya server HAProxy kita (192.168.87.6) mengalami kendala hardware atau crash, maka seluruh redundansi di level backend tadi menjadi tidak berarti—sistem akan tetap mati total.
Inilah yang disebut sebagai Single Point of Failure. Untuk mengatasinya, kita akan melangkah ke tahap yang lebih tinggi: High Availability di level Load Balancer.

Apa yang Akan Kita Bangun?
Pada tahap ini, kita akan menyiapkan server HAProxy kedua (192.168.87.7) yang akan bertindak sebagai cadangan (Standby). Keduanya akan diikat menggunakan protokol VRRP (Virtual Router Redundancy Protocol) melalui layanan bernama Keepalived.
Hasil akhirnya adalah sebuah Virtual IP (VIP) atau Floating IP. User tidak lagi mengakses IP fisik server (192.168.87.6 atau 192.168.87.7), melainkan mengakses satu IP "keramat" yang akan selalu aktif selama salah satu dari kedua Load Balancer tersebut hidup. Jika Load Balancer utama mati, IP tersebut akan "berpindah" secara otomatis ke server cadangan dalam hitungan detik.
VM 2 Load Balancer Setup
Install HAProxy
Setelah berhasil menguji node pertama, langkah selanjutnya adalah menyiapkan VM kedua dengan alamat IP 192.168.87.7. VM ini akan berperan sebagai node cadangan yang siap mengambil alih trafik jika node utama bermasalah.
Agar performa dan fiturnya konsisten, kita akan menginstal versi HAProxy yang sama dengan node sebelumnya. Silakan SSH ke VM kedua dan jalankan rangkaian perintah berikut:
sudo apt update
sudo apt-get install --no-install-recommends software-properties-common
sudo add-apt-repository ppa:vbernat/haproxy-3.2
sudo apt-get install haproxy=3.2.\*
Pastikan versi yang terinstal sudah sesuai dengan menjalankan perintah:
haproxy -v

untuk memastikan HAProxy sudah berjalan dengan baik kita check dengan perintah
sudo systemctl status haproxy
Enable Dashboard
Modifikasi Konfigurasi HAProxy Buka file /etc/haproxy/haproxy.cfg dan tambahkan blok konfigurasi berikut untuk menentukan pada port dan alamat mana dashboard bisa diakses:
frontend stats
mode http
bind :8404
stats enable
stats refresh 10s
stats uri /stats
stats show-modules
Catatan: Di sini kita menggunakan port
8404. Pastikan port ini terbuka dan tidak terpakai oleh layanan lain.
Terapkan Perubahan Agar konfigurasi baru terbaca oleh sistem, lakukan restart pada layanan HAProxy dengan perintah berikut:
sudo systemctl restart haproxy.service
Akses Dashboard Sekarang, kita bisa melihat kondisi infrastruktur secara langsung melalui browser dengan mengakses alamat: http://192.168.87.7:8404/stats

Load Balancer Config
Setelah dashboard aktif, langkah selanjutnya adalah inti dari skenario kita: mengatur pembagian trafik. Di sini, HAProxy akan bertindak sebagai gerbang utama (port 80) yang akan meneruskan permintaan user ke dua server aplikasi (backend-1 dan backend-2) secara bergantian.
Silakan buka kembali file /etc/haproxy/haproxy.cfg dan tambahkan blok konfigurasi berikut di bagian bawah:
frontend docapi_front
bind :80
default_backend docapi_backend
backend docapi_backend
balance roundrobin
option httpchk GET /api/v1/health
# Definisi server aplikasi dengan parameter health check yang presisi
server backend-1 192.168.87.12:8080 check inter 5s fall 3 rise 2
server backend-2 192.168.87.13:8080 check inter 5s fall 3 rise 2
Agar sistem benar-benar High Availability, kita tidak hanya sekadar mendaftarkan IP, tapi juga mengatur bagaimana HAProxy memantau "kesehatan" server tersebut:
balance roundrobin: Trafik akan dibagi rata secara bergantian ke setiap server.option httpchk: HAProxy akan melakukan pengecekan ke endpoint/api/v1/health. Jika endpoint ini merespon dengan status 200 OK, maka server dianggap sehat.inter 5s: Pengecekan dilakukan setiap 5 detik sekali.fall 3: Jika server gagal merespon sebanyak 3 kali berturut-turut, HAProxy akan menandai server tersebut sebagai DOWN dan berhenti mengirim trafik ke sana.rise 2: Jika server yang sebelumnya mati kembali sehat dan berhasil merespon sebanyak 2 kali berturut-turut, HAProxy akan memasukkannya kembali ke dalam antrean trafik (UP).
Terakhir, simpan file tersebut dan jalankan perintah berikut untuk menerapkan konfigurasi baru:
sudo systemctl restart haproxy.service
Keepalived
Setelah memiliki dua node HAProxy yang identik, kita membutuhkan mekanisme untuk mengatur siapa yang menjadi "pemimpin" (Active) dan siapa yang menjadi "cadangan" (Standby). Di sinilah Keepalived berperan.
Keepalived adalah layanan berbasis Linux yang dirancang untuk menyediakan fitur High Availability melalui protokol VRRP (Virtual Router Redundancy Protocol). Tugas utamanya adalah mengelola Virtual IP (VIP)—sebuah alamat IP "melayang" yang akan berpindah secara otomatis dari node utama ke node cadangan jika terdeteksi adanya kegagalan sistem. Dengan Keepalived, proses failover terjadi secara instan tanpa perlu campur tangan manual.
Install KeepAlived
Lakukan installasi keepalived dikedua VM Load Balancer (HAProxy-1 dan HAProxy-2) dengan perintah berikut.
sudo apt update
sudo apt install keepalived -y
Setelah proses instalasi selesai, kita perlu memastikan bahwa layanan Keepalived langsung berjalan dan otomatis aktif setiap kali server melakukan reboot (booting). Jalankan perintah berikut:
sudo systemctl enable keepalived --now
Untuk memastikan layanan sudah berjalan dengan benar di latar belakang, kamu bisa mengecek statusnya menggunakan perintah:
sudo systemctl status keepalived.service
Keepalived Configuration
Sekarang kita masuk ke tahap paling krusial, yaitu menentukan peran masing-masing node HAProxy. Kita akan membuat file konfigurasi /etc/keepalived/keepalived.conf pada kedua VM.
Meskipun isinya terlihat mirip, ada perbedaan parameter kunci antara HAProxy-1 (Master) dan HAProxy-2 (Backup) yang menentukan siapa yang berhak memegang Virtual IP pertama kali.
1. Konfigurasi pada HAProxy-1 (Node Master)
Node ini akan menjadi pemegang utama Virtual IP selama layanannya berjalan normal. Buat filenya dengan perintah sudo nano /etc/keepalived/keepalived.conf dan masukkan kode berikut:
vrrp_script chk_haproxy {
# Mengecek apakah proses haproxy sedang berjalan
script "pkill -0 haproxy"
# Cek setiap 2 detik
interval 2
# Jika gagal 2x, anggap service mati
fall 2
# Jika sukses 1x, anggap service hidup kembali
rise 1
# Kurangi prioritas sebanyak 20 jika haproxy mati
weight -20
}
vrrp_instance VI_1 {
# Peran utama sebagai Master
state MASTER
# SESUAIKAN dengan nama interface jaringan VM kamu
interface enp0s8
# Harus sama di kedua node
virtual_router_id 51
# Prioritas lebih tinggi dari Backup
priority 100
# Interval pengiriman sinyal 'Heartbeat' (1 detik)
advert_int 1
authentication {
auth_type PASS
# Password sinkronisasi antar node
auth_pass 1111
}
virtual_ipaddress {
# Virtual IP (VIP) yang akan diakses user
192.168.87.10
}
track_script {
# Hubungkan dengan script monitoring di atas
chk_haproxy
}
}
2. Konfigurasi pada HAProxy-2 (Node Backup)
Node ini akan tetap dalam posisi standby dan hanya akan mengambil alih Virtual IP jika node Master mengalami gangguan. Gunakan konfigurasi yang sama, namun ubah bagian yang ditandai:
vrrp_script chk_haproxy {
# Mengecek apakah proses haproxy sedang berjalan
script "pkill -0 haproxy"
# Cek setiap 2 detik
interval 2
# Jika gagal 2x, anggap service mati
fall 2
# Jika sukses 1x, anggap service hidup kembali
rise 1
# Kurangi prioritas sebanyak 20 jika haproxy mati
weight -20
}
vrrp_instance VI_1 {
# Peran sebagai cadangan (Backup)
state BACKUP
# SESUAIKAN dengan nama interface jaringan VM kamu
interface enp0s8
# Harus sama di kedua node
virtual_router_id 51
# Prioritas lebih rendah (90) dibanding Master (100)
priority 90
# Interval pengiriman sinyal 'Heartbeat' (1 detik)
advert_int 1
authentication {
auth_type PASS
# Password sinkronisasi antar node
auth_pass 1111
}
virtual_ipaddress {
# Virtual IP (VIP) yang akan diakses user
192.168.87.10
}
track_script {
# Hubungkan dengan script monitoring di atas
chk_haproxy
}
}
3. Terapkan Konfigurasi
Setelah file tersimpan di kedua VM, segera lakukan restart pada layanan Keepalived agar pengaturan baru tersebut aktif:
sudo systemctl restart keepalived.service
Pengujian Akhir: Uji Ketangguhan Infrastruktur (High Availability Test)
Setelah seluruh komponen terpasang, saatnya kita melakukan pengujian menyeluruh. Pada tahap ini, kita tidak lagi mengakses IP fisik server, melainkan menggunakan Virtual IP (VIP) yang telah kita konfigurasi. Silakan buka browser dan akses:
http://192.168.87.10/swagger/index.html
Skenario 1: Kegagalan di Level Aplikasi (Backend Failure)
Matikan salah satu server aplikasi (Backend 1 atau Backend 2).
Cara Cek: Pantau melalui dashboard stats di
http://192.168.87.10:8404/stats.Hasil: Kamu akan melihat salah satu baris berubah menjadi merah. Namun, saat kamu me-refresh halaman Swagger, aplikasi tetap berjalan normal karena HAProxy mengalihkan trafik ke node yang masih sehat.


Skenario 2: Kegagalan di Level Load Balancer (Failover Test)
Ini adalah pengujian paling krusial. Kita akan melihat bagaimana Virtual IP berpindah antar server Load Balancer.
Buka terminal di VM 2 (Backup) dan jalankan perintah untuk memantau log secara real-time:
sudo journalctl -u keepalived -fSaat ini, status VM 2 seharusnya masih berada pada BACKUP STATE.

Sekarang, matikan VM 1 (Master) atau hentikan layanan HAProxy-nya.
Perhatikan Log di VM 2: Kamu akan melihat log yang menyatakan bahwa VM 2 mendeteksi kegagalan Master dan segera berubah status menjadi MASTER STATE.

Uji Akses: Akses kembali
http://192.168.87.10/swagger/index.html.

Hasil Akhir: Meskipun Load Balancer utama mati total, aplikasi tetap dapat diakses seolah-olah tidak terjadi apa-apa. Virtual IP telah berpindah ke VM 2 dalam hitungan detik. Inilah arsitektur High Availability yang Sebenarnya!
Kesimpulan
Membangun infrastruktur yang High Availability (HA) bukan berarti kita menciptakan sistem yang mustahil untuk rusak. Sebaliknya, HA adalah pengakuan bahwa kegagalan—baik itu hardware failure, network issue, maupun human error—adalah hal yang pasti akan terjadi suatu saat nanti.
Melalui seri artikel ini, kita telah belajar bahwa arsitektur yang tangguh dibangun di atas tiga pilar utama:
Redundansi di Setiap Layer: Memastikan tidak ada satu pun komponen yang berdiri sendiri tanpa cadangan, mulai dari Load Balancer hingga server aplikasi.
Mekanisme Failover Otomatis: Menggunakan protokol seperti VRRP melalui Keepalived untuk memastikan perpindahan trafik terjadi dalam hitungan detik tanpa perlu campur tangan manual.
Pemisahan Data & State: Menjaga agar server aplikasi tetap stateless dengan memisahkan penyimpanan data ke PostgreSQL dan Rustfs, sehingga konsistensi data tetap terjaga meskipun node aplikasi berpindah-pindah.
Dengan mengimplementasikan Beyond Load Balancing, kita telah berhasil mengeliminasi Single Point of Failure (SPOF). Kini, kamu bisa tidur lebih nyenyak karena tahu bahwa jika salah satu server atau load balancer kamu "pingsan" di jam 3 pagi, sistem kamu cukup cerdas untuk menyembuhkan dirinya sendiri dan tetap melayani pengguna dengan normal.
Infrastruktur yang baik adalah infrastruktur yang tidak terlihat oleh pengguna karena ia selalu ada dan selalu bisa diandalkan.


