Installazione del bilanciatore del carico HAProxy su CentOS

La traduzione dell'articolo è stata preparata alla vigilia dell'inizio del corso "Amministratore Linux. Virtualizzazione e clustering"

Installazione del bilanciatore del carico HAProxy su CentOS

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 è uno dei software di bilanciamento del carico open source più popolari che fornisce anche elevata disponibilità e funzionalità proxy.

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 Debian 8 и Ubuntu 16.

Installazione del bilanciatore del carico HAProxy su CentOS

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 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 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 nella pagina della documentazionese vuoi saperne di più.

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 sul pannello di controllo di UpCloud e nella scheda Rete privata nel menu Network NetPoulSafe.

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!

Installazione del bilanciatore del carico HAProxy su CentOS

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 documentazione completa.

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 ampia documentazione, disponibile per HAProxy, quindi inizia a pianificare il bilanciamento del carico per il tuo ambiente di produzione.

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 articolo sugli indirizzi IP mobili su UpCloud.

Maggiori informazioni sul corso "Amministratore Linux. Virtualizzazione e clustering"***

Fonte: habr.com

Aggiungi un commento