11 août 2011

Comment mettre Apache 2.2.19 en frontal de Tomcat 6.0.32 et en plus faire du load balancing ?

Le but de cet article est de mettre Apache en frontal de Tomcat et aussi de vous montrer comment on implémente le load balancing. Tout a été testé sous Linux Fedora 15.

Pour la partie load balancing, vous devez au préalable avoir créé plusieurs instances de Tomcat. Pour cela vous pouvez vous référer à mon article précédent à ce sujet.

Avant de débuter quoi que ce soit, il nous faut des webapps, des .war d'exemples. Je les ai téléchargé sur les sites ci-dessous :
Calendar.war (à déployer sur tomcat 1)
dwr.war (à déployer sur tomcat 2)
myServletWAR.war (à déployer sur tomcat 3)
sample.war (à déployer sur tomcat 1, tomcat 2 et tomcat 3 => test du loadbalancing)

Tout d'abord, Apache a besoin d'un module lui permettant de communiquer avec Tomcat via le connecteur ajp. Ce module s'appelle mod_jk. Comment "builder" le connecteur mod_jk ? Comment le rendre utilisable par Apache ?

Pour commencer, téléchargez tomcat-connectors-1.2.32-src.tar.gz sur http://tomcat.apache.org/connectors-doc/

Puis vérifiez l'intégrité du fichier téléchargé :
md5sum tomcat-connectors-1.2.32-src.tar.gz

Comparez la valeur obtenue avec celle indiquée sur le site tomcat.apache.org

Décompressez l'archive dans le répertoire de votre choix, pour ma part ce sera /usr/local/src

cd /usr/local/src/
tar xvf /home/fatiha/Téléchargements/tomcat-connectors-1.2.32-src.tar.gz

Ensuite nous allons suivre la procédure définie dans le fichier BUILD.txt présent à la racine de l'archive (je modifie au passage le répertoire d'installation d'apache) :

cd native
./configure --with-apxs=/usr/local/apache2/bin/apxs

Bon de mon côté, ça n'a pas marché du 1er coup, j'ai une erreur à cette étape :
configure: error: C++ preprocessor "/lib/cpp" fails sanity check

Je fais une petite recherche sur Google, tombe sur ce forum :
Et donc j'installe ce qu'il me manque via cette commande sous Linux Fedora 15 :
yum install gcc-c++.x86_64

Puis je relance la commande :
./configure --with-apxs=/usr/local/apache2/bin/apxs

Cela fonctionne à présent, je continue en lançant les deux commandes ci-dessous :
make
make install

Ensuite on vérifie que le fichier mod_jk.so a été placé au bon endroit à savoir dans :
/usr/local/apache2/modules/

On jette un coup d'oeil aux droits du fichier, les mettre à 755 si besoin.

Ce n'est pas terminé, il nous faut maintenant configurer Apache pour qu'il charge le module mod_jk, il suffit pour cela d'ajouter ces quelques lignes dans le fichier httpd/conf :

Screenshot_hhtpd_conf_mod_jk


Pour que cette modification soit prise en compte, il faudra redémarrer Apache.

A présent, nous devons créer deux fichiers importants pour connecter Apache et Tomcat :
mod_jk.conf et tomcat-workers.properties.

Voilà le contenu du fichier mod_jk.conf, c'est un exemple, à vous de l'adapter :
# Worker File

JkWorkersFile "conf/tomcat-workers.properties"

# Log set up
JkLogFile "logs/mod_jk.log"
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# applis web accessibles par apache dans le serveur web Tomcat

JkMount /Calendar/* tom1
JkMount /Calendar tom1

JkMount /dwr/* tom2
JkMount /dwr tom2

JkMount /myServletWAR/* tom3
JkMount /myServletWAR tom3

JkMount /sample/* loadbalancing_tom
JkMount /sample loadbalancing_tom

Ensuite nous allons éditer le fichier tomcat-workers.properties et le remplir de la manière suivante :

# liste des workers
worker.list=tom1,tom2,tom3,loadbalancing_tom

# tom1 worker definition
worker.tom1.host=localhost
worker.tom1.port=8109
worker.tom1.type=ajp13
worker.tom1.lbfactor=1

# tom2 worker definition
worker.tom2.host=localhost
worker.tom2.port=8209
worker.tom2.type=ajp13
worker.tom2.lbfactor=1

# tom3 worker definition
worker.tom3.host=localhost
worker.tom3.port=8309
worker.tom3.type=ajp13
worker.tom3.lbfactor=1

# loadbalancing_tom worker definition
worker.loadbalancing_tom.type=lb
worker.loadbalancing_tom.balanced_workers=tom1,tom2,tom3

Les noms des workers correspondent à ceux définis dans le fichier server.xml de chacune des instances Tomcat, au niveau de la balise Engine, attribut jvmRoute (cf. mon article précédent à ce sujet). Idem pour les numéros des ports ajp qui correspondent à ceux définis dans le fichier server.xml de chacune des instances tomcat : tom1, tom2, tom3.

L'étape suivante consiste à tester que cela fonctionne. Il faut pour cela démarrer les trois instances de Tomcat (cf. article précédent) puis lancer apache :

cd /usr/local/apache-tomcat-6.0.32/
catalina.sh start
export CATALINA_BASE=/home/fatiha/tomcat1
catalina.sh start
export CATALINA_BASE=/home/fatiha/tomcat2
catalina.sh start
export CATALINA_BASE=/home/fatiha/tomcat3
catalina.sh start
/etc/init.d/httpd -k start

Ouvrons un navigateur et tapons l'adresse : http://localhost/Calendar
Si tout va bien, c'est Apache qui va recherche l'appli correspondante stockée dans Tomcat. En effet, ça fonctionne.
On fait de même pour les deux autres applis :
http://localhost/dwr
http://localhost/myServletWAR

A présent, nous allons tester le load balancing à proprement parlé :
http://localhost/sample
Et ça fonctionne !!
----
J'ai pu rédiger cet article grâce à ma toute récente formation Apache-Tomcat-Jonas. Merci à ma formatrice :)

Posté par fatihaelh à 01:40 - Tomcat - Commentaires [2] - Permalien [#]

Commentaires

    Article très intéressant et vraiment complet!
    Merci

    Posté par Rachid, 13 août 2011
  • Contente que cela puisse t'aider Rachid.

    Posté par Fatiha, 13 août 2011

Poster un commentaire