La traduzione dell'articolo è stata preparata in vista dell'inizio del corso

Il bilanciamento del carico è una soluzione comune per la scalabilità orizzontale delle applicazioni web su più host, fornendo agli utenti un unico punto di accesso al servizio. è uno dei programmi più popolari per il bilanciamento del carico con codice sorgente aperto, che offre anche alta disponibilità e funzionalità di proxy.
HAProxy mira a ottimizzare l'uso delle risorse, massimizzare la capacità di throughput, ridurre i tempi di risposta ed evitare il sovraccarico di ciascuna risorsa in particolare. Può essere installato su molte distribuzioni Linux, come CentOS 8, su cui ci concentreremo in questa guida, così come sui sistemi e .

HAProxy è particolarmente adatto per siti web con un elevato traffico e viene spesso utilizzato per migliorare l'affidabilità e le prestazioni delle configurazioni dei servizi web con più server. In questa guida sono riportati i passaggi per configurare HAProxy come bilanciatore di carico su un host cloud CentOS 8, che successivamente indirizza il traffico ai vostri server web.
Per ottenere i migliori risultati, è necessario avere almeno due server web e un server per il bilanciamento del carico. I server web devono avere in esecuzione almeno un servizio web di base, come nginx o httpd, per poter testare il bilanciamento del carico tra di essi.
Installazione di HAProxy su CentOS 8
Poiché HAProxy è un'applicazione open source in rapida evoluzione, la distribuzione disponibile nei repository standard di CentOS potrebbe non essere l'ultima versione. Per scoprire la versione attuale, eseguire il seguente comando:
sudo yum info haproxyHAProxy offre sempre la scelta tra tre versioni stabili: le due versioni supportate più recenti e una terza, più vecchia, che riceve ancora aggiornamenti critici. Puoi sempre verificare l'ultima versione stabile sul sito di HAProxy e decidere con quale versione vuoi lavorare.
In questa guida installeremo l'ultima versione stabile 2.0, che non era disponibile nei repository standard al momento della scrittura della guida. Dovrai installarla dalla fonte originale. Ma prima, assicurati di avere i requisiti necessari per il download e la compilazione del programma.
sudo yum install gcc pcre-devel tar make -yScarica il codice sorgente con il comando sottostante. Puoi verificare se esiste una versione più recente disponibile su .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzDopo il completamento del download, estrai i file con il comando seguente:
tar xzvf ~/haproxy.tar.gz -C ~/Vai alla cartella estratta con i sorgenti:
cd ~/haproxy-2.0.7Quindi compila il programma per il tuo sistema:
make TARGET=linux-glibcInfine, installa HAProxy stesso:
sudo make installOra HAProxy è installato, ma sono necessarie alcune operazioni aggiuntive per il suo funzionamento. Continuiamo la configurazione del software e dei servizi qui sotto.
Configurazione di HAProxy per il tuo server
Aggiungi ora le seguenti directory e il file statistico per i registri di HAProxy:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/statsCrea un collegamento simbolico per i file binari in modo da poter eseguire i comandi HAProxy come un utente normale:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxySe desideri aggiungere il proxy al sistema come servizio, copia il file haproxy.init dagli esempi nella tua directory /etc/init.d. Modifica i permessi del file affinché lo script possa essere eseguito, quindi riavvia il demone systemd:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reloadDevi anche consentire al servizio di riavviarsi automaticamente all'avvio del sistema:
sudo chkconfig haproxy onPer comodità, si consiglia anche di aggiungere un nuovo utente per eseguire HAProxy:
sudo useradd -r haproxyDopo ciò, puoi controllare nuovamente il numero della versione installata con il seguente comando:
haproxy -v
HA-Proxy versione 2.0.7 2019/09/27 - https://haproxy.org/Nel nostro caso, la versione deve essere 2.0.7, come mostrato nell'esempio di output sopra.
Infine, il firewall in CentOS 8 è piuttosto restrittivo per questo progetto per impostazione predefinita. Usa i seguenti comandi per permettere i servizi necessari e riavviare il firewall:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reloadConfigurazione del bilanciatore di carico
Configurare HAProxy è un processo piuttosto semplice. Fondamentalmente, tutto ciò che devi fare è informare HAProxy quali connessioni deve ascoltare e dove deve inoltrarle.
Questo si fa creando un file di configurazione /etc/haproxy/haproxy.cfg con le impostazioni necessarie. Puoi leggere riguardo alle opzioni di configurazione di HAProxy , se vuoi saperne di più.
Bilanciamento del carico a livello di trasporto (layer 4)
Iniziamo con una configurazione di base. Crea un nuovo file di configurazione, ad esempio, usando vi con il comando seguente:
sudo vi /etc/haproxy/haproxy.cfgAggiungi al file le seguenti sezioni. Sostituisci server_name con ciò che deve richiamare i tuoi server nella pagina delle statistiche, e private_ip — indirizzi IP privati dei server a cui si desidera reindirizzare il traffico web. Puoi controllare gli indirizzi IP privati e nella scheda Rete privata nel menu Network log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats timeout 30s user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server server_name1 private_ip1:80 check server server_name2 private_ip2:80 check.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 checkQuesto definisce un bilanciatore di carico a livello di trasporto (layer 4) con nome esterno http_front, che ascolta sulla porta 80 e poi reindirizza il traffico al backend predefinito chiamato http_back. Ulteriori statistiche /haproxy?stats collegano la pagina delle statistiche all'indirizzo indicato.
Diverse strategie di bilanciamento del carico.
L'indicazione dei server nella sezione backend consente a HAProxy di utilizzare questi server per il bilanciamento del carico secondo l'algoritmo round-robin, quando possibile.
Gli algoritmi di bilanciamento vengono utilizzati per determinare quale server nel backend gestirà ogni connessione. Ecco alcune delle opzioni utili:
- Roundrobin: ogni server viene utilizzato a turno in base al proprio peso. Questo è l'algoritmo più fluido e giusto, in cui il tempo di elaborazione sui server rimane uniformemente distribuito. Questo algoritmo è dinamico e consente di regolare il peso del server in tempo reale.
- Leastconn: viene selezionato il server con il minor numero di connessioni. Si esegue un ciclo tra i server con carico uguale. Questo algoritmo è consigliato per sessioni lunghe, come LDAP, SQL, TSE, ecc., ma non è molto adatto per sessioni brevi, come HTTP.
- First: il primo server con slot disponibili per la connessione riceve la connessione. I server vengono selezionati dall'identificativo numerico più basso al più alto, che per impostazione predefinita corrisponde alla posizione del server nel cluster. Una volta che un server raggiunge il valore maxconn, viene utilizzato il server successivo.
- Fonte: L'indirizzo IP di origine è hashato e distribuito sulla base del peso totale dei server attivi, per determinare qual è il server che riceverà la richiesta. In questo modo, lo stesso indirizzo IP del cliente sarà sempre assegnato allo stesso server, mentre i server rimangono invariati.
Impostazione del bilanciamento del carico a livello applicativo (layer 7)
Un'altra opzione disponibile è configurare il bilanciatore di carico per funzionare a livello applicativo (layer 7), il che è utile quando parti della vostra applicazione web si trovano su host diversi. Questo può essere realizzato regolando la trasmissione delle connessioni, ad esempio, per URL.
Apri il file di configurazione di HAProxy utilizzando un editor di testo:
sudo vi /etc/haproxy/haproxy.cfgQuindi configura i segmenti frontend e backend secondo l'esempio seguente:
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 checkIl frontend dichiara una regola ACL chiamata url_blog, che si applica a tutte le connessioni con percorsi che iniziano con /blog. Use_backend definisce che le connessioni che soddisfano la condizione url_blog devono essere gestite dal backend chiamato blog_back, mentre tutte le altre richieste vengono elaborate dal backend predefinito.
Dal lato backend, la configurazione stabilisce due gruppi di server: http_back, come prima, e un nuovo gruppo chiamato blog_back, che gestisce le connessioni a example.com/blog.
Dopo aver modificato le impostazioni, salva il file e riavvia HAProxy utilizzando il seguente comando:
sudo systemctl restart haproxySe durante l'avvio hai ricevuto avvisi o messaggi di errore, controlla la configurazione per verificarne la correttezza e assicurati di aver creato tutti i file e le cartelle necessari, quindi riprova a riavviare.
Test della configurazione
Quando HAProxy è configurato e in esecuzione, apri l'indirizzo IP pubblico del server del bilanciatore di carico nel browser e verifica se ti sei connesso correttamente al backend. Il parametro stats uri nella configurazione crea una pagina di statistiche all'indirizzo specificato.
http://load_balancer_public_ip/haproxy?statsQuando carichi la pagina delle statistiche, se tutti i tuoi server vengono visualizzati in verde, significa che la configurazione è avvenuta con successo!

La pagina delle statistiche contiene alcune informazioni utili per monitorare i tuoi servizi di hosting web, inclusi tempo di attività / inattività e numero di sessioni. Se un server è contrassegnato in rosso, assicurati che sia acceso e che tu possa pingarlo dalla macchina di bilanciamento del carico.
Se il tuo bilanciatore di carico non risponde, assicurati che le connessioni HTTP non siano bloccate dal firewall. Verifica anche che HAProxy sia in funzione usando il comando seguente:
sudo systemctl status haproxyProtezione della pagina delle statistiche con password
Tuttavia, se la pagina delle statistiche è semplicemente esposta nel frontend, sarà accessibile al pubblico, il che potrebbe non essere una buona idea. Invece, puoi assegnarle un numero di porta specifico aggiungendo l'esempio seguente alla fine del tuo file haproxy.cfg. Sostituisci username e password con qualcosa di sicuro:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:passwordDopo aver aggiunto un nuovo gruppo di ascoltatori, rimuovere il vecchio link all'URI stats dal frontend del gruppo. Quando hai finito, salva il file e riavvia HAProxy.
sudo systemctl restart haproxyPoi riapri il bilanciatore di carico con il nuovo numero di porta e accedi con il nome utente e la password che hai specificato nel file di configurazione.
http://load_balancer_public_ip:8181Assicurati che tutti i tuoi server siano ancora mostrati in verde, quindi apri solo l'IP del bilanciatore di carico senza alcun numero di porta nel tuo browser.
http://load_balancer_public_ip/Se i tuoi server interni hanno almeno una certa varietà di pagine di destinazione, noterai che ogni volta che ricarichi la pagina ricevi una risposta da un host diverso. Puoi provare diversi algoritmi di bilanciamento nella sezione di configurazione o consultare la .
Conclusione: bilanciatore di carico HAProxy
Congratulazioni per la configurazione riuscita del bilanciatore di carico HAProxy! Anche con una configurazione di base del bilanciamento del carico, puoi migliorare notevolmente le prestazioni e la disponibilità della tua web app. Questa guida è solo un'introduzione al bilanciamento del carico con HAProxy, che è capace di molto di più rispetto a quanto possa essere descritto in una breve istruzione di configurazione. Ti consigliamo di sperimentare diverse configurazioni utilizzando , disponibile per HAProxy, e poi procedere alla pianificazione del bilanciamento del carico per il tuo ambiente di produzione.
Utilizzando più host per proteggere il tuo servizio web con capacità in riserva, il bilanciatore di carico stesso può comunque rappresentare un punto di failure. Puoi aumentare ulteriormente la alta disponibilità configurando un IP fluttuante tra diversi bilanciatore di carico. Puoi saperne di più a riguardo nel nostro .
Ulteriori informazioni sul corso ***
Fonte: habr.com
