HAProxy adalah singkatan dari High Availability Proxy, perangkat lunak GRATIS berfungsi sebagai penyeimbang traffic untuk aplikasi / Website yang berbasis HTTP/S atau TCP.
Sistem Haproxy bekerja membagi traffic pengunjung atau request masuk ke beberapa server backend (node1. node2,node3) yang tersedia. Sehingga beban server terdistribusi secara merata diantara server-server tersebut jika kondisi node hidup semua.
Manfaat utama jadi load balancer HAProxy mempertahankan situs tetap Online, tidak Down karena masalah teknik VPS bermasalah (maintenance), jadi jika ada 1 node Down maka node lainya akan menggantikan dikontrol oleh sistem load balancer.
Node atau server backend bisa dipilih dari beberapa lokasi vps data center semisal indonesia, singapore dan tokyo, tujuan menjaga kemungkinan masalah pada data center Down namun website tetap ONLINE.
Table of Contents
Algoritma Load balancer HAProxy
Algortima atau Teknik load balancing yang sering digunakan adalah roundrobin dan least connection.
RoundRobin adalah cara yang menganggap bahwa semua beban server sama, jadi setiap server yang ada di akses secara bergantian dan berurutan, sedangkan Least Connection hanya mengalihkan beban ke server yang dianggap kosong atau trafficnya rendah.
Setingan haproxy terdapat 2 bagian (side) yakni frontend dan backend. koneksi yang datang dari user akan di terima oleh bagian frontend untuk di olah/filter sesuai rule frontend, jika lolos maka paket di lanjutkan ke backend untuk di oleh/filter sesuai rule backend selanjutnya akan di putuskan untuk kirim ke node tertentu sesuai strategi yang di pakai backend. Jadi frontend hanya mengurusi client/users dan backend mengurusi node server.
Keunggulan HAProxy
Haproxy hanya menggunakan 15% dari processing time penggunaan CPU dengan HTTP close mode dan sekitar 30% jika menggunakan HTTP keep-alive mode. Itu artinya secara global haproxy mempunyai impact yang besar dalam performa namun kecil dalam penggunaan resource.
Fitur HaProxy
- Proxying : menjembatani koneksi dari client dan server.
- SSL : haproxy ssl support secure sockets layer (https)
- Monitoring : termonitor secara terus menerus dan tercatat
- High availibility : walaupun 1 atau beberapa web server mati masih tetap terkoneksi
- Load balancing : beban trafik yang terbagi sama rata atau sama rasa
- Stickiness : aliran data/paket yang melekat pada aturan/rule yang di setting
- Sampling and converting information : pengelompokan dan rekap data dari paket yang lewat
- Map : membuat simple rule untuk setting frontend dan backend
- ACLs dan Conditions :
- haproxy acl mengatur trafic dengan rule dan condition
- Stick-tables
- Formatted strings
- HTTP rewriting and redirection
- Server protection
- Logging : terdapat haproxy log file untuk maintenance
- Statistics : data statistic untuk monitoring trafic
Kelemahan Load balancer
Jika VPS tempat HAProxy Down semua Node, database tidak akan bekerja atau walaupun status UP, Solusi memilih penyedia cloud hosting Uptime 99.99% dan spek bagus untuk HAproxy.
Biaya Server lebih mahal karena harus sewa banyak VPS, setidanya 4-7 node backend (web server + database) dalam membangun 1 server + load balancer.
Desain Jaringan Load balancer HAProxy
- 1 vps ubuntu sebagai Proxy load balancer
- 2-3 vps Node -> server backend linux (install web server : apache / nginx)
- 2-3 vps node -> server database mysql, mariaDb.
Arsitektur pembagian IP & VPS:
- IP Public : 20.81.9.000 (Install HAProxy)
- 2 IP Public : Node_app 1, Node_app 2
- 2 IP Public : Node_db 1, Node_db 2
Spesifikasi minimal VPS : vCPU 2 core, RAM 2-4 Gb untuk masing2 cloud node & HaProxy spek bisa lebih tinggi, bisa upgrade berdasarkan kebutuahan traffic.
Install HAProxy VPS Ubuntu
Ubuntu server versi 18.xx – 22.xx saat ini paling stabil, masuk SSH:
sudo apt update sudo apt install haproxy
Seting HAProxy
Konfigurasi HAProxy Auto On jika terjadi restart server:
nano /etc/default/haproxy
Tambakan kode:
ENABLED=1
Perintah apa saja yang dapat dilakukan terhadap service haproxy dapat dilakukan dengan perintah berikut.
sudo /etc/init.d/haproxy {start|stop|reload|restart|status}
Backup file konfiguras:
cp -r /etc/haproxy/haproxy.cfg
/etc/haproxy/haproxy.cfg.bak
Selanjutnya, Buka file konfigurasi tanpa SSL:
nano /etc/haproxy/haproxy.cfg
global log /dev/loglocal0 log /dev/loglocal1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s maxconn 9048 user haproxy group haproxy daemon tune.ssl.default-dh-param 2048 defaults logglobal modehttp option forwardfor option http-server-close optionhttplog optiondontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend HaProxy bind *:80 mode http default_backend node #frontend ssl-HaProxy # bind *:443 ssl crt /etc/haproxy/certs/namadomain.pem # reqadd X-Forwarded-Proto:\ https #acl letsencrypt-acl path_beg /.well-known/acme-challenge/ #use_backend ssl-backend if letsencrypt-acl #default_backend node #backend ssl-backend #server letsencrypt *:443 check backend node balance leastconn #redirect scheme https if !{ ssl_fc } server node1 45.32.15.143:80 check server node2 103.74.5.76:80 check listen stats bind *:8080 ssl crt /etc/haproxy/certs/namadomain.pem stats enable stats hide-version stats refresh 30s stats show-node stats auth username:password stats uri /uptime
Ket: huruf tebal bisa seting dan jika non-ssl, bisa hapus bagian kode ssl diatas
- OK, lanjut……………..
Baca panduan: pasang SSL + Haproxy.
Setingan HAProxy include SSL:
global log /dev/loglocal0 log /dev/loglocal1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s maxconn 2000 user haproxy group haproxy daemon defaults logglobal modehttp optionhttplog optiondontlognull option forwardfor option http-server-close timeout connect 15s timeout client 15s timeout server 15s errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend HaProxy-SEOsatu bind *:80 redirect scheme https if !{ ssl_fc } mode http default_backend node frontend www-https bind *:443 ssl crt /etc/haproxy/certs/nmdomain.com.pem reqadd X-Forwarded-Proto:\ https acl letsencrypt-acl path_beg /.well-known/acme-challenge/ use_backend letsencrypt-backend if letsencrypt-acl default_backend node backend letsencrypt-backend server letsencrypt *:443 check backend node balance leastconn #redirect scheme https if !{ ssl_fc } server node1 158.xx.251.xx:80 check server node2 103.xx.5.xx:80 check listen stats bind *:8080 ssl crt /etc/haproxy/certs/nmdomain.com.pem stats enable stats hide-version stats refresh 30s stats show-node stats auth user:passwd stats uri /uptime
khusus WordPress: Jika SSL ada masalah redirect [ SSL redirect loop using WordPress and HAProxy ] bisa tambahkan kode pada file wp-config.php
define('FORCE_SSL_ADMIN', true); define('FORCE_SSL_LOGIN', true); if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';
Setiap perubahan data config wajib restart HAproxy:
sudo systemctl restart haproxy
Cek status:
sudo systemctl status haproxy
Setup Node / Backend Server
Install semua node, contoh menggunakan 2 node, masing2 di install web server apache, ubah pada setiap file index.html
Node_app1:
nano /var/www/html/index.html
ubah menjadi : <h2> Server Node #01 </h2
Node_app2:
nano /var/www/html/index.html
ubah menjadi : <h2> Server Node #02 </h2
Jalankan HAproxy:
sudo systemctl start haproxy
Ok, lanjut……
Jika sudah buka browser buka alamat IP_address, selanjutnya reload
Hasilnya setiap reload maka tampilan akan berubah dari node1 ke node2 dan seterusnya.
Duplikasi / Sinkonkan data Node
Semua data node_app1,2 harus sinkron pada saat load balancer bekerja.
Panduan: Sinkronisasi Data(node) Secara Real-Time di Linux
Sedangkan Node_db (database mengikuti setiap node_app) manjadi turunan:
- Node_app_1 > koneksi mysql biasa ke node_db 1
- Node_app2 > konekasi mysql biasa node_db_2
Listen Analisa Uptime.
Buka alamat IP / URL : 20.7.23xxx:8080/uptime
Selanjutnya masukan user & password yg diseting stats auth.