Installer et configurer Glassfish en mode cluster - 3ème partie
Me voici rendu à l'installation du serveur WEB et configuration du load labalancing coté HTTP...
Préambule
me voici avec une webapp frâichement compilée et construite sous la forme d'une archive EAR .
Déploiement de l'application
Avec ASADMIN
$ bin/asadmin.bat deploy --target cluster-1 --enabled=true "d:\\java\\travel\\dist\\travel.ear" Command deploy executed successfully.
Avec la console
Installation du serveur HTTP
J'ai installé un serveur Apache HTTPD et le connecteur mod_jk.
Configuration de GLASSFISH
Il faut d'abord créer la route coté glassfish pour la connexion via mod_jk:
Configuration du cluster
$ asadmin create-jvm-options --target cluster-1 "-DjvmRoute=\\${AJP_INSTANCE_NAME}" Command create-jvm-options executed successfully. $ asadmin create-jvm-options --target cluster-1 "-Dcom.sun.enterprise.web.connector.enableJK=\\${AJP_PORT}" Command create-jvm-options executed successfully.
Assignation des ports et références AJP pour chaque instance
$ asadmin create-system-properties --target cluster-1-nodeagent-1-instance-1 AJP_INSTANCE_NAME=instance1 Command create-system-properties executed successfully. $ asadmin create-system-properties --target cluster-1-nodeagent-1-instance-1 AJP_PORT=9000 Command create-system-properties executed successfully. $ asadmin create-system-properties --target cluster-1-nodeagent-1-instance-2 AJP_INSTANCE_NAME=instance2 Command create-system-properties executed successfully. $ asadmin create-system-properties --target cluster-1-nodeagent-1-instance-2 AJP_PORT=9001 Command create-system-properties executed successfully.
Après, il faut aller dans la console web, puis dans le menu configuration>cluster-1-config>system properties et ajouter les deux propriétés et leur valeur par défaut - je n'ai pas réussi à faire autrement. Redémarrer le cluster
Coté serveur APACHE HTTPD
Le fichier workers.properties
qui définit les routes HTTP:
worker.list=loadbalancer worker.instance1.type=ajp13 worker.instance1.host=127.0.0.1 worker.instance1.port=9000 worker.instance1.lbfactor=50 worker.instance1.cachesize=10 worker.instance1.cache_timeout=600 worker.instance1.socket_keepalive=1 worker.instance1.socket_timeout=300 worker.instance2.type=ajp13 worker.instance2.host=127.0.0.1 worker.instance2.port=9001 worker.instance2.lbfactor=50 worker.instance2.cachesize=10 worker.instance2.cache_timeout=600 worker.instance2.socket_keepalive=1 worker.instance2.socket_timeout=300 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=instance1,instance2
Le fichier httpd.conf
LoadModule jk_module modules/mod_jk.so [...] <IfModule jk_module> JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel debug JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkMount /travel/* loadbalancer JkMount /clusterjsp/* loadbalancer </IfModule>
En essayant de tester la connexion, j'obtiens l'erreur suivante :
[#|2008-12-15T17:15:20.122+0100|SEVERE|sun-appserver9.1|org.apache.tomcat.util.threads.ThreadPool|_ThreadID=22;_ThreadName=TP-Processor2;_RequestID=2df87949-340b-4efa-a4c3-39296e85c45e;|PWC5752: Caught exception (java.lang.NoSuchFieldError: USE_CUSTOM_STATUS_MSG_IN_HEADER) executing org.apache.jk.common.ChannelSocket$SocketConnection@97ccbc, terminating thread|#]
Conclusion
S'il ne devait exister q'un seul bug bloquant dans une application je tomberai dessus .... Ce dernier semble être lié au connecteur MOD_JK APACHE <-> GLASSFISH. Il est a priori résolu dans la version 2.1.
A ce stade, soit j'utilise le serveur HTTP de SUN qui semble être mieux intégré avec GLASSFISH - le contraire serait étonnant -, soit j'attends la 2.1 . Je pense tester quand même avec la première solution