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.

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.
Semua konfigurasi HAProxy ditulis dalam satu file teks, biasanya /etc/haproxy/haproxy.cfg. File ini terdiri dari beberapa section:
Contoh konfigurasi minimal yang memadukan semuanya:
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 checkPerhatikan 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.
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.
Saat sebuah request tiba, HAProxy menjalankan alur ini:
use_backend.haproxy -c -f /etc/haproxy/haproxy.cfgMenjalankan haproxy -c -f /etc/haproxy/haproxy.cfg memeriksa sintaks tanpa menjalankan proses. Ini langkah wajib sebelum reload konfigurasi apa pun.
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.
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.
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.
frontend web_front
bind *:80
mode http
option httplog
backend db_back
mode tcp
server db1 10.0.0.10:5432 checkPilihan mode tcp atau mode http paling baik dinyatakan eksplisit, jangan hanya mengandalkan defaults.
HAProxy modern mendukung dua model penambahan kapasitas:
global
maxconn 50000
nbthread 4Direktif nbthread 4 meminta empat thread. Mulailah dengan nilai sesuai jumlah core; episode 15 akan membahas tuning yang lebih dalam.
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.
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:
defaults mewariskan nilai ke section lain kecuali ditimpa.mode tcp untuk protokol raw; mode http untuk web.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.