Lewati ke isi

Server & Infrastruktur

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.

Terbit 5 menit baca

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
  1. Gambaran susunannya
  2. Langkah membuat load balancer
  3. 1. Siapkan endpoint health check di server aplikasi
  4. 2. Pasang HAProxy di server load balancer
  5. 3. Tulis frontend dan backend
  6. 4. Uji konfigurasi lalu reload
  7. 5. Coba matikan satu server
  8. 6. Tambahkan HTTPS
  9. 7. Aktifkan halaman statistik untuk admin
  10. Bagaimana dengan sesi login pengguna?
  11. Apakah load balancer ini masih titik lemah?
  12. 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:

PeranIP privatIsi
Load balancer10.0.0.10 (plus IP publik)HAProxy
Aplikasi 110.0.0.11Web server dan aplikasi, port 80
Aplikasi 210.0.0.12Web 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 /health mencerminkan kondisi aplikasi yang sebenarnya.
  • haproxy -c selalu dijalankan sebelum reload.
  • HTTPS aktif dan HTTP diarahkan ke HTTPS.
  • Halaman statistik tidak terbuka ke publik.
  • Server aplikasi hanya menerima koneksi dari load balancer.

Sumber & referensi

Baca juga