Marvin Pascale

[B.Log]

06 Giugno 2020

HAProxy

immuni

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: