Tomcat en mode cluster et avec session multicast

Hello,

Je m’amuse toujours comme un petit fou à utiliser mon petit cluster cubietruck et là je me suis décidé à l’utiliser avec tomcat.

Pour commencer, j’ai 3 serveurs que je vais appeler simplement server1, server2 et server3.

Et donc le principe est assez simple c’est de mettre en frontal sur le server1 un apache qui va jouer le rôle de load balancer sur 3 instances de tomcat, une sur server1,2 et 3.

APACHE

Sur le serveur principal (server1) il vous faudra installer apache et un mod

sudo apt-get install apache2 libapache2-mod-jk

ensuite éditez le fichier /etc/apache2/mods-available/jk.conf

et modifiez le de telle façon http://svn.apache.org/repos/asf/tomcat/jk/trunk/conf/httpd-jk.conf

sudo nano /etc/libapache2-mod-jk/workers.properties

//workers.properties
worker.list=loadbalancer,status
worker.server1.port=8009
worker.server1.host=server1.com
worker.server1.type=ajp13

worker.server2.port=8009
worker.server2.host=serevr2.com
worker.server2.type=ajp13

worker.server3.port=8009
worker.server3.host=server3.com
worker.server3.type=ajp13

worker.server1.lbfactor=1
worker.server2.lbfactor=1
worker.server3.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=server1,server2,server3

worker.status.type=status

d’ailleurs dans les différents fichiers hosts il faudra que vous rajoutiez l’adresse ip et l’adresse dns associée pour qu’ils se connaissent mutuellements sous les noms server1.com, server2.com et server3.com

Modifiez les paramètres d’apache

 sudo nano /etc/apache2/sites-available/default

comme suit

<VirtualHost *:80>.

………………..

JkMount /status status

JkMount /* loadbalancer

</VirtualHost *:80>

et pour finir un petit redémarrage

service apache2 restart

 

TOMCAT

Téléchargez la dernière version de tomcat et java si vous ne l’avez pas déjà (booooooooooooohhhh si vous ne l’avez pas!!!!) et placez les fichiers décompresser dans un répertoire de travail sur les 3 serveurs. Vous pourriez faire un apt-get mais je préfère pas c’est plus simple à gérer à la main je trouve.

éditez le fichier tomcat/conf/server.xml

décommentez

<Connector port= »8009″ protocol= »AJP/1.3″ redirectPort= »8443″ />

dans la balise engine

<Engine name= »Catalina » defaultHost= »localhost » jvmRoute= »server1″>

<!–For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) –>
<!–
<Cluster className= »org.apache.catalina.ha.tcp.SimpleTcpCluster »/>
–>
<Cluster className= »org.apache.catalina.ha.tcp.SimpleTcpCluster »
channelSendOptions= »8″>
<Manager className= »org.apache.catalina.ha.session.DeltaManager » 

     expireSessionsOnShutdown= »false » 

      notifyListenersOnReplication= »true »/>
<Channel className= »org.apache.catalina.tribes.group.GroupChannel »>
<Membership className= »org.apache.catalina.tribes.membership.McastService » 

     address= »228.0.0.4″
     port= »45564″
     frequency= »500″
     dropTime= »3000″/>
<Receiver className= »org.apache.catalina.tribes.transport.nio.NioReceiver »
     address= »auto »
     port= »4000″
     autoBind= »100″
     selectorTimeout= »5000″
    maxThreads= »6″/>
<Sender className= »org.apache.catalina.tribes.transport.ReplicationTransmitter »>
    <Transport className= »org.apache.catalina.tribes.transport.nio.PooledParallelSender »/>
</Sender>
<Interceptor className= »org.apache.catalina.tribes.group.interceptors.TcpFailureDetector »/>
<Interceptor className= »org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor »/>
</Channel>
<Valve className= »org.apache.catalina.ha.tcp.ReplicationValve »
       filter= ».*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt; »/>
<ClusterListener className= »org.apache.catalina.ha.session.ClusterSessionListener »/>
</Cluster>

<Context distributed= »true » path= »/ » /> #chemin des applis distribuées

</Engine>

 

maintenant tout est près à déployer.

Mettez en place tous vos tomcat sur tous vos serveurs, par contre faites attention dans votre server.xml de mettre à jour la balise engine avec le bon nom du worker  jvmRoute= »serverX »

Avant de tout lancer il faut activer le multicast sur tous les serveurs pour qu’ils puissent se reconnaître.

sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

netstat -nr

Maintenant vous pouvez tout lancer tomcat/bin/startup.sh.

D’ailleurs si vous voulez pointer vers une autre version de java n’oubliez pas que vous pouvez créer un fichier setenv.sh dans ce répertoire bin comme par exemple

export JAVA_HOME=/root/Workspace/java/jdk1.8.0_06

export CATALINA_PID= »$CATALINA_BASE/tomcat.pid »

Dans ce cas j’ai eu qq problème car à déplacer des fichiers (java et tomcat) j’ai perdu qq droits d’exécution donc un petit chmod +x * dans les répertoires bin (java et tomcat) devrait résoudre le pb.

Si vous voulez vérifier que tout fonctionne il y a un fichier jsp qui traîne ici que vous pourrez déposer dans webapps/examples/jsp

par contre pour rendre une application distribuable il faudra que le fichier web.xml de l’appli contienne l’information

<distributable/>

Donc n’oubliez pas de mettre à jour le web.xml de « examples »

 

Voici un très bon tuto et cet autre tuto qui m’ont permis de réaliser cela.

So Enjoy!