Équilibreur de charge Tomcat avec Apache utilisant Mod Proxy et Session Sticky

Configurer Tomcat avec Apache en utilisant Proxy Module et Sticky Session

La configuration de Tomcat Load Balancer avec le serveur Web Apache à l’aide de Mod Proxy est assez simple.

C’est facile quand on suit la séquence, et tout se passe bien. J’ai répertorié étape par étape comment configurer Apache avec Tomcat pour configurer Load Balancer à l’aide de Mod Proxy.

L’équilibrage de charge est toujours recommandé dans un environnement de production pour une meilleure disponibilité.

Configuration du serveur Web Apache

  • Activer proxy_module, proxy_balancer_module et proxy_http_module dans httpd.conf du serveur 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

Ajoutez une passe de proxy avec le nom de l’équilibreur pour la racine du contexte d’application.

Dans cet exemple, j’ai un chemin de proxy comme exemples et un nom d’équilibreur comme mycluster.

Il est très important d’inclure stickysession car ne pas avoir cette option distribuera la même requête à plusieurs serveurs Tomcat, et vous aurez des problèmes d’expiration de session dans une application.

<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>

Comme vous pouvez le voir dans la configuration ci-dessus, j’ai ajouté une route dans BalancerMember afin que la valeur de la route puisse être ajoutée à l’ID de session.

Maintenant, configurons Apache pour imprimer JSESSIONID dans les journaux d’accès.

  • Ajouter ce qui suit dans la directive LogFormat
%{JSESSIONID}C

Ex:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
  • Redémarrez le serveur Web Apache

Configuration Tomcat

Vous devez configurer les instances de tomcat avec le même identifiant de route que vous l’avez fait dans BalancerMember ci-dessus.

  • Ajoutez le paramètre jvmRoute dans server.xml de Tomcat. Cela doit être ajouté dans la balise de nom du moteur.

Instance Tomcat configurée avec le port 8080

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

Instance Tomcat configurée avec le port 8090

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

Vérification

Générez une charge sur l’application et vérifiez le journal d’accès du serveur apache pour vous assurer que votre demande est acheminée vers une seule instance de tomcat.

Vous remarquerez également que votre identifiant de session est ajouté à la route, comme indiqué dans l’exemple ci-dessous.

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"

J’espère que cela vous aidera à configurer Tomcat Load Balancer avec Apache Mod Proxy et Session Sticky.

Si vous souhaitez en savoir plus sur l’administration de Tomcat, cochez ceci Cours en ligne.

Vous avez apprécié la lecture de l’article ? Que diriez-vous de partager avec le monde ?