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



Mise en place d’un équilibrage de charge Tomcat avec Apache via Mod Proxy et Sessions Persistantes

L’intégration d’un équilibreur de charge Tomcat avec le serveur web Apache, en utilisant le module Mod Proxy, est une procédure relativement simple.

En suivant une séquence logique, l’opération se déroule généralement sans encombre. Nous allons détailler les étapes nécessaires pour configurer Apache avec Tomcat afin de créer un équilibreur de charge, en s’appuyant sur le module Mod Proxy.

L’équilibrage de charge est une pratique fortement recommandée dans les environnements de production pour optimiser la disponibilité et la performance des applications.

Configuration du serveur Web Apache

  • Activer les modules proxy_module, proxy_balancer_module et proxy_http_module dans le fichier httpd.conf d’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

Définissez une directive ProxyPass en spécifiant le nom de l’équilibreur pour la racine du contexte de votre application.

Dans cet exemple, nous utiliserons le chemin /examples pour le proxy et nommerons l’équilibreur mycluster.

Il est crucial d’inclure l’option stickysession. Son absence pourrait entraîner la distribution d’une même requête sur plusieurs serveurs Tomcat, causant des problèmes d’expiration de session au sein de votre 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 illustré dans la configuration ci-dessus, une route est spécifiée dans chaque BalancerMember. Cette route sera ensuite intégrée à l’identifiant de session.

Passons maintenant à la configuration d’Apache pour que l’identifiant JSESSIONID soit enregistré dans les logs d’accès.

  • Ajoutez la directive suivante à votre configuration LogFormat.
%{JSESSIONID}C

Par exemple:

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

Configuration de Tomcat

Il est impératif de configurer chaque instance de Tomcat avec un identifiant de route identique à celui spécifié dans les directives BalancerMember précédentes.

  • Ajoutez le paramètre jvmRoute dans le fichier server.xml de chaque instance Tomcat. Cette configuration doit être effectuée à l’intérieur de la balise du moteur (Engine).

Exemple de configuration d’une instance Tomcat sur le port 8080 :

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

Exemple de configuration d’une instance Tomcat sur le port 8090 :

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

Vérification

Générez du trafic vers votre application et analysez les logs d’accès du serveur Apache pour confirmer que les requêtes sont bien routées vers une seule instance Tomcat.

Vous devriez également observer que votre identifiant de session est complété par la route, comme illustré dans l’exemple ci-dessous :

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"

Nous espérons que ces instructions vous seront utiles pour configurer un équilibreur de charge Tomcat avec Apache Mod Proxy et la persistance de session.

Pour approfondir vos connaissances sur l’administration de Tomcat, explorez cette formation en ligne.

Cet article vous a plu ? N’hésitez pas à le partager !