Nella prima parte di questo blog abbiamo impostato HAProxy su un nodo Virtual Load Balancer su E2E Cloud. Abbiamo anche configurato HAProxy per instradare le richieste ai server Web back-end utilizzando una politica round-robin.
In questa seconda e conclusiva parte di questo blog, analizzeremo un paio di impostazioni di configurazione avanzate richieste dalla maggior parte dei siti Web:persistenza della sessione e accesso sicuro al sito Web tramite SSL. Ma prima di farlo, mostreremo come la nostra singola istanza HAProxy può soddisfare un grande sito Web con molte applicazioni Web, in virtù degli ACL. Nel frattempo, presenteremo alcune opzioni di configurazione aggiuntive, come la politica round robin ponderata, e concluderemo con indicazioni su altre considerazioni importanti per un'implementazione di produzione.
Configurazione del bilanciamento del carico per più applicazioni Web
Molti siti Web di grandi dimensioni sono costituiti da diversi cluster di server Web, ciascuno dei quali ospita un'applicazione Web diversa. Ad esempio, potrebbe esserci un sito Web con contenuti principali insieme a un sito Web per divertimento e intrattenimento. HAProxy è in grado di instradare le richieste al cluster corretto in base a modelli di URL e Elenchi di controllo degli accessi (ACL).
Per illustrare questa capacità, creiamo prima due nuovi nodi di server Web su E2E Cloud, denominati "webserver3" e "webserver4". Come al solito, installiamo il web server Apache ei pacchetti PHP sui due nuovi nodi. Quindi distribuiamo una seconda applicazione PHP all'URL '/fun/films.php' su solo questi due nodi appena aggiunti . (La seconda applicazione utilizza la persistenza della sessione e le sue funzionalità verranno spiegate nella sezione successiva.)
Quindi, abbiamo i seguenti nodi (4 server web e un sistema di bilanciamento del carico) visibili sulla nostra dashboard:
Figura 1:server Web per più applicazioni Web
Quindi HAProxy deve indirizzare le richieste dei client per l'URL '/fun/films.php' solo a uno dei nodi 'webserver3' e 'webserver4', altrimenti la richiesta non può essere soddisfatta. Per soddisfare questo requisito, modifichiamo la configurazione di HAProxy (/etc/haproxy/haproxy.cfg) e creiamo un altro backend (denominato "film") composto solo dai due nuovi nodi del server web. Questo è in aggiunta al backend esistente chiamato "sito".
Figura 2:configurazione del backend per una nuova applicazione
Quindi, nella configurazione frontend esistente, introduciamo un ACL come mostrato di seguito. Ciò significa che qualsiasi percorso URL che inizia con '/fun' verrà instradato al backend denominato 'films', mentre per impostazione predefinita tutte le altre richieste atterreranno sul backend (preesistente) denominato 'site' (costituito da nodi solo 'websrv1' e 'websrv2').
Figura 3:configurazione frontend con ACL
Figura 4:bilanciamento del carico HAProxy con ACL
Impostazioni di configurazione avanzate
Normativa ponderata Round Robin :Durante le modifiche agli ACL, abbiamo introdotto un peso a ciascun server. In produzione, server diversi possono avere una potenza di calcolo diversa, quindi l'utilizzo dei pesi consente a HAProxy di instradare più richieste a server più potenti. (Nel nostro caso tutti i nodi del server Web sono simili e tutti i pesi sono uguali, ma possiamo usarlo come modello e modificarlo in uno scenario diverso.)
Numero massimo di connessioni per server :In secondo luogo, abbiamo anche utilizzato il parametro 'maxconn' a livello di server back-end , in modo che ogni server possa limitare il numero di connessioni a quanto è ragionevole per la sua potenza di elaborazione. Il "maxconn" globale dovrebbe essere maggiore della somma totale dei valori a livello di server di questo parametro (lasciando spazio per l'aggiunta di più nodi del server Web per la scalabilità).
Vischiosità della sessione
La nuova applicazione PHP utilizza sessioni PHP. Ogni volta che un client accede a questa applicazione, fornisce il nome di un film preferito (tramite un parametro HTTP GET denominato "fav"), che viene aggiunto alla sessione PHP. Il server risponde con l'elenco dei film preferiti (unico per ogni cliente) raccolto finora.
- inizio_sessione();
- $fav =$_GET['fav'];
- if ( isset( $_SESSION['preferiti'] ) ) {
- $_SESSION['preferiti'] .=' , ';
- $_SESSION['preferiti'] .=$fav;
- } altro {
- $_SESSION['preferiti'] =$preferito;
- }
- $msg ='I miei film preferiti:'. $_SESSION['preferiti'];
- ?>
-
-
I miei film preferiti -
- echo $msg;
- ?>