Apache Load Balancer sur Tomcat 6 – Il manque quelque chose et il ne fonctionne pas

J’essaie de faire fonctionner un équilibreur de charge Apache 2.2 basique sur deux installations Tomcat 6. Je lis toute la documentation et j’ai du mal à le faire fonctionner correctement. Je suis à peu près certain que la configuration d’Apache est correcte, mais je pense qu’il manque quelque chose dans mes parameters Tomcat qui empêche une connexion. La documentation de Tomcat Connector explique comment modifier Apache, mais ne mentionne pas ce qui doit être modifié dans les parameters Tomcat.

Voici ma configuration de base. Les 3 installations sont sur la même machine (il ne s’agit que d’une configuration de test). Ainsi, Apache 2.2 est installé dans le répertoire C: \ apache. Écoute sur le port 80. 2 Tomcat 6 s’installe, l’un écoute sur le port 81, l’autre sur le port 82. Apache achemine tout simplement vers les serveurs Tomcat, agissant comme un équilibreur de charge à 100%.

Voici les erreurs que j’obtiens dans mon fichier mod_jk.log lorsque j’essaie d’obtenir une connexion à l’ adresse http: // localhost: 80 / index.jsp . C’est une erreur 502 Bad Gateway.

[Mon Nov 15 13:05:04.681 2010] [3596:1496] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (1245): wrong message format 0x4854 from 127.0.0.1:81 [Mon Nov 15 13:05:04.681 2010] [3596:1496] [error] ajp_get_reply::jk_ajp_common.c (2058): (tomcat1) Tomcat is down or refused connection. No response has been sent to the client (yet) [Mon Nov 15 13:05:04.681 2010] [3596:1496] [info] ajp_service::jk_ajp_common.c (2543): (tomcat1) sending request to tomcat failed (recoverable), because of protocol error (attempt=1) 

Voici les parameters que j’ai dans le fichier httpd.conf d’Apache …

 LoadModule jk_module modules/mod_jk.so  JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info JkMountFile conf/uriworkermap.properties  

Voici le fichier workers.properties que j’ai …

 # # This file provides minimal jk configuration properties needed to # connect to Tomcat. # # The workers that jk should create and work with # worker.list=loadbalancer,jkstatus # # Define the servers in our cluster # worker.tomcat1.type=ajp13 worker.tomcat1.host=localhost worker.tomcat1.port=81 worker.tomcat1.lbfactor=2 worker.tomcat2.type=ajp13 worker.tomcat2.host=localhost worker.tomcat2.port=82 worker.tomcat2.lbfactor=1 # # Defining a load balancer # worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=tomcat1,tomcat2 worker.loadbalancer.sticky_session=false # # Define status worker # worker.jkstatus.type=status 

Voici le uriworkermap.properties que j’ai

 # # This file provides sample mappings for example wlb # worker defined in workermap.properties.minimal # The general syntax for this file is: # [URL]=[Worker name] /*.*=loadbalancer 

Enfin, voici la balise du moteur Tomcat dans son fichier server.xml

       

J’ai trouvé la bonne réponse après quelques fouilles supplémentaires. Je devais créer un connecteur AJP dans chaque fichier server.xml de Tomcat. Le mod_jk d’Apache se connecte à ce port, puis Tomcat relaie ce port au port du connecteur HTTP.