Clustering avec Glassfish

Ce cours a pour but de vous introduire les bases pour configurer et effectuer du clustering avec Glassfish 2.1. 7 commentaires Donner une note à l'article (5)

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Ce cours introduit les bases vous permettant de comprendre les concepts et de faire du clustering sous Glassfish 2.1.

L'ensemble des tests a été effectué sur une machine Windows Vista et une machine OpenSolaris (sous VirtualBox).

II. Utilité du clustering

En Java EE, on parle de clustering de serveurs d'applications pour parler de la mise en relation d'un certain nombre de serveurs entre eux. Une application Java serveur (EJB, application web etc.) sera deployée sur l'ensemble des serveurs en parallèle.

Les principaux avantages d'un cluster sont :

  • de mieux supporter la charge (scalability et load balancing)
  • d'avoir une plus haute disponibilité en cas de panne de certains serveurs (high avaibility et fail over)
  • de mieux gérer des problèmatiques de bande passante dans le cas où l'application est utilisée dans de nombreux endroits

Par rapport à un simple déploiement d'une même application sur différents serveurs, le clustering en Java EE va permettre :

  • d'avoir des sessions et des configurations cohérentes (réplication)
  • de distribuer des données de manière automatique entre les serveurs (cache distribué)

III. Un peu de vocabulaire

Quand on parle de cluster, on parle souvent de noeud, d'agent, de node agent, de DAS et évidemment de cluster.

III-A. Cluster

Un cluster est un ensemble d'instances de serveurs qui appartiennent à différents noeuds.

III-B. Noeud

Un noeud représente un serveur physique. Un noeud regroupe un ensemble d'instances de serveurs qui partagent la même configuration.

III-C. DAS

Le DAS (Domain Administration Server) est le serveur principal qui permet de configurer et de mettre en relation pour la première fois tous les noeuds. Dès que le cluster est démarré, le DAS peut tomber en panne sans que cela n'affecte les autres noeuds du cluster.

III-D. Node Agent

Un Node Agent est un processus léger associé à un noeud du cluster (en relation avec le DAS) qui permet notamment de :

  • démarrer et arrêter le noeud du cluster
  • synchroniser le noeud courant avec le DAS (indiquer son existence, synchroniser les données, etc.)
Image non disponible
Architecture Glassfish

IV. Prérequis

Avant de commencer, il est nécessaire de vérifier certains points.

IV-A. Configuration de Glassfish

Il est préferable que l'ensemble des serveurs ait la même version du serveur d'applications (ici Glassfish).

Par défaut, après l'installation de Glassfish, le clustering est désactivé. Sur la page d'accueil de la console d'administration, il faut activer cette fonctionnalité.

IV-B. IP et domaines

Vérifier que l'ensemble des serveurs sont "pingables" entre eux (IP), surtout si vous effectuez des tests au sein de plusieurs machines virtuelles.

Vérifier que que l'ensemble des serveurs sont "pingables" avec le nom du serveur. En effet, lors de la communication entre les noeuds, Glassfish utilisera non pas l'IP de la machine, mais le nom de la machine. En cas de problème, il est éventuellement nécessaire d'ajouter dans le fichier hosts les IP de toutes les machines (même la sienne).

Exemple de fichier hosts sous Windows (Windows\System32\drivers\etc\hosts) :

 
Sélectionnez

127.0.0.1       localhost
192.168.1.117 serveur
::1             localhost
192.168.1.69 opensolaris

Exemple de fichier hosts sous Solaris (/etc/hosts ou /etc/init/hosts) :

 
Sélectionnez
			
::1 opensolaris opensolaris.local localhost loghost
192.168.1.69 opensolaris.local opensolaris localhost loghost
192.168.1.117 serveur

V. Configuration et clustering

L'ensemble des tests a été effectué sur :

  • une machine Windows Vista (machine nommée serveur d'IP 192.168.1.117)
  • une machine virtuelle (VirtualBox) sous OpenSolaris (machine nommée opensolaris d'IP 192.168.1.69) jouant le rôle du DAS

V-A. Configuration initiale du DAS

Dans un premier temps, il est nécessaire de définir quel serveur sera utilisé pour configurer et administrer le cluster (le DAS). Une fois choisi, démarrer-le afin d'accéder à la console d'administration.

Sous Windows, le démarrage de Glassfish peut se faire via le menu Démarrer/Démarrer le serveur par défaut. Dans le répertoire d'installation de Glassfish, il est possible d'utiliser la commande suivante :

 
Sélectionnez

./bin/asadmin start-domain domain1

L'accès à la console d'administration se fait via un navigateur Web. En général, l'url est http://localhost:4848. A noter que le port est affiché dans la console suite à l'exécution de la commande de démarrage.

 
Sélectionnez

Starting Domain domain1, please wait.
Default Log location is C:\Java\GlassFish2.1\domains\domain1\logs\server.log.
Redirecting output to C:/Java/GlassFish2.1/domains/domain1/logs/server.log
Domain domain1 started.
Domain [domain1] is running [Sun GlassFish Enterprise Server v2.1 (9.1.1) (build
 b60e-fcs)] with its configuration and logs at: [C:\Java\GlassFish2.1\domains].
Admin Console is available at [http://localhost:50035].
Use the same port [50035] for "asadmin" commands.
User web applications are available at these URLs:
[http://localhost:50034 https://localhost:8181 ].
Following web-contexts are available:
[/web1  /__wstx-services ].
Standard JMX Clients (like JConsole) can connect to JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://192.168.1.117:50043/jmxrmi] for domain management
 purposes.
Domain listens on at least following ports for connections:
[50034 8181 50035 3700 3820 3920 50043 ].
Domain supports application server clusters and other standalone instances.
 
Image non disponible
Console d'administration de Glassfish

V-B. Création des NodeAgents

Afin de mettre en relation les différents noeuds du cluster, il est nécessaire de créer un node agent sur chaque noeud pointant vers le DAS.

Pour tous les noeuds, il est nécessaire d'exécuter la commande suivante (le login et le password de l'administrateur seront demandés) :

 
Sélectionnez

./asadmin create-node-agent --host ipDAS --port portAdminDAS agentName

Dans mon exemple, j'ai exécuté les commandes suivantes :

 
Sélectionnez

//sur le serveur non DAS
./asadmin create-node-agent --host 192.168.1.69 --port 4848 agent_serveur
 
//sur le DAS opensolaris
./asadmin create-node-agent agentsolaris

Sur le DAS, il est possible de voir la présence des NodeAgent dans la console d'administration.

Image non disponible
NodeAgent sur le DAS

Il peut être utile de savoir que la création d'un NodeAgent :

  • sur le noeud, crée le répertoire "nodeagents\agent_serveur\agent" qui contiendra des données sur le DAS et le noeud
  • sur le DAS, ajoute dans le fichier "domains/domain1/config/domain.xml" une entrée node-agent

V-C. Démarrage des NodeAgents

Une fois les NodeAgents créés, il est nécessaire de les démarrer via la commande suivante :

 
Sélectionnez

//sur le serveur non DAS
./asadmin start-node-agent agent_serveur
 
//sur le DAS opensolaris
./asadmin start-node-agent agentsolaris
Image non disponible
Liste des NodeAgents sur le DAS

En cas d'échec du démarrage, il est possible qu'il y ait des problèmes de connexions entre les noeuds du cluster ou qu'un port soit déjà utilisé. Pour vérifier cela, il est nécessaire de lire le fichier de log indiqué par l'erreur lors du démarrage de l'agent.

V-D. Création du cluster

Maintenant que tous les noeuds sont en relation avec le DAS, il est possible de créer le cluster sur Glassfish.

Pour cela, il y a deux manières.

Soit via la console d'administration (Cluster/Créer cluster)

Image non disponible
Création cluster sur la console

Soit en exécutant la commande suivante :

 
Sélectionnez

>./asadmin create-cluster courscluster

Le reste de la création se fait via la console d'administration. Dans Clusters/Instances, il est nécessaire de créer les instances de serveurs que vous souhaitez pour le cluster. Chaque noeud (représenté par un NodeAgent) peut héberger plusieurs instances.

Si vous cliquez sur New (Server Instances), il vous sera possible de créer une instance du cluster en l'associant à un NodeAgent.

Image non disponible
Création d'une instance

Une fois toutes les instances du cluster créés, vous pourrez visualiser le cluster complet dans la console d'administration. L'état des instances dépend de si vous avez ou non démarré les Node Agents.

Image non disponible
Cluster et instances

Si vous allez dans le répertoire : "nodesagents/nomagent", vous verrez la présence des instances de serveurs. Ce répertoire est structuré de la même manière d'un répertoire de domaine, à savoir :

  • applications : contient les applications déployées
  • config : configuration de l'instance (ports, etc.)
  • lib : Pour les bibliothèques partagées et interne

A chaque démarrage, ces répertoires sont synchronisés avec le DAS.

V-E. Démarrage du cluster

Une fois le cluster créé, démarrer le cluster via la console d'administration (Cluster/General/Start cluster) ou via la commande (sur le DAS) :

 
Sélectionnez

>./asadmin start-cluster nomcluster

Afin de connaître les ports écoutés par chaque instance, il suffit d'aller dans la console d'administration, puis Cluster/Instances puis cliquer sur l'instance du noeud.

Image non disponible
Instance démarrée

Le port d'écoute correpond au deuxième port indiqué (38081).

A ce moment, il est possible de déployer la même application de manière synchronisée sur l'ensemble des instances de serveurs :

  • http://opensolaris:38080
  • http://opensolaris:38081
  • http://serveur:38082
  • http://serveur:38081

VI. Déploiement d'une application de tests

Nous pouvons désormais tester le cluster. Lors de l'installation de Glassfish 2.1, un ensemble d'applications de tests est ajouté dans le répertoire "samples\quickstart", et notamment l'application clusterjsp qui permet de tester les sessions utilisateurs en mode cluster.

Le déploiement d'une application s'effectue de la même manière que dans le cas de serveur standalone.

Dans la console d'administration, Clusters, sélectionner le cluster, Applications puis "Deploy". Pour l'exemple, il est nécessaire de déployer le fichier clusterjsp.ear. Il faut également cocher la case : "Avaibility" qui permet la synchronisation des données entre les instances.

Une fois l'application déployée, vous pouvez appeler l'url : http://ip:port/clusterjsp/

Image non disponible
Clusterjsp serveur 1
Image non disponible
Clusterjsp serveur 2

On peut constater que les données de sessions et la clef de session sont synchronisées entre les différents serveurs.

VI. Quelques réglages pour la réplication

Dans la console d'administration, Configuration/cluster/Availability Service, il est possible de définir certains réglages pour la réplication des sessions pour le conteneur Web, le conteneur EJB et le conteneur de messaging.

Image non disponible
Replication Container Web

Pour le type de persistence :

  • memory : cela revient à déployer les serveurs de manière indépendante. Il n'y a aucune réplication
  • replicated : il y a réplication

Pour la fréquence des réplications :

  • web-method (WebContainer) : à la fin de chaque appel d'une servlet, la session est répliquée (meilleure solution)
  • time-based : la session est repliquée toutes les n secondes. Le temps se définit en ajoutant la propriété : reapIntervalSeconds

Le Persistence Scope permet de définir ce qui est répliqué :

  • session : toute la session et les données sont répliquées tout le temps
  • modified-session : toute la session et les données sont répliquées uniquement si un attribut a changé (via setAttribute)
  • modified-attribute : les données seulement sont répliquées uniquement si un attribut a changé

VIII. Astuces

VIII-A. Quelques commandes

VIII-A-1. Création d'un domaine

 
Sélectionnez

>./asadmin create-domain --adminport adminPort nomdomain

Exemple :

 
Sélectionnez
				
C:\Java\GlassFish2.1\bin>asadmin.bat create-domain --adminport 4242 domain2
Please enter the admin user name>admin
Please enter the admin password>
Please enter the admin password again>
Please enter the master password [Enter to accept the default]:>
Please enter the master password again [Enter to accept the default]:>
Using port 4242 for Admin.
Using default port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Domain being created with profile:developer, as specified by variable AS_ADMIN_P
ROFILE in configuration file.
The file in given locale [fr_FR] at: [C:\Java\GlassFish2.1\lib\install\templates
\locales\fr_FR\index.html] could not be found. Using default (en_US) index.html
instead.
Security Store uses: JKS
Domain domain2 created.

VIII-A-2. Démarrage d'un domaine

 
Sélectionnez

>./asadmin start-domain nomdomaine

Exemple :

 
Sélectionnez

C:\Java\GlassFish2.1\bin>asadmin.bat start-domain domain1
Starting Domain domain1, please wait.
Default Log location is C:\Java\GlassFish2.1\domains\domain1\logs\server.log.
Redirecting output to C:/Java/GlassFish2.1/domains/domain1/logs/server.log
Domain domain1 started.
Domain [domain1] is running [Sun GlassFish Enterprise Server v2.1 (9.1.1) (build
 b60e-fcs)] with its configuration and logs at: [C:\Java\GlassFish2.1\domains].
Admin Console is available at [http://localhost:50035].
Use the same port [50035] for "asadmin" commands.
User web applications are available at these URLs:
[http://localhost:50034 https://localhost:8181 ].
Following web-contexts are available:
[/web1  /__wstx-services ].
Standard JMX Clients (like JConsole) can connect to JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://192.168.1.117:50043/jmxrmi] for domain management
 purposes.
Domain listens on at least following ports for connections:
[50034 8181 50035 3700 3820 3920 50043 ].
Domain supports application server clusters and other standalone instances.

VIII-A-3. Suppression d'un domaine

 
Sélectionnez

>./asadmin delete-domain nomdomain

Exemple :

 
Sélectionnez

C:\Java\GlassFish2.1\bin>asadmin.bat delete-domain domain2
Domain domain2 deleted.

VIII-A-4. Lister les domaines

 
Sélectionnez

>./asadmin list-domains

VIII-A-5. Création d'un Node Agent

 
Sélectionnez

>./asadmin create-node-agent --host DAS --port adminDASPort nomagent

Exemple :

 
Sélectionnez

C:\Java\GlassFish2.1\bin>asadmin.bat create-node-agent --host 192.168.1.117 --po
rt 50035 coursagent
Please enter the admin user name>admin
Please enter the admin password>
Command create-node-agent executed successfully.

VIII-A-6. Démarrage d'un Node Agent

 
Sélectionnez

>./asadmin start-node-agent nomagent

Ou :

 
Sélectionnez

>./asadmin start-node-agent --startinstances=false monagent
>./asadmin start-instance nomagent

Exemple :

 
Sélectionnez

C:\Java\GlassFish2.1\bin>asadmin.bat start-node-agent coursagent
Please enter the admin user name>admin
Please enter the admin password>
Please enter the master password [Enter to accept the default]:>
Redirecting output to C:/Java/GlassFish2.1/nodeagents/coursagent/agent/logs/serv
er.log
Redirecting application output to C:/Java/GlassFish2.1/nodeagents/coursagent/age
nt/logs/server.log
Command start-node-agent executed successfully.

VIII-A-7. Arrêt d'un agent

 
Sélectionnez

>./asadmin stop-node-agent nomagent

Exemple :

 
Sélectionnez

C:\Java\GlassFish2.1\bin>asadmin.bat stop-node-agent coursagent
Command stop-node-agent executed successfully.

VIII-A-8. Suppression d'un agent

 
Sélectionnez

>./asadmin delete-node-agent nomagent

Exemple :

 
Sélectionnez

C:\Java\GlassFish2.1\bin>asadmin.bat delete-node-agent coursagent
Command delete-node-agent executed successfully.

IX. Remerciements

Je tiens à remercier romaintaz pour toutes les corrections apportées.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 Florent HUMBERT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.