GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Utilizzo di HAProxy per il bilanciamento del carico su E2E Cloud:impostazione di criteri Round-Robin

HAProxy è un bilanciatore di carico open source con prestazioni davvero impressionanti. Viene utilizzato per il front-end anche di applicazioni Web su scala planetaria come Twitter. Può bilanciare il carico delle applicazioni di rete su TCP (Layer3) e HTTP (Layer 7). Inoltre, esegue il failover delle richieste alle istanze del server attive quando richiesto e quindi offre disponibilità elevata (HA).

E2E Networks offre nodi designati con potenza di calcolo adatta all'esecuzione di un sistema di bilanciamento del carico ad alte prestazioni come HAProxy. Questi nodi sono chiamati nodi Virtual Load Balancer (VLB). In questo blog spiegheremo come configurare HAProxy su un nodo Virtual Load Balancer su E2E Cloud. Utilizzeremo HAProxy al livello 7, per frontend di applicazioni PHP in esecuzione su server Web Apache. Nella seconda e conclusiva parte di questo blog, analizzeremo alcuni passaggi aggiuntivi che la maggior parte degli amministratori di siti Web deve eseguire, oltre alla configurazione di base. Questi passaggi aggiuntivi sono:implementazione della persistenza della sessione e protezione dell'accesso al sito Web tramite SSL. In larga misura, questi due blog sono autonomi e, insieme, dovrebbero aiutare gli amministratori di sistema a configurare HAProxy senza problemi come il sistema di bilanciamento del carico front-end per le applicazioni Web distribuite su E2E Cloud.

Installazione e configurazione di base

Sebbene il nostro focus sia su HAProxy, inizieremo con l'installazione di due server Web, a cui possono essere indirizzate le richieste HTTP. Dopo aver effettuato l'accesso alla nostra dashboard E2E Networks, seguiamo i collegamenti a "Crea nodo" e scegliamo una distribuzione Ubuntu 16.04 con 1 CPU e 2 GB di RAM . Lascia che questo nodo di calcolo virtuale sia chiamato "websrv1 '. Quindi apriamo un altro nodo identico per installare una seconda istanza del server Web, denominata "websrv2 '. Su ogni nodo del web server installiamo Apache 2.4 e PHP, eseguendo sul terminale (di ogni nodo del web server) i seguenti comandi:

  1. apt-get update 
  2. apt-get install apache2 # installa il server web
  3. apt-get install php libapache2-mod-php php-mcrypt # php e relativi pacchetti
  4. systemctl enable apache2 # abilita il server web per l'avvio al riavvio del sistema
  5. systemctl riavvia apache2 # riavvia il server web
  6. systemctl status apache2 # controlla che il server web sia attivo e funzionante 

Per testare che le istanze del server Web possono server PHP, creeremo un semplice file PHP nella directory principale del documento (/var/www/html) su ciascun server Web utilizzando l'editor vi :


         
           
               

Saluto


                                echo “Hello World”;
                ?>
           
       

Ora, se puntiamo il nostro browser su http:///greet.php , dovrebbe essere visualizzato questo saluto "Hello World". Possiamo sostituire l'indirizzo IP di ciascuno dei nodi websrv1 e websrv2 a turno.

Quindi, siamo pronti per installare HAProxy per il frontend dei server web. Dal nostro dashboard E2E Networks, creiamo di nuovo un nodo, ma questa volta da un "Appliance". Scegliamo un'appliance di tipo 'Load Balancing HAProxy'. Sono disponibili diverse configurazioni, di cui scegliamo VLB-B-1 (5 VCPU e 4 GB di RAM) per la nostra istanza HAProxy.

Figura 1:creazione di un nodo di bilanciamento del carico virtuale

I nodi VLB su E2E Cloud sono potenti nodi di calcolo in esecuzione su CentOS 7. Per installare HAProxy su ciascuno di questi nodi, eseguiamo i seguenti comandi sul terminale:

  1. yum install haproxy # install HAProxy
  2. systemctl enable haproxy # abilita HAProxy per l'avvio al riavvio del sistema
  3. systemctl riavvia haproxy # riavvia HAProxy
  4. systemctl status haproxy # controlla che HAProxy sia attivo e funzionante 

Nella nostra distribuzione avremo bisogno di due pacchetti aggiuntivi per il funzionamento di HAProxy:syslog e openssl. Poiché i nodi VLB (in esecuzione su CentOS) sono preinstallati con questi due pacchetti, non è necessaria alcuna fase di installazione aggiuntiva. Tuttavia, abbiamo bisogno di alcuni passaggi di configurazione per HAProxy anche prima che il bilanciamento del carico inizi a funzionare.

Configurazione generica HAProxy

Il file di configurazione HAProxy si trova in /etc/haproxy/haproxy.cfg e viene fornito con alcune impostazioni predefinite, alcune delle quali potrebbero dover essere modificate. Questo file di configurazione dovrebbe avere almeno un "frontend" e almeno un "backend" definito. Ogni front-end esegue il bilanciamento del carico su uno o più back-end. Un back-end è costituito da diversi server Web che servono la stessa applicazione Web, per scalabilità e ridondanza. Ma c'è anche una sezione in questo file etichettata "generica" ​​che riguarda l'installazione complessiva di HAProxy e una sezione "predefinita" che specifica i valori dei parametri applicabili a tutti frontend e backend definiti qui.

Connessioni massime :Nella sezione "globale", impostiamo il parametro "maxconn" (il numero massimo di connessioni client che questo sistema di bilanciamento del carico può gestire su tutti backend a cui si rivolge). Questo parametro può essere impostato utilizzando le Linee guida per il dimensionamento HAProxy o, al contrario, possiamo scegliere un nodo VLB da E2E Cloud, in base al carico di picco previsto che il nostro sito Web potrebbe incontrare. Con il nostro VLB-B-1 scelto node, 4096 è un valore ragionevole per 'maxconn' a livello globale.

Figura 2:parametri di configurazione globali e predefiniti per HAProxy

Protocollo: Nella nostra distribuzione HAProxy intercetterà e riequilibrerà il traffico HTTP. Questo è configurato impostando la modalità nella sezione di default sopra.

  1. modalità http

Registrazione :Si raccomanda che HAProxy utilizzi syslog . Su CentOS, questo significa impostare il parametro "log" su "local2" come mostrato nello screenshot sopra. Inoltre, anche la configurazione syslog sul nodo HAProxy (/etc/rsyslog.conf) deve essere modificata in modo che sia in ascolto sulla porta UDP 514.

Figura 3:configurazione Syslog sul nodo HAProxy

Per assicurarci che tutti i messaggi di log su 'local2' in un file separato esclusivamente per HAProxy (/var/log/haproxy.log), dobbiamo creare un file haproxy.conf nella directory / etc/rsyslog.d e digita la seguente riga:

  1. local2.* /var/log/haproxy.log

Per la tracciabilità delle richieste end-to-end, dovremmo anche modificare il formato di registro del server Web Apache nel file di configurazione del server Web (/etc/apache2/apache2.conf). Su ciascun nodo del server Web, modifichiamo LogFormat per includere l'indirizzo client effettivo (X-Forwarded-For) da cui ha avuto origine la richiesta HTTP (invece di visualizzare l'indirizzo IP del nodo HAProxy).

Figura 4:LogFormat del server Web Apache

Statistiche HAProxy :HAProxy può essere configurato per visualizzare le statistiche delle richieste su un'interfaccia utente basata sul Web. Possiamo impostare un URL per visualizzare le statistiche HAProxy (/lb-stats) protette utilizzando l'autenticazione di base.

Altre impostazioni predefinite :La sezione "predefiniti" ha una serie di parametri di timeout che abbiamo lasciato invariato. Ma in produzione, ogni amministratore del sito potrebbe voler ottimizzare i timeout in base a fattori come la latenza della rete, il tempo di elaborazione all'estremità del server, ecc. Abbiamo introdotto l'opzione "httpclose" in modo che le connessioni del client HTTP vengano chiuse non appena quando la risposta viene restituita, senza consumare risorse inutilmente (a meno che non sia presente un'impostazione Keep-Alive per le connessioni HTTP). E ci siamo assicurati che l'indirizzo IP del client effettivo fosse inoltrato fino al server web per la tracciabilità (usando l'opzione "option forwardfor" parametro). Per le definizioni dettagliate dei parametri di configurazione HAProxy, HAProxy documentazione dovrebbe essere consultato.

Semplice bilanciamento del carico Round-Robin

Inizialmente, abbiamo impostato un solo sito Web (costituito dalla semplice app PHP Greeter menzionata in precedenza), da bilanciare con la nostra installazione di HAProxy. Abbiamo già configurato due server Web e un sistema di bilanciamento del carico (HAProxy) come elencato nella dashboard di E2E Cloud.

Figura 5:server Web e nodi di bilanciamento del carico

Per prima cosa leghiamo HAProxy a un indirizzo IP e una porta adeguati (di solito la porta 80 per la modalità http) sul nostro nodo VLB . L'indirizzo IP deve essere rivolto verso l'esterno per accettare le richieste dei client. Questo ci porta a definire un "frontend", chiamato "httptraffic", come il seguente (in /etc/haproxy/haproxy.cfg). Qui, per impostazione predefinita, questo frontend bilancia il carico di qualsiasi richiesta del client al backend denominato "sito".

Figura 6:configurazione frontend per HAProxy

Quindi, ovviamente, dobbiamo definire un "backend" chiamato "site". Dovrebbe essere costituito dagli indirizzi IP dei server web a cui indirizzare le richieste (sebbene dovremmo usare indirizzi interni/privati per questo scopo). E specifichiamo che la politica di bilanciamento del carico è "round-robin". HAProxy ci consente inoltre di abilitare controlli sanitari periodici dei nodi di backend, utilizzando il parametro ‘check’.

Figura 7:configurazione backend per HAProxy

A questo punto dobbiamo riavviare syslog e HAProxy sul nodo di bilanciamento del carico:

  1. systemctl riavvia rsyslog
  2. systemctl riavvia l'haproxy

Impostazioni firewall

Prima di accedere all'applicazione Web tramite HAProxy, è necessario aprire la porta 80 (per HAProxy configurato per la modalità http) sul nodo di bilanciamento del carico virtuale e la porta UDP 514 per syslog. Su CentOS, questo richiede la configurazione di iptables opportunamente:

  1. iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
  2. iptables -A INPUT -i eth0 -p udp –dport 514 -j ACCEPT
  3. iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
  4. systemctl riavvia iptables

Test

In questa fase possiamo effettivamente testare la funzionalità di bilanciamento del carico e alcune delle impostazioni di configurazione (inclusa la registrazione e la raccolta di statistiche) menzionate nella sezione precedente.

Per rilevare le richieste che arrivano su HAProxy, eseguiamo il seguente comando sul nodo di bilanciamento del carico:

  1. coda -f /var/log/haproxy.log

Per HAProxy, questo file di registro (/var/log/haproxy.log) viene aggiornato tramite syslog.

Allo stesso modo, possiamo controllare i log di accesso su ciascun nodo del server web per tracciare la richiesta end-to-end.

  1. tail -f /var/log/apache2/access.log

Ora accediamo alla semplice applicazione PHP Greeter da due macchine diverse . Su ogni macchina client possiamo puntare un browser all'URL:

http:///greet.php

Dovremmo trovare aggiornamenti ai registri HAProxy. (Questo verifica anche che la nostra configurazione syslog funzioni.)

Figura 8:registri HAProxy (bilanciamento del carico round-robin)

Una delle richieste è servita dal nodo websrv1 mentre l'altra è servita dal nodo websrv2. Ciò è evidente dai registri di accesso su ciascun server Web e dalla stretta corrispondenza dei timestamp. Gli indirizzi IP del client vengono registrati anche all'interno di HAProxy e nei registri del server Web.

Figura 9:log di accesso dal nodo:websrv1

Figura 10:log di accesso dal nodo:websrv2

I seguenti saluti verranno visualizzati sul browser ciascuno macchina client:

Figura 11:visualizzazione del browser

Statistiche del bilanciamento del carico :Finalmente possiamo controllare le statistiche HAProxy puntando il nostro browser al seguente URL (configurato nella sezione 'predefiniti'):

http:///lb-stats

Figura 12:statistiche del bilanciamento del carico

Conclusione e passaggi successivi

Finora abbiamo impostato correttamente il bilanciamento del carico sul cloud E2E utilizzando HAProxy. Nella parte successiva (e conclusiva) di questo blog, porteremo questa configurazione al livello successivo abilitando sessioni permanenti e un accesso sicuro al sito Web, e inoltre creeremo un sito Web più grande con più applicazioni. Questi passaggi ci porteranno più vicini a un'implementazione di produzione.

Segui il link sottostante per vedere il passaggio 2:

Utilizzo di HAProxy per il bilanciamento del carico su E2E Cloud:stabilità e sicurezza della sessione


Ubuntu
  1. Domande frequenti su MyAccount di E2E

  2. Analisi dei casi a favore e contro l'impostazione dello spazio di scambio su istanze cloud

  3. Configurazione della rete su Ubuntu 18.04 per Xen Hypervisor

  4. Configurazione del bilanciamento del carico HAproxy in Ubuntu 14.04

  5. sysctl impostazione per carico elevato e prevenzione DDoS

Suggerimenti per l'utilizzo dello schermo

Come configurare HAProxy come Load Balancer per Nginx su CentOS 8

Configura il bilanciamento del carico con HAProxy, Nginx e Keepalived in Linux

Bilanciamento del carico con HAProxy, Nginx e Keepalived in Linux

Come configurare HAProxy come Load Balancer per Nginx in CentOS 7

Come configurare il bilanciamento del carico con NGINX su Jelastic Cloud