2013-07-08 3 views
3

Nous implémentons une petite batterie (2 nœuds) de Tomcat installée sur deux tranches dans Azure et plaçons l'équilibreur de charge Azure à l'avant. C'est fondamentalement un équilibreur de session de round-robin, non-sticky-session.Équilibrage de charge Tomcat dans Azure

Le webapp utilise le conteneur de Tomcat géré la sécurité (authentification des formulaires, actuellement via DataSourceRealm.

En tant que l'utilisateur que prévu, contourne-robin'ed au nœud qu'ils ne sont pas authentifiés, ils obtiennent des erreurs d'authentification. J'ai fait pas mal de recherches, et il ne semble pas y avoir un seul moyen prescrit pour gérer ça ... Il a été suggéré de mettre les nœuds derrière un serveur Apache et d'utiliser mod_jk; que nous modifiions le processus d'authentification pour utiliser un cookie afin de confirmer l'authentification, que nous utilisions le clustering Tomcat:

Quel serait le moyen le plus simple pour nous d'y parvenir? Notre application n'utilise pas de sessions pour autre chose que le CMS de Tomcat. Nous préférons ne pas quitter le CMS de Tomcat, même si nous ne sommes pas opposés à la mise en place d'une implémentation JAAS si nécessaire. Mais vraiment, la seule chose que nous devons prendre en charge est l'authentification entre nœuds.

Toute aide appréciée!

EDIT: Nous avons essayé Memcached sur Azure, a obtenu les éléments suivants:

2013-07-08 21:50:55.463 INFO net.spy.memcached.MemcachedConnection: Connection state changed for [email protected] 
2013-07-08 21:50:55.463 INFO net.spy.memcached.MemcachedConnection: Reconnecting due to failure to connect to {QA sa=srvr.cloud.com/1XX.1XX.1XX.1XX:11XXX, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} 
java.net.ConnectException: Connection timed out: no further information 
       at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
       at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source) 
       at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:399) 
       at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:247) 
       at net.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:915) 

Notre context.xml:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
    memcachedNodes="n1:srvr.cloud.com:11XXX" 
    sticky="false" 
    sessionBackupAsync="false" 
    lockingMode="uriPattern:/path1|/path2" 
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" 
    transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory" 
    /> 
+0

Copie possible: http://stackoverflow.com/questions/4708057/tomcat-clustering-in-microsoft-azure –

Répondre

3

Une approche serait d'accueillir memcached sur les serveurs ou Windows Azure Caching et tirer parti de memcached-session-manager pour partager les données de session entre les serveurs Tomcat. Memcached-session-manager est un gestionnaire de session tomcat qui maintient les sessions en memcached, pour les applications web hautement disponibles, évolutives et tolérantes aux pannes, supporte les configurations collantes et non collantes, et travaille actuellement avec tomcat 6. x et 7.x Pour les sessions persistantes, le basculement de session (Tomcat crash) est pris en charge, pour les sessions non collantes, il s'agit de la session par défaut (une session est servie par défaut par différents tomcats pour différentes requêtes). supporté via la migration des sessions.Il n'y aura pas non plus de point de défaillance unique, donc quand un memcached échoue, la session ne sera pas perdue (mais soit disponible dans tomcat ou dans un autre memcached). "

Voir une discussion légèrement désuète à this answer.

Questions connexes