Installazione di un bilanciatore di carico HAProxy su CentOS

La traduzione dell'articolo è stata preparata in vista dell'inizio del corso «Amministratore Linux. Virtualizzazione e clustering»

Installazione di un bilanciatore di carico HAProxy su CentOS

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. HAProxy è uno dei programmi più popolari per il bilanciamento del carico open source, che offre anche alta disponibilità e funzionalità di proxy.

HAProxy mira a ottimizzare l'uso delle risorse, massimizzare la capacità di throughput, minimizzare il tempo di risposta ed evitare il sovraccarico di ciascuna risorsa singolarmente. Può essere installato su molte distribuzioni Linux, come CentOS 8, che sarà oggetto di questa guida, così come su sistemi Debian 8 e Ubuntu 16.

Installazione di un bilanciatore di carico HAProxy su CentOS

HAProxy è particolarmente adatto per siti web con un traffico molto elevato e quindi viene spesso utilizzato per migliorare l'affidabilità e le prestazioni delle configurazioni dei servizi web con più server. In questa guida trovi i passaggi per configurare HAProxy come bilanciatore di carico su un host cloud CentOS 8, che poi indirizzerà il traffico verso i tuoi server web.

Come condizione necessaria per ottenere i migliori risultati, devi 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, in modo da poter 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 standard di CentOS potrebbe non essere l'ultima versione. Per scoprire la versione attuale, esegui il seguente comando:

sudo yum info haproxy

HAProxy offre sempre tre versioni stabili tra cui scegliere: due delle ultime versioni supportate e una terza, più vecchia, che riceve ancora aggiornamenti critici. Puoi sempre controllare l'ultima versione stabile sul sito di HAProxy e quindi decidere con quale versione vuoi lavorare.

In questa guida installeremo l'ultima versione stabile 2.0, che non era ancora disponibile nei repository standard al momento della scrittura della guida. Dovrai installarla dalla fonte. Ma prima verifica se hai soddisfatto i requisiti necessari per il download e la compilazione del programma.

sudo yum install gcc pcre-devel tar make -y

Scarica il codice sorgente utilizzando il comando sottostante. Puoi verificare se esiste una versione più recente disponibile su pagina di download di HAProxy.

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 con il comando seguente:

tar xzvf ~/haproxy.tar.gz -C ~/

Accedi alla directory estratta con i sorgenti:

cd ~/haproxy-2.0.7

Quindi compila il programma per il tuo sistema:

make TARGET=linux-glibc

E infine, installa HAProxy:

sudo make install

Ora HAProxy è installata, ma per funzionare sono necessarie alcune ulteriori operazioni. Continuiamo con la configurazione del software e dei servizi qui sotto.

Configurazione di HAProxy per il tuo server

Ora aggiungi le seguenti directory e il file di statistiche per i log di 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 desideri aggiungere il proxy al sistema come servizio, copia il file haproxy.init dalla cartella examples nella tua directory /etc/init.d. Modifica i permessi del file in modo che lo script possa essere eseguito e poi ricarica 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

Devi anche abilitare il servizio per il riavvio automatico all'avvio del sistema:

sudo chkconfig haproxy on

Per comodità, è consigliato anche aggiungere un nuovo utente per eseguire HAProxy:

sudo useradd -r haproxy

Dopo questo, puoi verificare nuovamente il numero della versione installata con 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 shown nell'esempio di output sopra.

Infine, il firewall in CentOS 8 è piuttosto restrittivo per questo progetto per impostazione predefinita. Usa i seguenti comandi per consentire 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 --reload

Configurazione del bilanciatore di carico

La configurazione di HAProxy è un processo piuttosto semplice. Fondamentalmente, tutto ciò che devi fare è dire a HAProxy quali connessioni deve monitorare e dove deve inoltrarle.

Questo viene realizzato creando un file di configurazione /etc/haproxy/haproxy.cfg con le impostazioni necessarie. Puoi leggere ulteriori informazioni sui parametri di configurazione di HAProxy nella pagina della documentazione, se desideri saperne di più.

Bilanciamento del carico a livello di trasporto (layer 4)

Iniziamo con la configurazione di base. Crea un nuovo file di configurazione, ad esempio utilizzando vi con il comando qui sotto:

sudo vi /etc/haproxy/haproxy.cfg

Aggiungi le seguenti sezioni al file. Sostituisci server_name con ciò che deve apparire nei tuoi server nella pagina delle statistiche, e private_ip con gli indirizzi IP privati dei server a cui desideri dirigere il traffico web. Puoi controllare gli indirizzi IP privati nel pannello di controllo di UpCloud e nella scheda Rete privata nel menu Network global 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.

Questo definisce un bilanciatore di carico a livello di trasporto (layer 4) con il nome esterno http_front, che ascolta sulla porta 80, e poi istruisce il traffico al backend predefinito denominato http_back. Ulteriori statistiche /haproxy?stats consentono l'accesso alla pagina delle statistiche all'indirizzo specificato.

Diverse strategie di bilanciamento del carico.

La specifica dei server nella sezione del 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 a quale server del backend viene inviata ogni connessione. Ecco alcune opzioni utili:

Roundrobin:

  • ogni server viene utilizzato a turno in base al proprio peso. Questo è l'algoritmo più equo e fluido, in cui i tempi di elaborazione sui server rimangono equamente distribuiti. Questo algoritmo è dinamico, consentendo di regolare il peso del server in tempo reale. Leastconn:
  • Leastconn: viene selezionato il server con il minor numero di connessioni. Viene eseguita una rotazione ciclica tra i server con carico simile. L'utilizzo di questo algoritmo è raccomandato per sessioni lunghe, come LDAP, SQL, TSE, ecc., ma non è molto adatto per sessioni brevi, come HTTP.
  • Primo: il primo server con slot disponibili per la connessione riceve la connessione. I server vengono selezionati dall'identificatore numerico più basso al più alto, che per impostazione predefinita corrisponde alla posizione del server nel farm. Una volta che il server raggiunge il valore maxconn, viene utilizzato il server successivo.
  • Fonte: L'indirizzo IP sorgente viene hashato 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 verrà sempre indirizzato allo stesso server, mentre i server rimangono invariati.

Configurazione del bilanciamento del carico a livello applicativo (layer 7)

Un'altra possibilità disponibile è configurare il bilanciatore di carico per funzionare a livello applicativo (layer 7), utile quando parti della tua applicazione web si trovano su host diversi. Ciò può essere ottenuto regolando il passaggio delle connessioni, ad esempio, in base all'URL.

Apri il file di configurazione di HAProxy con 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 denominata url_blog, che si applica a tutte le connessioni con percorsi che iniziano con /blog. Use_backend stabilisce 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 del backend, la configurazione stabilisce due gruppi di server: http_back, come prima, e un nuovo gruppo chiamato blog_back, che gestisce le connessioni con example.com/blog.

Dopo aver modificato le impostazioni, salva il file e riavvia HAProxy con il seguente comando:

sudo systemctl restart haproxy

Se durante l'avvio hai ricevuto avvisi o messaggi di errore, controlla la configurazione per verificarne la presenza e assicurati di aver creato tutti i file e le cartelle necessarie, quindi prova a riavviare di nuovo.

Testing della configurazione

Quando HAProxy è configurato e in esecuzione, apri l'indirizzo IP pubblico del server 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?stats

Quando carichi la pagina delle statistiche, se tutti i tuoi server appaiono in verde, la configurazione è andata a buon fine!

Installazione di un bilanciatore di carico HAProxy su CentOS

La pagina delle statistiche contiene alcune informazioni utili per monitorare i tuoi host web, incluso il tempo di attività/fermo e il numero di sessioni. Se un server è contrassegnato in rosso, assicurati che il server sia acceso e che tu possa pingarlo dalla macchina del bilanciatore di carico.

Se il tuo bilanciatore di carico non risponde, assicurati che le connessioni HTTP non siano bloccate dal firewall. Inoltre, assicurati che HAProxy sia in esecuzione utilizzando il comando qui sotto:

sudo systemctl status haproxy

Protezione della pagina delle statistiche con password

Tuttavia, se la pagina delle statistiche è semplicemente indicata nel frontend, allora è aperta per la visione pubblica, il che potrebbe non essere una buona idea. Invece, puoi assegnarle una propria porta, aggiungendo il seguente esempio 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:password

Dopo aver aggiunto il nuovo gruppo di listener, rimuovi il vecchio collegamento a stats uri dal gruppo frontend. Quando hai finito, salva il file e riavvia HAProxy.

sudo systemctl restart haproxy

Poi 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:8181

Assicurati che tutti i tuoi server siano ancora visualizzati 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 sui vostri server interni c'è almeno una certa varietà di pagine di destinazione, noterete che ogni volta che ricaricate la pagina, ricevete una risposta da un host diverso. Potete provare diversi algoritmi di bilanciamento nella sezione di configurazione o consultare la documentazione completa.

Conclusione: bilanciatore di carico HAProxy

Congratulazioni per aver configurato con successo il bilanciatore di carico HAProxy! Anche con una configurazione di base del bilanciamento del carico, potete migliorare significativamente le prestazioni e la disponibilità della vostra web application. Questa guida è solo un'introduzione al bilanciamento del carico utilizzando HAProxy, che è capace di molto di più rispetto a quanto si possa descrivere in una breve istruzione di configurazione. Vi consigliamo di sperimentare con diverse configurazioni utilizzando un'ampia documentazione, disponibile per HAProxy, e poi iniziare a pianificare il bilanciamento del carico per il vostro ambiente di produzione.

Utilizzando più host per proteggere il vostro servizio web con una riserva di potenza, il bilanciatore di carico stesso può comunque rappresentare un punto di guasto. Potete aumentare ulteriormente l'alta disponibilità impostando un IP flottante tra più bilanciatori di carico. Potete saperne di più nella nostra articolo sugli IP flottanti su UpCloud.

Ulteriori informazioni sul corso «Amministratore Linux. Virtualizzazione e clustering»***

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster