Belajar HAProxy - Konsep Dasar & Arsitektur Utama
Episode 2 of 23

Belajar HAProxy - Konsep Dasar & Arsitektur Utama

Episode ini membedah anatomi HAProxy: lima tipe section konfigurasi (global, defaults, frontend, backend, listen), alur request di dalam proses yang event-driven, serta perbedaan mode TCP dan HTTP beserta opsi multiprocess dan multithread.

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

Pendahuluan

Sekarang kalian siap melihat isi otak HAProxy: cara dia mengorganisasi konfigurasi dan memproses trafik. Episode 2 membedah arsitektur dari dua sudut: struktur file konfigurasi dan model eksekusi internal.

Kalian akan mengenal lima tipe section — global, defaults, frontend, backend, dan listen — lalu mengikuti alur sebuah request dari klien sampai jawaban kembali. Kita juga membedah mode TCP versus HTTP serta pilihan multiprocess dan multithread yang memengaruhi cara HAProxy memakai CPU.

Struktur Dasar Konfigurasi

Lima Tipe Section

Semua konfigurasi HAProxy ditulis dalam satu file teks, biasanya /etc/haproxy/haproxy.cfg. File ini terdiri dari beberapa section:

  • global: pengaturan proses, seperti jumlah proses, direktori runtime, dan log. Tidak berhubungan langsung dengan trafik.
  • defaults: nilai default yang diwariskan ke frontend, backend, dan listen di bawahnya.
  • frontend: titik masuk trafik publik, tempat binding port dan ACL.
  • backend: kelompok server yang melayani request.
  • listen: gabungan frontend dan backend dalam satu blok, cocok untuk layanan kecil.

Contoh konfigurasi minimal yang memadukan semuanya:

Struktur haproxy.cfg minimal
global
    log /dev/log local0
    maxconn 4096
 
defaults
    mode http
    timeout connect 5s
    timeout client 50s
    timeout server 50s
 
frontend web_front
    bind *:80
    use_backend web_back
 
backend web_back
    server web1 127.0.0.1:8080 check
    server web2 127.0.0.1:8081 check

Perhatikan bahwa section dimulai dengan kata kunci di awal baris, dan direktif di dalamnya diindentasi. Bahasa konfigurasi ini tidak case-sensitive untuk kata kunci, tapi penamaan label harus konsisten.

Mengapa Urutan dan Hierarki Penting

Direktif di defaults diwariskan ke semua frontend, backend, dan listen kecuali ditimpa. Jadi, mode http di defaults membuat semua backend memakai mode HTTP secara otomatis. Kebiasaan baik: selalu buat defaults yang masuk akal agar konfigurasi pendek dan mudah dipahami.

Alur Request di Dalam HAProxy

Dari Koneksi ke Respon

Saat sebuah request tiba, HAProxy menjalankan alur ini:

  1. Accept: proses menangkap koneksi baru pada port yang di-bind di frontend.
  2. Routing: HAProxy mencocokkan request dengan ACL dan aturan use_backend.
  3. Forward: koneksi diteruskan ke server backend yang dipilih.
  4. Track: health check dan stick table terus memantau kondisi server.
  5. Respond: respon server dikembalikan ke klien, dengan kemungkinan modifikasi header.
Validasi sintaks konfigurasi
haproxy -c -f /etc/haproxy/haproxy.cfg

Menjalankan haproxy -c -f /etc/haproxy/haproxy.cfg memeriksa sintaks tanpa menjalankan proses. Ini langkah wajib sebelum reload konfigurasi apa pun.

Model Event-Driven

HAProxy tidak membuat satu thread per koneksi. Dia memakai event loop tunggal yang menangani ribuan descriptor secara asinkron. Konsekuensinya: penggunaan memori rendah dan tidak ada pemborosan CPU untuk context switching. Ini rahasia utama kemampuannya menangani trafik tinggi di server dengan spesifikasi kecil.

Mode Operasional: TCP vs HTTP

Mode TCP

Dengan mode tcp, HAProxy hanya meneruskan byte tanpa membaca isinya. Cocok untuk database, Redis, protokol lama, dan koneksi yang tidak boleh diinspeksi. Overhead paling rendah, dan keputusan routing hanya bisa memakai metadata jaringan seperti source IP atau SNI.

Mode HTTP

Dengan mode http, HAProxy memahami protokol HTTP: bisa membaca method, path, header, memodifikasinya, melakukan persistence, dan menjalankan ACL berbasis isi request. Ini mode default untuk web. Konsekuensinya: HAProxy perlu mem-buffer header dan menambah sedikit latensi.

Memilih mode secara eksplisit
frontend web_front
    bind *:80
    mode http
    option httplog
 
backend db_back
    mode tcp
    server db1 10.0.0.10:5432 check

Pilihan mode tcp atau mode http paling baik dinyatakan eksplisit, jangan hanya mengandalkan defaults.

Multiprocess dan Multithread

Memahami Pembagian Kerja

HAProxy modern mendukung dua model penambahan kapasitas:

  • nbproc: menjalankan beberapa proses terpisah, masing-masing memegang listener sendiri. Kini jarang dipakai karena sudah digantikan thread.
  • nbthread: menjalankan beberapa thread dalam satu proses. Cara modern memanfaatkan banyak CPU dengan cara paling sederhana.
Mengatur proses dan thread
global
    maxconn 50000
    nbthread 4

Direktif nbthread 4 meminta empat thread. Mulailah dengan nilai sesuai jumlah core; episode 15 akan membahas tuning yang lebih dalam.

Pengaruh Terhadap Stick Table

Ingat: dengan beberapa thread atau proses, stick table tetap terbagi secara efisien. Namun keputusan routing berbasis state (misalnya rate limiting di episode 10) harus dipahami dalam konteks ini. Untuk latihan, satu proses dengan satu thread sudah cukup.

Penutup

Episode 2 memberi kalian kerangka untuk membaca konfigurasi HAProxy apa pun: kenali section-nya, pahami alur request, dan tentukan mode yang tepat. Dengan ini, kalian tidak akan bingung saat melihat file konfigurasi produksi.

Inti yang harus dibawa pulang:

  • Konfigurasi tersusun atas global, defaults, frontend, backend, dan listen.
  • defaults mewariskan nilai ke section lain kecuali ditimpa.
  • Alur request: accept, routing, forward, track, respond.
  • Model event-driven membuat HAProxy hemat sumber daya.
  • mode tcp untuk protokol raw; mode http untuk web.
  • Gunakan haproxy -c sebelum setiap reload.

Di episode 3 selanjutnya kita masuk ke hands-on pertama: instalasi & hello HAProxy — langkah instalasi lengkap di Linux, konfigurasi minimal untuk HTTP forwarding, dan verifikasi service dengan log dasar. Semua yang kalian pelajari di episode 0-2 akan langsung dipakai.