HAProxy : alta disponibilità, bilanciamento del carico e proxying gratuiti.

Lo standard opensource per il load balancing.

HAProxy è una soluzione gratuita, molto veloce e affidabile che offre alta disponibilità, bilanciamento del carico e proxying per applicazioni basate su TCP e HTTP. E’ particolarmente adatta per siti web ad alto traffico e alimenta molti dei siti web più visitati al mondo. Nel corso degli anni è diventato di fatto lo standard opensource del load balancing, è ora distribuito con la maggior parte delle principali distribuzioni Linux, ed è spesso distribuito di default nelle piattaforme cloud.

HAProxy può anche essere definito un High Availability Proxy. Si tratta di un noto software open source TCP/HTTP proxying e Load Balancer che può operare su FreeBSD, Solaris e Linux. Il compito più importante di HAProxy è quello di migliorare l’affidabilità e le prestazioni di un ambiente multiserver. Può raggiungere questo obiettivo distribuendo il carico di lavoro su diversi server come un database, un’applicazione, il web, e solo per citarne alcuni. HAProxy è utilizzato principalmente in diverse aree di alto livello, tra cui Twitter, Instagram, Imgur e GitHub.



Quando si parla di proxying e bilanciamento del carico diversi concetti e termini devo essere chiari e conosciuti.

HAProxyCommunityEdition
HAProxyCommunityEdition

Frontend :

Il processo di come una richiesta viene consegnata o inviata ai backend è chiamato frontend. La perfetta definizione dei frontends si trova nell’area frontend della configurazione di  High Availability Proxy. Un frontend può essere configurato per diversi tipi di traffico di rete. Le definizioni contengono diversi elementi, come ad esempio:

Le ACL.

Una porta e un insieme di indirizzi di protocollo internet come *:443, x.x.x.x:8080, ecc.

Backend :

In generale, un backend contiene uno o più server. La vostra capacità di carico potenziale aumenterà aggiungendo diversi server al vostro backend. Può essere ottenuto distribuendo il carico su diversi server. Con lo stesso approccio, si può anche aumentare l’affidabilità quando i server di backend non sono accessibili. Un backend può essere definito nella sua forma più semplice come un elenco di server e porte.

ACL (Access Control List) :

Quando si parla della corretta associazione al bilanciamento del carico, è importante sapere che le ACL sono utilizzate principalmente per eseguire e testare alcune condizioni come bloccare una richiesta, o selezionare un server in base all’esito dell’operazione. Sulla base di una moltitudine di fattori come il numero di connessioni ad un backend e pattern-matching, l’uso di ACLs permetterà un inoltro flessibile del traffico di rete.



Tipologie di bilanciamento di carico.

Bilanciamento del carico di layer 7:

Il bilanciamento del carico del livello 7 è un approccio sofisticato. Si tratta di un  metodo completo per bilanciare il carico del traffico di rete. Il load balancer fornirà le richieste a diversi server di backend utilizzando il layer 7. Il processo è collegato a cascata sul contenuto dell’applicazione dell’utente. Si è in grado di far funzionare diversi server di applicazioni web utilizzando questa modalità di bilanciamento sotto la stessa porta e lo stesso dominio.

Bilanciamento del carico di layer 4:

L’uso del bilanciamento del carico del livello 4 rimane un approccio attivo. È il metodo più semplice per caricare il bilanciamento del traffico di rete su più server. Questo processo aiuterà a inoltrare o fornire traffico utente a seconda della porta e dell’intervallo IP.

 

Gli algoritmi del bilanciamento del carico:

In un backend, l’algoritmo utilizzato determina il server che sarà scelto durante il bilanciamento del carico. Per gli algoritmi, HAProxy fornisce diverse opzioni da selezionare. Ai server può essere assegnato un parametro di peso in aggiunta all’algoritmo di bilanciamento del carico. Aiuterà a manipolare il modo in cui il server viene scelto sempre rispetto ad altri. Un paio di algoritmi di load balancing saranno discussi qui perché HAProxy offre così tante opzioni.

Source:

In base all’hash del vostro indirizzo IP, il processo vi aiuterà a scegliere facilmente il server. Resta un modo garantito per assicurarsi che l’utente si colleghi allo stesso server.

Leastconn:

Aiuta a scegliere il server con il minor numero di connessioni. È comunemente usato e raccomandato per una lunga sessione. I server all’interno dello stesso spettro backend sono anch’essi ruotati in modo circolare.

Round Robin:

Questo metodo è utilizzato principalmente per scegliere i server a turno. E ‘noto come l’algoritmo predefinito.



Alta disponibilità:

E’ importante sapere che il layer 7 e 4 utilizza un load balancer per dirigere il traffico ad un singolo server di backend. In queste configurazioni, il load balancer rimane un single point of failure. Se viene sopraffatto da richieste o va giù, il vostro servizio subirà tempi di inattività o alta latenza. L’ HA si può raggiungere aggiungendo ridondanza ad ogni livello dell’infrastruttura. E’ necessario disporre anche di bilanciatori di carico ridondanti per una disponibilità davvero elevata.

 

Dove funziona HAProxy?

Le prestazioni più elevate si ottengono con i moderni sistemi operativi che supportano meccanismi di polling scalabili come epoll su Linux 2.6/3.x o kqueue su FreeBSD e OpenBSD. Questo richiede una versione haproxy più recente di 1.2.5. Trasferimenti di dati veloci sono resi possibili su Linux 3.x usando lo splicing TCP e l’haproxy 1.4 o 1.5. Velocità di forwarding fino a 40 Gbps sono già state raggiunte su tali piattaforme dopo un tuning molto accurato. Sebbene Solaris e AIX siano supportati, non dovrebbero essere utilizzati se sono richieste prestazioni estreme.

Haproxy su un tipico Xeon E5 del 2014 può inoltrare dati fino a circa 40 Gbps. Una CPU Atom da 1.6 GHz fanless può leggermente superare  1 Gbps.



Documentazione

Ci sono tre tipi di documentazione: il Manuale di riferimento che spiega come configurare HAProxy ma che è obsoleto, la Guida all’architettura che vi guiderà attraverso le varie configurazioni tipiche, e il nuovo Manuale di configurazione che sostituisce il Manuale di riferimento con una spiegazione più esplicita del linguaggio di configurazione. La documentazione ufficiale è in testo puro ed è  fornito con i sorgenti. Tuttavia, la conversione automatica in HTML di Cyril Bonté è molto più facile da usare ed è costantemente aggiornata, quindi è quella preferita quando disponibile.