Tomcat Load Balancer con Apache utilizzando Mod Proxy e Session Sticky

Configura Tomcat con Apache utilizzando il modulo proxy e la sessione permanente

La configurazione di Tomcat Load Balancer con il server Web Apache utilizzando Mod Proxy è abbastanza semplice.

È facile quando segui la sequenza e tutto va bene. Ho elencato di seguito passo dopo passo come configurare Apache con Tomcat per configurare Load Balancer usando Mod Proxy.

Il bilanciamento del carico è sempre consigliato in un ambiente di produzione per una migliore disponibilità.

Configurazione del server Web Apache

  • Abilita proxy_module, proxy_balancer_module e proxy_http_module in httpd.conf del server web Apache
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Aggiungi il pass proxy insieme al nome del bilanciatore per la radice del contesto dell’applicazione.

In questo esempio, ho un percorso proxy come esempi e il nome del bilanciatore come mycluster.

Molto importante includere stickysession poiché non avere questa opzione distribuirà la stessa richiesta a più server Tomcat e avrai problemi di scadenza della sessione in un’applicazione.

<IfModule proxy_module>
ProxyRequests Off
ProxyPass /examples balancer://mycluster stickysession=JSESSIONID
ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID
<Proxy balancer://mycluster>
BalancerMember http://localhost:8080/examples route=server1
BalancerMember http://localhost:8090/examples route=server2
</Proxy>
</IfModule>

Come puoi vedere nella configurazione sopra, ho aggiunto un percorso in BalancerMember in modo che il valore del percorso possa essere aggiunto all’ID sessione.

Ora configuriamo Apache per stampare JSESSIONID nei log di accesso.

  • Aggiungi quanto segue nella direttiva LogFormat
%{JSESSIONID}C

Ex:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
  • Riavvia il server Web Apache

Configurazione Tomcat

Devi configurare le istanze Tomcat con lo stesso route id come hai fatto in BalancerMember sopra.

  • Aggiungi il parametro jvmRoute in server.xml di Tomcat. Questo deve essere aggiunto nel tag del nome del motore.

Istanza Tomcat configurata con porta 8080

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">

Istanza Tomcat configurata con porta 8090

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">

Verifica

Genera un carico sull’applicazione e controlla il registro di accesso del server Apache per assicurarti che la tua richiesta venga instradata a una sola istanza Tomcat.

Noterai anche che il tuo ID sessione è aggiunto al percorso come mostrato nell’esempio seguente.

Ex:

127.0.0.1 - - [18/Sep/2013:10:02:02 +0800] "POST /examples/servlets/servlet/RequestParamExample HTTP/1.1" 200 662 "http://localhost/examples/servlets/servlet/RequestParamExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:06 +0800] "GET /examples/servlets/servlet/RequestInfoExample HTTP/1.1" 200 693 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:17 +0800] "GET /examples/servlets/reqinfo.html HTTP/1.1" 200 3607 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:20 +0800] "GET /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1124 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:26 +0800] "POST /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1142 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:28 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf HTTP/1.1" 200 1159 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B4EC1D73CF8C7482B7D46.server2" 
127.0.0.1 - - [18/Sep/2013:10:02:32 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=foo&datavalue=bar HTTP/1.1" 200 1174 "http://localhost/examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:36 +0800] "GET /examples/servlets/servlet/RequestHeaderExample HTTP/1.1" 200 1423 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"

Spero che questo ti aiuti nella configurazione di Tomcat Load Balancer con Apache Mod Proxy e Session Sticky.

Se sei interessato a conoscere l’amministrazione di Tomcat, controlla questo corso in linea.

Ti è piaciuto leggere l’articolo? Che ne dici di condividere con il mondo?