Cara Membuat Load Balancer Sederhana dengan HAProxy
Langkah membuat load balancer HAProxy di Ubuntu 24.04 untuk dua server aplikasi, lengkap dengan health check, HTTPS, dan halaman statistik.
Jawaban singkat
Pasang HAProxy di satu server di depan dua atau lebih server aplikasi, definisikan frontend yang menerima trafik dan backend berisi daftar server dengan health check, lalu uji konfigurasi dengan haproxy -c sebelum reload. Tambahkan HTTPS dan halaman statistik setelah dasar berjalan.
Daftar isi
- Gambaran susunannya
- Langkah membuat load balancer
- 1. Siapkan endpoint health check di server aplikasi
- 2. Pasang HAProxy di server load balancer
- 3. Tulis frontend dan backend
- 4. Uji konfigurasi lalu reload
- 5. Coba matikan satu server
- 6. Tambahkan HTTPS
- 7. Aktifkan halaman statistik untuk admin
- Bagaimana dengan sesi login pengguna?
- Apakah load balancer ini masih titik lemah?
- Pertanyaan yang sering diajukan
Website-mu mulai berjalan di dua server aplikasi, lalu bingung bagaimana membagi pengunjung ke keduanya dan memindahkan trafik otomatis saat satu server mati? Jawabannya adalah load balancer, dan HAProxy adalah salah satu yang paling ringan dan teruji untuk tugas ini.
Panduan berikut membuat load balancer HTTP sederhana di Ubuntu 24.04. Per 6 November 2026, repositori Ubuntu 24.04 menyediakan HAProxy seri 2.8 (LTS), dan konfigurasi di bawah berlaku untuk seri 2.8 maupun yang lebih baru. Bila konsep load balancer masih baru bagimu, baca dulu apa itu load balancer.
Gambaran susunannya
Contoh ini memakai tiga server di jaringan privat yang sama:
| Peran | IP privat | Isi |
|---|---|---|
| Load balancer | 10.0.0.10 (plus IP publik) | HAProxy |
| Aplikasi 1 | 10.0.0.11 | Web server dan aplikasi, port 80 |
| Aplikasi 2 | 10.0.0.12 | Web server dan aplikasi, port 80 |
Domain website menunjuk ke IP publik load balancer. Server aplikasi tidak perlu dibuka ke internet, cukup bisa dijangkau load balancer lewat jaringan privat.
Langkah membuat load balancer
1. Siapkan endpoint health check di server aplikasi
HAProxy perlu cara untuk tahu apakah sebuah server sehat. Buat halaman ringan, misalnya /health, yang mengembalikan status 200 bila aplikasi dan koneksinya ke database baik. Untuk awal, berkas statis berisi teks "ok" sudah cukup. Pastikan kedua server aplikasi menyajikan konten dan sesi yang sama (database bersama, berkas unggahan di penyimpanan bersama), karena pengunjung bisa berpindah server.
2. Pasang HAProxy di server load balancer
sudo apt update
sudo apt install haproxy
haproxy -v
Layanan langsung berjalan dengan konfigurasi bawaan di /etc/haproxy/haproxy.cfg. Bagian global dan defaults bawaan Ubuntu sudah berisi pengaturan log dan timeout yang masuk akal, jadi biarkan, lalu tambahkan bagian berikut di bawahnya.
3. Tulis frontend dan backend
frontend web
bind *:80
mode http
option forwardfor
default_backend app
backend app
mode http
balance roundrobin
option httpchk
http-check send meth GET uri /health
http-check expect status 200
server app1 10.0.0.11:80 check
server app2 10.0.0.12:80 check
frontend menerima koneksi di port 80. option forwardfor menambahkan header X-Forwarded-For agar aplikasi tahu IP asli pengunjung. backend berisi daftar server dan algoritma pembagian. roundrobin membagi bergiliran; untuk koneksi yang lama dan tidak merata, leastconn sering lebih cocok. Kata check mengaktifkan health check, sehingga server yang gagal otomatis dikeluarkan dari giliran sampai pulih.
4. Uji konfigurasi lalu reload
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
Jangan reload sebelum perintah -c menyatakan konfigurasi valid. Reload memakai konfigurasi baru tanpa memutus koneksi yang sedang berjalan. Biasakan juga menyimpan salinan konfigurasi lama sebelum mengubahnya, misalnya dengan sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak, supaya kamu bisa kembali ke kondisi sebelumnya dalam hitungan detik bila ada perilaku yang tidak terduga.
5. Coba matikan satu server
Buka website beberapa kali, lalu hentikan web server di app1. Dalam beberapa detik HAProxy menandai server itu turun dan semua permintaan diarahkan ke app2. Log di /var/log/haproxy.log atau journalctl -u haproxy akan mencatat perubahan status ini.
6. Tambahkan HTTPS
Gabungkan sertifikat dan kunci privat menjadi satu berkas PEM, misalnya /etc/haproxy/certs/domain.pem dengan izin hanya bisa dibaca root, lalu ubah frontend:
frontend web
bind *:80
bind *:443 ssl crt /etc/haproxy/certs/domain.pem
mode http
http-request redirect scheme https unless { ssl_fc }
option forwardfor
default_backend app
HTTPS berhenti di HAProxy, dan lalu lintas ke server aplikasi lewat jaringan privat memakai HTTP. Bila jaringan antar server tidak sepenuhnya kamu kendalikan, enkripsi juga koneksi ke backend.
7. Aktifkan halaman statistik untuk admin
listen stats
bind 127.0.0.1:8404
mode http
stats enable
stats uri /stats
stats refresh 10s
Halaman ini menampilkan status setiap server, jumlah koneksi, dan error. Karena hanya mendengarkan di 127.0.0.1, buka lewat SSH tunnel (ssh -L 8404:127.0.0.1:8404 user@load-balancer), jangan dibuka ke publik.
Bagaimana dengan sesi login pengguna?
Bila aplikasi menyimpan sesi di memori masing-masing server, pengguna bisa tiba-tiba ter-logout saat dipindah ke server lain. Solusi terbaik adalah menyimpan sesi di tempat bersama seperti Redis atau database. Bila belum memungkinkan, aktifkan sticky session dengan cookie:
backend app
cookie SERVERID insert indirect nocache
server app1 10.0.0.11:80 check cookie app1
server app2 10.0.0.12:80 check cookie app2
Apakah load balancer ini masih titik lemah?
Ya. Dengan satu server HAProxy, server aplikasi sudah redundan tapi load balancer belum. Langkah lanjutnya memasang dua HAProxy dengan IP mengambang (misalnya memakai keepalived dan VRRP) atau memakai load balancer terkelola dari penyedia. Untuk banyak usaha kecil, satu HAProxy yang dipantau dan bisa dibangun ulang cepat sudah merupakan peningkatan besar. Jangan lupa batasi port di server aplikasi agar hanya menerima koneksi dari load balancer, misalnya dengan UFW di Ubuntu 24.04.
Pertanyaan yang sering diajukan
Apa bedanya HAProxy dengan Nginx sebagai load balancer?
Keduanya bisa membagi beban HTTP. HAProxy fokus pada load balancing dan proxy dengan health check dan statistik yang lengkap. Nginx juga web server yang bisa menyajikan berkas statis. Pilih yang tim kamu lebih kuasai.
Apakah HAProxy bisa membagi beban selain HTTP?
Bisa. Dengan mode tcp, HAProxy bisa membagi koneksi TCP apa pun, misalnya ke replika database atau server mail, tanpa membaca isi protokolnya.
Berapa spesifikasi server untuk HAProxy?
HAProxy sangat ringan. Untuk website kecil sampai menengah, VPS dengan 1 sampai 2 vCPU biasanya cukup. Bila memakai HTTPS dengan trafik tinggi, CPU lebih berpengaruh karena enkripsi dilakukan di sini.
Bagaimana memperbarui aplikasi tanpa downtime?
Tandai satu server sebagai maintenance (lewat halaman statistik dengan akses admin atau runtime API), perbarui, kembalikan, lalu ulangi untuk server berikutnya.
Checklist sebelum dipakai produksi:
- Endpoint
/healthmencerminkan kondisi aplikasi yang sebenarnya. haproxy -cselalu dijalankan sebelum reload.- HTTPS aktif dan HTTP diarahkan ke HTTPS.
- Halaman statistik tidak terbuka ke publik.
- Server aplikasi hanya menerima koneksi dari load balancer.


