HAProxy
HAProxy è un software opensource gratuito impiegato soprattutto in scenari di bilanciamento e alta disponibilità. Scritto in linguaggio C promette di essere veloce ed efficiente. La versione 2.0 è stata rilasciata come LTS (Long Term Support) e sarà supportata fino al 2024.
HAProxy è utilizzato da numerosi player di alto profilo tra cui: GoDaddy, GitHub, Bitbucket, Stack Overflow, Reddit, Speedtest.net, Tumblr, Twitter e Tuenti e viene utilizzato in OpsWorks di AWS.
Un po’ di storia
HAProxy fonda le sue radici all’inizio del millennio. Il principale sviluppatore era Willy Tarreau; un importante contributore del kernel Linux, che mantiene tutt’oggi il progetto. Nel 2013 viene fondata la società HAProxy Technologies LLC per affiancare ai contributi della comunità un reparto di sviluppo specializato. La società offre una versione commerciale (HAProxy Enterprise Edition) e una versione community (HAProxy Community Edition).
Funzionamento e funzionalità
HAProxy è un Load Balancing (bilanciatore di carico), ovvero è un software che permette di distribuire connessioni in ingresso (frontend) verso uno o più server (backend). In questo modo è possibile migliorare sia la qualità del servizio offerto, sia l’affidabilità dello stesso.
HAProxy può essere utilizzato a livello applicativo (layer 7) oppure a livello TCP (layer 4) questa flessibilità permette di poterlo impiegare non solo in ambito web (http e https) ma in tutti quegli ambiti in cui neccessitiamo di un proxy o un bilanciatore di carico.
Tra le principali funionalità troviamo:
- Layer 4 (TCP) and Layer 7 (HTTP) load balancing
- URL rewriting
- Rate limiting
- SSL/TLS termination
- Gzip compression
- Proxy Protocol support
- Health checking
- Connection and HTTP message logging
- HTTP/2
- Multithreading
- Hitless Reloads
- gRPC Support
- Lua and SPOE Support
- API Support
- Layer 4 Retries
- Simplified circuit breaking
Ambiti di impiego
Di seguito proporrò qualche esempio pratico per mostrare le potenzialità del software.
Web
Prenderemo in esame uno scenario in cui la nostra applicazione è presente su tre web server.
frontend webfrontend
bind *:80
mode http
option httpclose
option forwardfor
default_backend webbackend
backend webbackend
mode http
balance roundrobin
option forwardfor
cookie SERVERNAME insert indirect nocache
server SERVERNAME IP:80 cookie SERVERNAME check port 80 rise 2 fall 2
server SERVERNAME IP:80 cookie SERVERNAME check port 80 rise 2 fall 2
Per semplificare HAProxy è in ascolto sulla porta 80 (http).
FTP
Prenderemo in esame uno scenario in cui il carico di lavoro sarà distribuito su due FTP server.
frontend ftp-in
bind 0.0.0.0:21
mode tcp
option tcplog
default_backend ftp
backend ftp
balance leastconn
server ftp1 IP:21 check port 21 inter 10s rise 2 fall 2
server ftp2 IP:21 check port 21 inter 10s rise 2 fall 2
frontend ftp1-PASS-in
bind 0.0.0.0:20000-20499
default_backend ftp1-PASS
maxconn 500
backend ftp1-PASS
server ftp1 IP check port 21 inter 10s rise 2 fall 2
frontend ftp2-PASS-in
bind 0.0.0.0:20500-20999
default_backend ftp2-PASS
maxconn 500
backend ftp2-PASS
server ftp01 172.17.10.11 check port 21 inter 10s rise 2 fall 2
In questo scenario abbiamo due server FTP che ricevuta una richiesta sulla porta 21 richiedono una connessione su una porta definita in un range (FTP passivo).
Database SQL
Prenderemo in esame uno scenario in cui la nostra applicazione è presente su tre MySql server.
frontend mysql-in
bind *:3306
mode tcp
timeout client 10800s
timeout server 10800s
balance leastconn
option tcp-check
tcp-check expect string is\ running.
option allbackups
default_backend mysql-PASS
backend mysql-PASS
server mysql1 IP:3306 check port 3306 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
server mysql2 IP:3306 check port 3306 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
server mysql3 IP:3306 check port 3306 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
Nota bene
Gli scenari presi in considerazione sono stati semplificati per ragioni editoriali e ma spero di aver resto giustizia a questo fantastico software.
Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.
Risorse: