Come configurare un bilanciatore del carico HAProxy

0
283

HAProxy è un sistema di bilanciamento del carico open source, in grado di bilanciare qualsiasi servizio basato su TCP . È comunemente usato per bilanciare HTTP e può aiutare a risolvere i problemi di traffico sul tuo server web. Ecco come configurarlo.

Cos'è HAProxy?

I sistemi di bilanciamento del carico come HAProxy ti consentono di suddividere il traffico su più server, semplificandone la gestione. Invece di puntare il tuo IP al tuo server web, lo punteresti a un server HAProxy, che deciderebbe dove inviarlo da lì. HAProxy è molto leggero e non ha bisogno di molte risorse per funzionare, quindi puoi utilizzare un unico sistema di bilanciamento del carico per molti server di backend. Idealmente, vuoi che sia il tuo server HAProxy che i tuoi server web siano ospitati nello stesso datacenter, dallo stesso provider cloud, per ridurre la latenza.

HAProxy consente anche alla tua rete di essere più resiliente. Se un server Web non funziona, HAProxy può instradare il traffico al resto mentre si diagnostica il problema. Affinché sia ​​veramente resiliente, ti consigliamo di disporre di un server HAProxy di backup, nel caso in cui il tuo sistema di bilanciamento del carico si interrompa.

Anche con HAProxy, spesso vorrai comunque un CDN completo del sito di fronte ad esso, sia per gestire il carico aggiuntivo che per avere più punti di presenza più vicini all'utente finale.

Come impostare il bilanciamento del carico di HAProxy

Per prima cosa, installa HAProxy dal gestore di pacchetti della tua distribuzione. Per i sistemi basati su Debian come Ubuntu, sarebbe:

apt-get install haproxy Pubblicità

Successivamente, dovrai attivarlo modificando lo script init in /etc/default/haproxy e impostando ENABLED su 1:

ENABLED=1

Ora, se esegui il servizio haproxy, dovresti vedere che è abilitato e pronto per essere configurato. Inizieremo archiviando il file di configurazione predefinito:

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.old

Crea un nuovo file di configurazione al suo posto e avvia aggiungendo alcune impostazioni globali:

global     log 127.0.0.1 local0 Notice     maxconn 2000     user haproxy     group haproxy stats enable stats uri /haproxy?stats stats realm HAProxy Statistics stats auth admin:password

L'impostazione del log specifica il server syslog a cui HAProxy invia i log. Avrai bisogno di avere un server come rsyslog in esecuzione per utilizzarlo. L'impostazione maxconn specifica il numero massimo di connessioni simultanee e utente e gruppo specificano con quale utente Unix HAProxy opera.

Le ultime righe attivano la pagina delle statistiche integrata di HAProxy, che puoi visualizzare navigando verso l'URI nel tuo browser. In questo caso, sarebbe http://your_ip/haproxy?stats, ma puoi visualizzarne una demo qui.

Poi, imposteremo la configurazione predefinita che verrà applicata a tutti blocchi di ascolto se non apportano alcuna modifica:

impostazioni predefinite log modalità globale opzione http opzione httplog dontlognull tentativi 3 opzione redispatch timeout connect 5000 timeout client 10000 timeout server 10000

Stiamo impostando l'impostazione predefinita per utilizzare l'impostazione del registro globale, operare su HTTP e impostare alcune impostazioni relative ai timeout di connessione.

Creeremo un blocco frontend che farà il lavoro pesante e inoltrerà le connessioni al backend:

frontend proxy bind *:80 # Dichiarazioni della funzione ACL acl is_abuse src_http_req_rate(Abuse) ge 10 acl inc_abuse_cnt src_inc_gpc0(Abuse) gt 0 acl abuse_cnt src_get_gpc0(Abuse) gt 0 # Regole track-cp-request connection connection rifiuta se abuse_cnt http-request nega se abuse_cnt http-request nega se is_abuse inc_abuse_cnt opzione httpclose opzione forwardfor use_backend appname Annuncio

La prima riga collega questo frontend alla porta 80, su cui HAProxy sarà in ascolto.

< p>Le prossime due sezioni riguardano la limitazione della velocità. Innanzitutto, vengono dichiarate le funzioni dell'elenco di controllo degli accessi (ACL), che determinano se un indirizzo IP è abusivo. Quindi, una serie di regole rifiuterà una connessione se sta effettuando troppe richieste.

L'opzione forwardfor inoltra l'indirizzo IP del client al server. Poiché HAProxy funge da proxy inverso, il tuo server nginx vedrebbe solo l'indirizzo IP del tuo server HAProxy. Questa opzione imposta l'intestazione  X-Forwarded-For HTTP sull'indirizzo IP del client.

E infine, impostiamo questo blocco frontend per utilizzare il backend “appname,” che dovremo creare. Il blocco backend definisce semplicemente i server a cui inoltrare, insieme ad alcune opzioni:

backend appname your_ip:80 balance roundrobin cookie NOMESERVER insert server web1 web1_ip:80 check cookie web1 server web2 web2_ip:80 check cookie web2

La direttiva Balance definisce il modo in cui HAProxy bilancia le richieste tra i server. L'opzione più comune è roundrobin, che ruoterà le connessioni attraverso ciascun server in ordine. Se riscontri problemi con il saldo, puoi provare a utilizzare l'opzione minimiconn, che seleziona in base alle connessioni simultanee. Se hai bisogno che gli utenti accedano allo stesso server su più connessioni, puoi utilizzare l'opzione source, che seleziona in base a un hash dell'indirizzo IP del client.

Annuncio

Le ultime due righe assegnano i server a questo blocco di ascolto. Dai loro un nome (web1 e web2), specifichi i loro indirizzi e poi elenchi alcune opzioni. Qui, utilizziamo il parametro check per assicurarci che il server sia integro e accetti connessioni e il parametro cookie per impostare il cookie SERVERNAME (che abbiamo inserito direttamente sopra) sul nome del server, che viene utilizzato per la persistenza della sessione (quindi il l'utente non cambia server durante l'utilizzo del sito). L'opzione dell'origine del saldo ottiene lo stesso effetto.

E poiché stiamo utilizzando la limitazione della velocità, avremo effettivamente bisogno di un altro backend per memorizzare gli indirizzi IP:

backend Abuse stick-table tipo ip dimensione 100K scadenza 30m store gpc0,http_req_rate(10s)

Questo in realtà non inoltra alcuna connessione; funziona come una tabella in cui memorizzare gli indirizzi. Gli indirizzi vengono cancellati dopo 30 minuti, quindi gli indirizzi ritenuti offensivi verranno bloccati per 30 minuti.

Infine, puoi avviare il servizio HAProxy eseguendo:

avvio del servizio haproxy