Les clusters Tomcat visent à augmenter la capacité de charge et à répartir uniformément les accès entre différents serveurs. Prenons comme exemple l'architecture illustrée dans la figure suivante.

Les clusters Alibaba Cloud fonctionnent généralement selon deux modes. Le premier est une session entièrement centralisée, où tous les nœuds restent cohérents entre eux. Le second s'applique à une session unique, où un nœud spécifique du cluster est désigné pour fournir les services.
-
Installez Tomcat et le JDK sur l'instance ECS
Cet exemple utilise Tomcat 7 et le JDK 7. Nous vous recommandons de télécharger d'abord Tomcat sur votre stockage local, puis de le transférer vers l'instance ECS une fois la configuration terminée.
-
Ajoutez les bibliothèques compatibles avec Memcached à Tomcat.
Pour plus d'informations sur la configuration de memcached-session-manager, consultez ce document.
Cette étape implique le téléchargement de certaines bibliothèques. Les adresses de téléchargement sont fournies dans le document précédent. Placez les bibliothèques téléchargées dans le répertoire
Tomcat/lib, comme indiqué dans la figure suivante.RemarqueRemarque : Le préfixe
msm-de chaque fichier n'existe pas initialement. Il a été ajouté pour faciliter la gestion.
Grâce à ces bibliothèques, vous pouvez configurer la connexion de Tomcat à Memcache.
-
Synchronisez les sessions Tomcat avec Memcache.
Cette étape nécessite une configuration spécifique de Tomcat. Deux modes de configuration sont disponibles : STICKY et NON-STICKY.
STICKY : L'équilibreur de charge distribue toutes les requêtes vers le même nœud du cluster en fonction des sessions utilisateur. Toutes les données de session sont récupérées depuis Tomcat, qui sauvegarde une session dans Memcache afin de garantir une haute efficacité lors de la récupération d'une session.
-
NON-STICKY : L'équilibreur de charge distribue les requêtes pour chaque connexion séparément, sans tenir compte des sessions utilisateur. Les sessions sont conservées dans Memcache et toutes les lectures et écritures de session s'effectuent dans Memcache. Ce mode nécessite un accès distant aux données, ce qui réduit l'efficacité, mais il répond le mieux aux attentes en matière de cluster ou de cache centralisé.
Dans le fichier
/Tomcat/conf/context.xml, modifiez la configuration de la connexion à Memcache et ajoutez les descriptions de configuration suivantes sous l'élément<Context>. Voici les deux modes de configuration Tomcat :Mode STICKY
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="Memcache address: 11211" username="Memcache instance name" password="Memcache password" memcachedProtocol="binary" sticky="true" sessionBackupAsync="true" sessionBackupTimeout="1000" requestUriIgnorePattern=".*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html|htm|xml|json)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" ></Manager>Mode NON-STICKY
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="Memcache address: 11211" username="Memcache instance name" password="Memcache password" memcachedProtocol="binary" sticky="false" lockingMode="auto" sessionBackupAsync="false" sessionBackupTimeout="1000" requestUriIgnorePattern=".*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html|htm|xml|json)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />RemarqueRemarque : Le paramètre
memcachedProtocol="binary"est requis car la valeur d'attribut pour le mode d'extension Tomcat memcached esttext, mais Alibaba Cloud ne prend en charge que les données binaires.
-
Modifiez les paramètres JVM et NIO de Tomcat.
-
Dans le répertoire
/Tomcat/bin/, modifiez les paramètres JVM et ajoutez le fichiersetenv.sh. Écrivez la configuration pour l'optimiser.CATALINA_OPTS="-server -Xms3072m -Xmx3072m -Xmn1024m -XX:PermSize=96m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=50 -XX:+CMSPermGenSweepingEnabled" -
Dans le fichier
/Tomcat/conf/context.xml, modifiez les paramètres NIO.Commentez la ligne
Connector=8080d'origine et ajoutez la configuration suivante, avec le mode NIO activé.<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" URIEncoding="UTF-8" useBodyEncodingForURI="true" enableLookups="false" redirectPort="8443" />
-
-
Créez une page JSP pour vérifier les sessions.
Créez un fichier JSP dans le répertoire
Tomcat/webapps/ROOT.<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'session.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h1> <% out.println("This is (TOMCAT1), SESSION ID:" + session.getId()); %> </h1> </body> </html> -
Téléchargez le dossier Tomcat configuré vers l'instance ECS.
Une fois le téléchargement lancé, vous pouvez accéder à votre Tomcat :
http://yourserver:8080/session.jsp. Si le texte suivant s'affiche, cela indique que Tomcat est correctement connecté à Memcache.This is (TOMCAT1), SESSION ID:CAC189E5ABA13FFE29FCB1697F80182B-OCS
Remarque : Memcache peut être utilisé normalement pour mettre en cache les sessions Tomcat lorsque la charge du site web est faible. Lorsque la charge de trafic est élevée et que vous rencontrez des échecs de session fréquents, vous devez mettre à niveau les règles Memcache pour rétablir le fonctionnement normal.