|
La version 2 de GlassFish Java EE Application Server comporte de nombreuses nouvelles caractéristiques, notamment des capacités de clustering renforcées. Les nouvelles capacités de clustering renforcent la disponibilité et l'évolutivité des architectures de déploiement par réplication d'état de session en mémoire. Grâce à la réplication d'état en mémoire, les instances du serveur clusterisé répliquent l'état de session selon une topologie en anneau, stockant les informations répliquées en mémoire. Cet article décrit les capacités de clustering de GlassFish version 2 et vous aide à commencer le déploiement de votre application vers un cluster GlassFish. Sun Java System Application Server 9.1 représente la distribution supportée par Sun du serveur d'application Open Source GlassFish version 2. Cet article emploie le nom GlassFish version 2 pour englober les deux. Sommaire
Concepts de base
Dans un serveur d'application, les clusters renforcent l'évolutivité et la disponibilité, qui sont des concepts liés. Afin d'offrir une haute disponibilité du service, un système logiciel doit posséder les capacités suivantes :
Globalement, ces demandes résultent obligatoirement en un système qui sacrifie la haute efficacité pour atteindre la haute disponibilité. Afin de supporter les objectifs d'évolutivité et de haute disponibilité, le serveur d'application GlassFish offre les entités suivantes côté serveur :
Les agents du noeud, les instances du serveur et les clusters peuvent être créés au moment de l'installation de GlassFish comme indiqué dans la dernière partie de cet article. Les clusters et les instances sont organisés en domaines administratifs, décrits ci-après, caractérisés par le serveur d'administration de domaine (DAS). Architecture d'administration de domaine
L'architecture centrale vers l'architecture de clustering GlassFish est le concept d'un domaine administratif. Le domaine administratif est une représentation des droits d'accès d'un administrateur ou d'un groupe d'administrateurs. La figure suivante présente une vue d'ensemble de l'architecture de domaine d'administration, dans le contexte d'un domaine unique.
Un domaine administratif est une entité de nature double :
Dans le système de fichiers, un domaine administratif est composé d'un ensemble de fichiers de configuration. A l'exécution, c'est un processus qui s'administre lui-même ainsi que les instances de serveur indépendantes, les clusters, les applications et les ressources. Les installations de haute disponibilité nécessitent généralement des clusters au lieu d'instances de serveur indépendantes. Le serveur d'application GlassFish fournit des clusters homogènes et vous permet de gérer et de modifier chaque cluster comme s'il s'agissait d'une seule entité. Comme illustré par la figure, chaque domaine possède un serveur d'administration de domaine (DAS, Domain Administration Server) qui sert à gérer les instances de Java EE Server dans le domaine. Le noeud d'administration au centre de la figure supporte le DAS. Les applications, les ressources et les informations de configuration sont stockées à proximité du DAS. Les informations de configuration gérées par le DAS sont appelées référentiel central de configuration. Chaque processus du domaine doit être exécuté sur un hôte physique. Lors de l'exécution, le domaine se manifeste comme un DAS. De la même façon, chaque instance de serveur doit être exécutée sur un hôte physique et exige une machine virtuelle Java. Le serveur d'application GlassFish doit être installé sur chacune des machines qui exécute une instance de serveur.
Deux noeuds figurent sur le côté droit de l'illustration : le Noeud 1 et le Noeud 2, qui hébergent chacun deux instances de GlassFish. Chaque agent de noeud contrôle les cycles de vie des instances qui sont configurées sur sa machine dans un domaine donné. Généralement, chaque cycle de vie est géré par le DAS conformément aux demandes de l'administrateur. Le DAS délègue la gestion du cycle de vie de chaque instance à son agent de noeud correspondant. Un agent de noeud est un processus léger qui n'exécute pas lui-même d'applications Java EE. En plus de contrôler les cycles de vie de l'instance, un agent de noeud surveille ("chiens de garde") les instances du serveur dont il est responsable. En cas de défaillance d'une instance de serveur, son agent de noeud apporte sa sauvegarde — sans intervention de l'administrateur ou du DAS . Plusieurs clients administratifs sont présentés sur le côté gauche de la Figure 1. L'infrastructure administrative dans le DAS est fondée sur la technologie Java Management Extensions (JMX). L'infrastructure dans le DAS suit le niveau d'instrumentation de la spécification JAX et emploie les informations de gestion sous forme de Managed Beans (MBeans), des objets Java qui représentent les ressources à gérer. Les MBeans étant compatibles avec la norme JMX, vous pouvez les parcourir avec n'importe quel client JMX standard distant (notamment JConsole, distribué avec Java SE 5.0 et versions ultérieures). Les clients intégrés présentés dans la Figure 1 utilisent l'API JMX pour gérer le domaine. Ces clients doivent disposer de privilèges d'administrateur pour gérer le domaine. Les clients administratifs suivants sont intéressants :
Architecture de clustering
La Figure 2 présente l'architecture de clustering GlassFish du point de vue de l'exécution. Cette vue souligne les aspects haute disponibilité de l'architecture. Le DAS n'est pas représenté dans la Figure 2, et les noeuds et leurs instances de serveur d'application sont groupés sous forme d'instances clusterisées.
En haut de la Figure 2, différents transports ( HTTP, JMS, RMI-IIOP) sont indiqués, communiquant avec les instances clusterisées par l'intermédiaire d'un niveau d'équilibrage de charge. Les ressources sur mesure comme les systèmes d'information de l'entreprise, sont connectées à l'équilibreur de charge par l'intermédiaire d'adaptateurs de ressources dans l'architecture de connecteur Java. Tous les transports peuvent faire l'objet d'un équilibrage de charge dans le cluster, à la fois en termes d'évolutivité et de stratégies de tolérance de panne implémentées par des unités redondantes disponibles en cas de point de panne unique. En bas de la figure, se trouve un référentiel d'état d'application haute disponibilité, une abstraction de stockage d'état de session. Le référentiel stocke l'état de la session, y compris l'état de la session HTTP, l'état de cession EJB avec état et les informations de connexion unique. Ces informations d'état peuvent être stockées par réplication de mémoire ou au moyen d'une base de données. Alternative de base de données haute disponibilité
Sun Microsystems offre historiquement une robuste solution haute disponibilité pour les serveurs d'application fondés sur la technologie de base de données haute disponibilité (HADB, High-Availability Database). HADB offre une disponibilité à 99,999 pour cent (“les cinq neuf”) pour le maintien des informations d'état de session. Toutefois, son coût d'implémentation et d'entretien est relativement élevé et, bien que librement disponible, elle n'a jamais été proposée en version Open Source. Les demandes pour une alternative Open Source plus légère pour accompagner le serveur d'application Open Source GlassFish se sont traduites par une fonction de réplication de mémoire dans GlassFish version 2. La réplication de mémoire s'appuie sur des instances au sein du cluster pour stocker des informations d'état mutuelles en mémoire, et non dans une base de données. La solution HADB demeure toutefois disponible, et peut être préférable pour de nombreuses installations. Réplication de mémoire dans les clusters
Plusieurs caractéristiques sont nécessaires pour un système compatible GlassFish à tolérance de pannes qui maintient les informations d'état en mémoire. Le système doit offrir une haute disponibilité pour l'état de session HTTP, l'état de connexion unique et l'état de session EJB . Il doit aussi être compatible avec les architectures HADB. La fonction de réplication de mémoire tire parti de la fonction de clustering de GlassFish pour offrir la plupart des avantages de la stratégie HADB avec des charges d'installation et d'administration bien moindres. Dans le serveur d'application GlassFish, les instances de cluster sont organisées selon une topologie en anneau. Chaque élément de l'anneau envoie des données d'état de mémoire à l'élément suivant de l'anneau, son partenaire de réplique, et reçoit des données d'état de l'élément précédent. Les données d'état étant actualisées dans n'importe quel élément, elles sont répliquées tout autour de l'anneau. La topologie est illustrée sous forme simplifiée dans la Figure 3.
La façon dont la topologie est formée en anneau est déterminée par l'ordre alphanumérique des noms que vous attribuez à vos instances. Ainsi, si vous appelez vos instances comme dans la Figure 3, l'Instance 1 répliquera vers l'Instance 2, l'Instance 2 vers l'Instance 3, et ainsi de suite, autour de l'anneau. Une topologie de cluster type est illustrée par la Figure 4. Dans la figure, les instances sont présentées hébergées sur différentes machines physiques. En plaçant les Instances 1 et 3 sur une machine et les Instances 2 et 4 sur une autre machine, vous optimisez la disponibilité. En cas de panne catastrophique de l'une des machines, toutes les données sont préservées sur l'autre machine, sous leur forme originale ou comme répliques des instances de la machine en panne.
Scénario de basculement type
Le serveur d'application GlassFish est conçu de sorte que le niveau d'équilibreur de charge ne nécessite aucune information spéciale pour fonctionner correctement en cas de panne. Par exemple, l'équilibreur de charge, ayant acheminé une session à l'Instance 1, n'a pas besoin de savoir qu'il doit acheminer la session à l'Instance 2 lorsque l'Instance 1 est en panne. L'équilibreur de charge peut émettre une demande de basculement vers n'importe quelle instance du cluster, situation souvent décrite comme transparence de localisation. La réponse à une panne intervient dans le cluster. Lorsque l'équilibreur de charge réachemine une session vers une instance qui fonctionne, cette dernière obtient les informations de session stockées nécessaires d'une autre instance, au besoin. Les demandes de basculement provenant d'un équilibreur de charge relèvent de deux cas :
La Figure 5 présente le cluster plus en détail. Un niveau d'équilibrage de charge se trouve sur la gauche, peut-être sur un serveur web. Dans chaque instance de serveur, un cache local stocke les informations de session HTTP, et le cache est copié dans une réplique du cache dans l'instance suivante.
La Figure 6 illustre le Cas 1 de basculement, dans lequel l'instance réacheminée du serveur accède immédiatement aux données d'état de la session. Dans la figure, l'Instance 1 est en panne et la demande de service de l'équilibreur de charge se trouve acheminée vers l'Instance 2, qui possède une réplique des informations d'état de session voulues.
La Figure 7 illustre le Cas 2 de basculement, dans lequel le niveau d'équilibreur de charge réachemine une session vers une instance de serveur qui n'accède pas immédiatement aux données d'état de la session. Dans la figure, l'Instance 4 reconnaît qu'elle ne dispose pas des données d'état de session nécessaires et diffuse une SASE aux autres instances dans le cluster, demandant les données. La demande est illustrée par les flèches jaunes.
L'une des instances (l'Instance 2 dans la Figure 7) reconnaît que sa réplique contient les données voulues et répond à la demande par SASE. L'Instance 2 transfère les données de la session à l'Instance 4, qui rétablit ensuite la session. Lorsqu'une instance utilise des données répliquées pour rétablir une session (comme dans les cas 1 et 2), les données répliquées sont préalablement testées pour vérifier qu'il s'agit de la version actuelle. Changement de forme dynamique du cluster
Lorsqu'une instance d'un cluster est en panne ou a été délibérément mise hors ligne par un administrateur, la topologie du cluster change obligatoirement. Dans notre exemple, l'Instance 1 étant en panne, la topologie du cluster doit changer pour maintenir la réplication de cache de la session. Dans la Figure 8, l'Instance 2 et l'Instance 4 apprennent que l'Instance 1 a disparu. L'instance 1 étant en panne, les tentatives pour communiquer avec elle échouent avec exceptions E/S. Lorsqu'une instance est délibérément retirée, la technologie JXTA envoie des messages indiquant que l'Instance 1 a été fermée.
En réponse à la disparition de l'Instance 1, l'Instance 4 sélectionne un nouveau partenaire de réplication, comme illustré par la Figure 9. L'Instance 4 nettoie ses anciennes connexions et établit la connexion avec l'Instance 2. Le cluster est maintenant réduit de 4 à 3 instances du serveur.
Notez que chaque instance du cluster réduit travaille dorénavant davantage pour un même niveau d'activité globale de la session. Pour la planification des ressources, considérez que la réplication en mémoire utilise énormément de mémoire. Pour offrir une haute disponibilité, vérifiez que vous disposez d'une marge suffisante de mémoire pour chaque instance en cas de réduction du cluster. Lorsqu'une instance rejoint (ou revient) dans le cluster, le processus est inversé. Lorsqu'une nouvelle instance du cluster reçoit une demande du niveau d'équilibreur de charge, elle diffuse une demande pour un partenaire de réplication, en choisit un, et la topologie s'ajuste automatiquement pour englober la nouvelle instance. Service de gestion de groupe
Le service de gestion de groupe (GMS, Group Management Service) fournit des informations d'appartenance dynamiques sur un cluster et les instances qui en font partie. Sa conception doit beaucoup au Projet Shoal, un cadre de clustering fondé sur la technologie Java. Au fond, le GMS est également basé sur la technologie JXTA. Le GMS gère les événements de changement de forme du cluster dans GlassFish, en les coordonnant comme éléments arrivant, éléments fermés gracieusement ou éléments en panne. Par l'intermédiaire du GMS, la réplication de mémoire prend les mesures nécessaires en réponse à ces événements et fournit une disponibilité ininterrompue du service. Le GMS est utilisé dans le serveur d'application GlassFish pour surveiller l'état de santé du cluster et pour supporter le module de réplication de mémoire. En résumé, le GMS offre le support suivant :
Configuration de la réplication de mémoire
Pour configurer la réplication de mémoire du cluster, vous devez procéder à trois étapes :
Vous pouvez effectuer ces étapes avec l'IG ou la CLI. Certains réglages supplémentaires peuvent être nécessaires. Par exemple, la taille par défaut du tas pour le profil administratif du cluster est de 512 Mo. Pour un déploiement d'entreprise, cette valeur doit être augmentée jusqu'à 1 Go ou davantage. Cette opération est facilement accomplie par l'intermédiaire du serveur d'administration du domaine en réglant les options JVM avec les balises suivantes :
Vous devez aussi veiller à ajouter la balise
La nécessité d'insérer la balise Implémentation de la réplication de mémoire
Dans le serveur d'application GlassFish version 2, la fonction de réplication de mémoire est basée sur les capacités de transport et de messagerie de la technologie JXTA. Pour beaucoup, la technologie JXTA est connue sous l'appellation peer-to-peer. Elle est définie comme un ensemble de protocoles XML qui permettent aux appareils connectés d'échanger des messages et de collaborer quelle que soit la topologie du réseau. Dans le développement du serveur d'application GlassFish version 2, la technologie JXTA a été rationalisée pour traiter les demandes de gros volume et haut rendement de réplication de mémoire. Pour améliorer l'évolutivité et les performances, les développeurs de la fonction de réplication de mémoire ont également profité d'une collaboration avec le projet Grizzly, qui aide les développeur à élaborer de robustes serveurs évolutifs avec l'API Java New I/O (NIO). Les abstractions d'appartenance de groupe de la technologie JXTA correspondent bien au cluster de serveur d'application GlassFish et au modèle d'instance : les groupes JXTA correspondent aux clusters GlassFish et les pairs JXTA correspondent aux instances du serveur GlassFish. Le GMS profite de ces abstractions d'appartenance de groupe et fournit des composants consommables tels que la réplication de mémoire, un modèle d'événement de notification pour les événements d'exécution dans le cluster. Dans le développement du serveur d'application GlassFish version 2, les topologies de clustering ont été limitées à un seul sous-réseau. Les futurs projets comprennent l'exploitation de la technologie JXTA pour inclure la dispersion géographique des topologies de clustering. Enfin, les API directes de la technologie JXTA ont rendu possible les simples exigences de configuration pour le clustering de GlassFish. Installation du serveur d'application
Pour installer le serveur d'application GlassFish :
Vous devez maintenant configurer le serveur d'application GlassFish. Configuration du clustering
Le répertoire d'installation contient deux scripts de construction
Le script Pour créer un domaine par défaut avec un profil de clustering :
Le configuration de GlassFish est terminée. Étude du domaine
Vous pouvez découvrir et gérer les domaines depuis la CLI (la commande Étude des domaines depuis l'interface de ligne de commande
L'étape de configuration a créé un sous-répertoire
Vous pouvez intervenir sur les domaines depuis la CLI avec la commande Par exemple, vous pouvez lister tous les domaines et leurs états avec la commande suivante :
Si vous n'avez pas encore démarré domain1, la commande émet la sortie suivante :
Pour démarrer domain1, tapez la commande suivante :
L'argument Étude des domaines avec la console d'administration de serveur d'application Sun Java System
Au lieu de la commande
La console d'administration facilite le déploiement des applications depuis les fichiers Support du cluster pour un domaine existant
Vous pouvez ajouter le support de clustering à un domaine existant. Un domaine avec profil développeur ne supporte pas le clustering si vous ne modifiez pas sa configuration. Depuis le répertoire d'installation de GlassFish, vous pouvez créer un domaine de profil développeur avec la commande suivante :
Pour permettre le clustering à partir d'un domaine de profil développeur :
Plug-in d'équilibreur de charge HTTP
Un équilibreur de charge distribue la charge de travail parmi plusieurs instances du serveur d'application, augmentant ainsi le rendement du système. Bien que le niveau de l'équilibreur de charge ne nécessite aucune connaissance spéciale pour acheminer les demandes de session vers les instances du serveur, il doit maintenir une liste des noeuds disponibles. Lorsqu'un noeud ne répond pas à une demande comme prévu, l'équilibreur de charge en choisit un autre. Les équilibreurs de charge peuvent être implémentés en logiciel ou matériel. Consultez les informations données par les fournisseurs de matériel pour implémenter leurs appareils. Un plug-in d'équilibreur de charge HTTP est disponible pour le serveur d'application GlassFish version 2. Il fonctionne avec le serveur d'application Sun Java System 9.1 ainsi qu'avec Apache Web Server et Microsoft IIS. L'équilibreur de charge permet également le basculement des demandes entre les instances de serveur, contribuant à la haute disponibilité des installations. Pour des informations plus détaillées sur la configuration du plug-in d'équilibreur de charge, consultez l'aide en ligne disponible depuis la console d'administration de serveur d'application Sun Java System 9.1 Admin. Pour des informations plus détaillées, consultez le Chapitre 5, Configuration de l'équilibrage de charge HTTP dans le Guide d'administration haute disponibilité de Sun Java System Application Server 9.1 Conclusion
Le serveur d'application GlassFish version 2 offre une architecture de clustering souple composée de domaines administratifs, de serveurs de domaine administratif, d'instances de serveurs et de machines physiques. L'architecture associe la facilité d'emploi à un haut degré de contrôle administratif pour améliorer la haute disponibilité et l'évolutivité horizontale.
Remerciements
Merci à Larry White, Abhijit Kumar et Dinesh Patil pour leur aide dans la préparation de cet article. Références
|
BigAdmin SubscriptionsBigAdmin Areas
BigAdmin Sun Center
BigAdmin Topics | ||||||||||||||||||||||||||||||||||||||||||||