Episode ini membuka kontrol dinamis HAProxy: mengubah konfigurasi saat runtime lewat stats socket, mengatur weight dan draining server tanpa restart, serta memakai stick table untuk rate limiting, autentikasi, dan keamanan.

Restart HAProxy mengganggu koneksi yang sedang berjalan. Kabar baiknya, sebagian besar perubahan bisa dilakukan tanpa restart melalui runtime API — sekumpulan perintah yang dikirim lewat stats socket.
Episode 9 membahas tiga kekuatan dinamis tersebut: konfigurasi runtime, manajemen server seperti weight dan draining, serta stick table yang menjadi fondasi rate limiting dan proteksi. Di akhir episode, kalian bisa mengelola HAProxy yang sedang melayani trafik nyata tanpa rasa takut.
Runtime API butuh stats socket dengan level admin:
global
stats socket /run/haproxy.sock mode 660 level admin
stats timeout 30sDirektif stats socket /run/haproxy.sock mode 660 level admin membuat socket dengan akses admin. Pastikan owner dan permission socket benar agar hanya proses yang berwenang yang bisa memakainya.
Semua perintah dikirim sebagai teks melalui socket:
echo "show info" | socat stdio /run/haproxy.sock
echo "show servers state" | socat stdio /run/haproxy.sock
echo "help" | socat stdio /run/haproxy.sockecho "show info" | socat stdio /run/haproxy.sock menampilkan informasi proses, dan echo "help" | socat stdio /run/haproxy.sock mencetak daftar perintah yang didukung. Biasakan mengecek help dulu setiap kali versi HAProxy berubah.
Bobot server bisa disesuaikan tanpa reload. Ini berguna saat kalian ingin menarik trafik dari satu server secara bertahap:
echo "set weight web_back/web1 10" | socat stdio /run/haproxy.sock
echo "set weight web_back/web2 50" | socat stdio /run/haproxy.sockPerintah echo "set weight web_back/web1 10" | socat stdio /run/haproxy.sock menurunkan bobot web1 menjadi 10. Trafik perlahan bergeser ke web2 tanpa memutus koneksi yang ada.
Untuk membawa server keluar dari rotasi secara mulus, pakai mode DRAIN lalu MAINT:
echo "set server web_back/web1 state drain" | socat stdio /run/haproxy.sock
echo "set server web_back/web1 state maint" | socat stdio /run/haproxy.sockset server web_back/web1 state drain menghentikan trafik baru ke server tapi tetap melayani koneksi lama. Setelah aman, state maint mematikan server sepenuhnya untuk maintenance.
Verifikasi state server setelah perintah runtime:
echo "show servers state web_back" | socat stdio /run/haproxy.sockecho "show servers state web_back" | socat stdio /run/haproxy.sock menampilkan state setiap server dalam format CSV yang mudah diparsing oleh skrip.
Stick table adalah penyimpanan key-value yang cepat di memori, kunci utamanya biasanya IP atau sesi:
frontend web_front
bind *:80
mode http
stick-table type ip size 100k expire 30s \
store http_req_rate(10s)
http-request track-sc0 src
default_backend web_backDirektif stick-table type ip size 100k expire 30s store http_req_rate(10s) membuat tabel berisi rate request per 10 detik untuk setiap IP, dengan 100.000 entri maksimum. http-request track-sc0 src mengaitkan IP klien ke stick table.
Isi stick table bisa dilihat lewat runtime API:
echo "show table web_front" | socat stdio /run/haproxy.sockecho "show table web_front" | socat stdio /run/haproxy.sock menampilkan setiap entri beserta nilai rate request. Dari sini kalian bisa melihat IP mana yang paling banyak meminta — bahan dasar deteksi anomali.
Stick table juga menyediakan counter serbaguna gpc0 yang bisa dipakai untuk tanda atau larangan:
backend api_back
stick-table type ip size 100k expire 10m \
store gpc0_rate(10m)
http-request track-sc0 src
http-request deny if { sc0_inc_gpc0(api_back) gt 0 }Baris http-request deny if { sc0_inc_gpc0(api_back) gt 0 } menaikkan counter dan menolak request begitu counter lebih besar dari nol. Ini pola dasar untuk blocklist sementara yang dibahas mendalam di episode 10.
Episode 9 mengubah cara kalian mengoperasikan HAProxy: dari statis menjadi dinamis. Runtime API untuk perubahan tanpa henti, manajemen server yang mulus, dan stick table sebagai memori operasional untuk keamanan.
Inti yang harus dibawa pulang:
set weight dan set server state mengelola server tanpa reload.gpc0 menjadi fondasi larangan dan rate limiting.Di episode 10 selanjutnya kita akan membangun rate limiting & protection di atas stick table — membatasi koneksi dan request rate, memitigasi brute force, serta menolak request dengan aturan deny.