La traduzione dell'articolo è stata preparata alla vigilia dell'inizio del corso
Il bilanciamento del carico è una soluzione comune per scalare orizzontalmente le applicazioni Web su più host fornendo agli utenti un unico punto di accesso al servizio.
HAProxy si impegna a ottimizzare l'utilizzo delle risorse, massimizzare la produttività, ridurre al minimo i tempi di risposta ed evitare di sovraccaricare ogni singola risorsa. Può essere installato su una varietà di distribuzioni Linux, come CentOS 8, su cui ci concentreremo in questa guida, così come su sistemi
HAProxy è particolarmente adatto per siti Web con traffico molto elevato e viene quindi spesso utilizzato per migliorare l'affidabilità e le prestazioni delle configurazioni di servizi Web multiserver. Questa guida descrive i passaggi per configurare HAProxy come bilanciatore del carico su un host cloud CentOS 8, che quindi instrada il traffico ai tuoi server web.
Come prerequisito per ottenere i migliori risultati, dovresti avere almeno due server web e un server di bilanciamento del carico. I server Web devono eseguire almeno un servizio Web di base come nginx o httpd per testare il bilanciamento del carico tra di loro.
Installazione di HAProxy su CentOS 8
Poiché HAProxy è un'applicazione open source in rapida evoluzione, la distribuzione disponibile nei repository CentOS standard potrebbe non essere la versione più recente. Per scoprire la versione corrente, esegui il seguente comando:
sudo yum info haproxy
HAProxy fornisce sempre tre versioni stabili tra cui scegliere: le due versioni supportate più recenti e una terza versione precedente che sta ancora ricevendo aggiornamenti critici. Puoi sempre controllare l'ultima versione stabile elencata sul sito Web HAProxy e quindi decidere con quale versione desideri lavorare.
In questa guida installeremo l'ultima versione stabile 2.0, che non era ancora disponibile nei repository standard al momento della stesura della guida. Dovrai installarlo dalla fonte originale. Ma prima controlla se hai soddisfatto le condizioni necessarie per scaricare e compilare il programma.
sudo yum install gcc pcre-devel tar make -y
Scarica il codice sorgente utilizzando il comando seguente. Puoi verificare se è disponibile una versione più recente su
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Una volta completato il download, estrai i file utilizzando il comando seguente:
tar xzvf ~/haproxy.tar.gz -C ~/
Vai alla directory dei sorgenti decompressa:
cd ~/haproxy-2.0.7
Quindi compila il programma per il tuo sistema:
make TARGET=linux-glibc
E infine, installa HAProxy stesso:
sudo make install
HAProxy è ora installato, ma richiede alcune manipolazioni aggiuntive per farlo funzionare. Continuiamo a configurare il software e i servizi di seguito.
Configurazione di HAProxy per il tuo server
Ora aggiungi le seguenti directory e file di statistiche per le voci HAProxy:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Crea un collegamento simbolico per i file binari in modo da poter eseguire i comandi HAProxy come utente normale:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Se vuoi aggiungere un proxy al tuo sistema come servizio, copia il file haproxy.init da esempi nella tua directory /etc/init.d. Modifica i permessi del file in modo che lo script venga 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-reload
È inoltre necessario consentire il riavvio automatico del servizio all'avvio del sistema:
sudo chkconfig haproxy on
Per comodità, si consiglia inoltre di aggiungere un nuovo utente per eseguire HAProxy:
sudo useradd -r haproxy
Successivamente, puoi controllare nuovamente il numero di versione installata utilizzando il seguente comando:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
Nel nostro caso, la versione dovrebbe essere 2.0.7, come mostrato nell'output di esempio sopra.
Infine, il firewall predefinito in CentOS 8 è piuttosto restrittivo per questo progetto. Utilizzare i seguenti comandi per consentire i servizi richiesti e reimpostare il firewall:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Configurazione del bilanciamento del carico
La configurazione di HAProxy è un processo abbastanza semplice. In sostanza, tutto ciò che devi fare è dire a HAProxy quali connessioni dovrebbe ascoltare e dove dovrebbe trasmetterle.
Questo viene fatto creando un file di configurazione /etc/haproxy/haproxy.cfg con la definizione delle impostazioni. È possibile leggere le opzioni di configurazione di HAProxy
Bilanciamento del carico a livello di trasporto (livello 4)
Cominciamo con la configurazione di base. Crea un nuovo file di configurazione, ad esempio utilizzando vi con il comando seguente:
sudo vi /etc/haproxy/haproxy.cfg
Aggiungere le seguenti sezioni al file. Sostituire nome del server cosa dovrebbe chiamare i tuoi server nella pagina delle statistiche e ip_privato — indirizzi IP privati dei server a cui vuoi indirizzare il traffico web. Puoi controllare gli indirizzi IP privati
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 check
Ciò definisce un bilanciatore del carico del livello di trasporto (livello 4) denominato esternamente http_front in ascolto sulla porta 80, che quindi inoltra il traffico a un backend predefinito denominato http_back. Statistiche aggiuntive /haproxy?stats collega la pagina delle statistiche all'indirizzo specificato.
Vari algoritmi di bilanciamento del carico.
Specificando i server nella sezione backend si consente a HAProxy di utilizzare questi server per il bilanciamento del carico secondo un algoritmo round-robin, quando possibile.
Gli algoritmi di bilanciamento vengono utilizzati per determinare a quale server nel backend viene passata ciascuna connessione. Ecco alcune delle opzioni utili:
- Girotondo: Ogni server viene utilizzato a turno in base al suo peso. Questo è l'algoritmo più fluido ed equo quando il tempo di elaborazione dei server rimane distribuito uniformemente. Questo algoritmo è dinamico e consente di regolare al volo il peso del server.
- Connessione minima: viene selezionato il server con il minor numero di connessioni. Il round robin viene eseguito tra server con lo stesso carico. L'utilizzo di questo algoritmo è consigliato per sessioni lunghe come LDAP, SQL, TSE, ecc., ma non è molto adatto per sessioni brevi come HTTP.
- Primo: Il primo server con slot di connessione disponibili riceve la connessione. I server vengono selezionati dall'ID numerico più basso a quello più alto, che per impostazione predefinita corrisponde alla posizione del server nella farm. Una volta che un server raggiunge maxconn, viene utilizzato il server successivo.
- Fonte: L'indirizzo IP di origine viene sottoposto ad hashing e diviso per il peso totale dei server in esecuzione per determinare quale server riceverà la richiesta. In questo modo, lo stesso indirizzo IP del client andrà sempre allo stesso server, mentre i server rimarranno gli stessi.
Impostazione del bilanciamento del carico a livello di applicazione (livello 7)
Un'altra opzione disponibile è configurare un bilanciatore del carico da eseguire a livello dell'applicazione (livello 7), utile quando parti della tua applicazione web si trovano su host diversi. Ciò può essere ottenuto limitando la trasmissione della connessione, ad esempio tramite URL.
Apri il file di configurazione HAProxy utilizzando un editor di testo:
sudo vi /etc/haproxy/haproxy.cfg
Quindi configura i segmenti frontend e backend come nell'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 check
Il frontend dichiara una regola ACL chiamata url_blog che si applica a tutte le connessioni con percorsi che iniziano con /blog. Use_backend specifica che le connessioni che corrispondono alla condizione url_blog devono essere servite da un backend denominato blog_back e tutte le altre richieste vengono gestite dal backend predefinito.
Sul lato backend, la configurazione imposta due gruppi di server: http_back, come prima, e uno nuovo chiamato blog_back, che gestisce le connessioni a example.com/blog.
Dopo aver modificato le impostazioni, salvare il file e riavviare HAProxy utilizzando il seguente comando:
sudo systemctl restart haproxy
Se ricevi avvisi o messaggi di errore durante l'avvio, controlla la configurazione e assicurati di aver creato tutti i file e le cartelle necessari, quindi prova a riavviare di nuovo.
Testare la configurazione
Una volta che HAProxy è configurato e in esecuzione, apri l'indirizzo IP pubblico del server di bilanciamento del carico in un browser e controlla se 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?stats
Quando carichi la pagina delle statistiche, se tutti i tuoi server sono verdi, la configurazione ha avuto successo!
La pagina delle statistiche contiene alcune informazioni utili per monitorare i tuoi host web, inclusi tempi di attività/inattività e numero di sessioni. Se il server è contrassegnato in rosso, assicurati che sia acceso e che sia possibile eseguirne il ping dal sistema di bilanciamento del carico.
Se il tuo sistema di bilanciamento del carico non risponde, assicurati che le connessioni HTTP non siano bloccate da un firewall. Assicurati inoltre che HAProxy funzioni utilizzando il comando seguente:
sudo systemctl status haproxy
Proteggere la pagina delle statistiche con una password
Tuttavia, se la pagina delle statistiche è semplicemente elencata nel front-end, allora è aperta a tutti, il che potrebbe non essere una buona idea. Puoi invece assegnargli un numero di porta personalizzato aggiungendo l'esempio seguente alla fine del tuo file haproxy.cfg. Sostituire nome utente и parola d'ordine per qualcosa di sicuro:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Dopo aver aggiunto un nuovo gruppo di ascoltatori, rimuovi il vecchio collegamento dell'URI delle statistiche dal gruppo frontend. Al termine, salvare il file e riavviare HAProxy.
sudo systemctl restart haproxy
Quindi apri nuovamente il bilanciatore del carico con il nuovo numero di porta e accedi con il nome utente e la password specificati nel file di configurazione.
http://load_balancer_public_ip:8181
Assicurati che tutti i tuoi server siano ancora verdi e quindi apri solo l'IP del bilanciatore del carico senza alcun numero di porta nel tuo browser.
http://load_balancer_public_ip/
Se disponi di almeno una certa varietà di pagine di destinazione sui tuoi server back-end, 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 dare un'occhiata
Conclusione: bilanciatore del carico HAProxy
Congratulazioni per aver configurato correttamente il sistema di bilanciamento del carico HAProxy! Anche con una configurazione di bilanciamento del carico di base, puoi migliorare significativamente le prestazioni e la disponibilità della tua applicazione web. Questa guida è solo un'introduzione al bilanciamento del carico con HAProxy, che è in grado di fare molto di più di quanto può essere trattato nella guida di configurazione rapida. Ti consigliamo di sperimentare diverse configurazioni utilizzando
Utilizzando più host per proteggere il tuo servizio web con margine, il sistema di bilanciamento del carico stesso potrebbe ancora presentare un punto di guasto. Puoi migliorare ulteriormente l'elevata disponibilità installando un IP mobile tra più sistemi di bilanciamento del carico. Puoi saperne di più su questo nel nostro
Maggiori informazioni sul corso
Fonte: habr.com