2.4 Mise en grappe

Vous devez prendre en considération trois éléments lorsque vous utilisez l'application utilisateur dans un environnement en grappe :

2.4.1 Mise en grappe de JBoss

Une grappe est un groupe de noeuds de serveurs d'applications qui fournissent un ensemble de services. L'objectif d'une grappe est d'accroître les performances et la fiabilité des applications. En général, une grappe apporte trois principaux avantages aux applications d'entreprise :

  • Haute disponibilité
  • Évolutivité (plus de capacité)
  • Équilibrage de la charge

Une haute disponibilité signifie qu'une application est fiable et disponible pendant un pourcentage élevé du temps durant lequel elle est déployée. Les grappes offrent une haute disponibilité car la même application est exécutée sur tous les noeuds. Si un noeud tombe en panne, l'application continue de s'exécuter sur les autres. L'application utilisateur Identity Manager bénéficie d'une disponibilité supérieure lorsqu'elle est exécutée dans une grappe. L'application utilisateur Identity Manager ne prend toutefois pas en charge la réplication de session HTTP. Cela signifie que si une session est en cours sur un noeud et si ce noeud tombe en panne, les informations de la session sont perdues.

L'équilibrage de la charge est une pratique qui consiste à distribuer la charge parmi les membres d'une grappe. L'équilibrage de la charge a pour but l'amélioration des performances. Il peut s'effectuer de plusieurs manières (par exemple, répétition alternée DNS, équilibrage de la charge matérielle). Reportez-vous à http://www.onjava.com/pub/a/onjava/2001/09/26/load.html pour lire une présentation des différentes méthodes d'équilibrage de la charge. Quelle que soit la méthode sélectionnée, vous devez inclure l'équilibrage de la charge dans votre configuration en grappe.

Groupes de grappes JBoss

Les grappes JBoss sont basées sur un module de communication nommé JGroups. JGroups est installé avec JBoss (il peut également être utilisé sans JBoss). JGroups permet la communication entre les groupes, qui partagent un nom commun, une adresse de multidiffusion et un port de multidiffusion.

Lorsque vous installez un serveur JBoss en grappe, JBoss définit deux groupes JGroups différents pour la gestion de la grappe. L'un se nomme DefaultPartition et est défini dans /deploy/cluster-service.xml. Ce groupe de grappes est utilisé par JBoss pour fournir les principaux services de mise en grappe. JBoss définit également un second groupe de grappes nommé Tomcat-Cluster. Ce groupe de grappes est défini dans /deploy/tc-cluster-service.xml. Ce groupe de grappes fournit la réplication de session pour le serveur Tomcat qui s'exécute à l'intérieur de JBoss.

L'application utilisateur Identity Manager utilise un troisième groupe de grappes. Ce groupe de grappes utilise un nom UUID pour réduire le risque de conflit avec d'autres groupes de grappes que les utilisateurs peuvent ajouter à leurs serveurs. Par défaut, le groupe de grappes se nomme c373e901aba5e8ee9966444553544200. Cette grappe n'est pas configurable à l'aide d'un fichier de service JBoss. À la place, les paramètres de configuration se trouvent dans le répertoire et peuvent être configurés à l'aide des fonctions d'administration de l'application utilisateur. Si vous connaissez bien JGroups et la mise en grappe JBoss, vous pouvez régler la configuration en grappe de l'application utilisateur à l'aide de cette interface. Les modifications apportées à la configuration en grappe ne prennent effet pour un noeud que lorsque ce dernier est redémarré.

Le groupe de grappes de l'application utilisateur n'est utilisé que pour coordonner les caches de l'application utilisateur d'un environnement en grappe. Il est indépendant des deux groupes de grappes de JBoss et n'interagit avec eux en aucune manière. Par défaut, le groupe de grappes de l'application utilisateur et les deux groupes de grappes de JBoss utilisent des noms de groupes, des adresses de multidiffusion et des ports de multidiffusion différents, de sorte qu'il n'est pas nécessaire de procéder à une nouvelle configuration.

Les paramètres du groupe de grappes de l'application utilisateur sont partagés par toute application Identity Manager 3 qui partage la configuration de l'annuaire. L'objectif de l'option des paramètres locaux dans l'interface d'administration de l'application utilisateur est de permettre à un administrateur de supprimer un noeud d'une grappe ou de changer l'appartenance des serveurs à une grappe. Par exemple, vous pouvez désactiver globalement la mise en grappe, puis l'activer localement pour un sous-ensemble de vos serveurs partageant la configuration de l'annuaire.

Mise en batterie d'applications

JBoss permet d'effectuer le déploiement à chaud sur une grappe en copiant un fichier EAR, WAR ou JAR de l'application dans le répertoire de la batterie d'une instance de JBoss en grappe. Le déploiement à chaud sur une machine provoque le déploiement automatique de ce composant sur toutes les instances de la grappe, tandis que la grappe fonctionne.

Cette forme de déploiement d'application n'est pas recommandée avec la version du serveur d'applications JBoss (4.0.2) incluse avec le programme d'installation de l'application utilisateur au moment de la rédaction de ce document. Il existe en effet des problèmes non résolus liés à son utilisation. Toutefois, vous disposez des étapes de base que vous devez respecter (reportez-vous à Déploiement de l'application utilisateur dans une grappe en utilisant la mise en batterie JBoss) pour déployer l'application utilisateur en utilisant la technologie de mise en batterie de JBoss. Des améliorations de cette technologie peuvent apparaître après la publication de ce document.

Base de données MySQL

Le programme d'installation de l'application utilisateur installe le gestionnaire de base de données MySQL et crée une base de données utilisable avec l'application utilisateur, ou il utilise une base de données Oracle, Microsoft SQL Server ou MySQL existante. La base de données est responsable de la persistance des données. Tous les noeuds de la grappe JBoss doivent accéder à la même instance de la base de données. L'application utilisateur utilise des appels JDBC standard pour accéder à la base de données et la mettre à jour. L'application utilisateur utilise une source de données JDBC liée à l'arborescence JNDI pour ouvrir une connexion vers la base de données. Si vous créez la grappe JBoss en utilisant le programme d'installation de l'application utilisateur, la source de données est installée automatiquement. Si vous choisissez d'installer la grappe JBoss manuellement, vous devez copier la source de données (fichier IDM-ds.xml) vers le répertoire deploy de tous les noeuds de votre grappe. En outre, si vous utilisez MySQL, vous devez copier le pilote MySQL JDBC (mysql-connector-java-3.1.10-utf8-clob-fix-bin.jar), situé dans le répertoire JBoss /server/IDM/lib directory, vers le répertoire JBoss server/IDM/lib.

Consignation

Pour activer la consignation des grappes, vous devez modifier le fichier de configuration log4j.xml, situé dans le répertoire \conf de la configuration du serveur JBoss (par exemple, \server\IDM\conf), et supprimer les commentaires de la section située en bas et qui ressemble à :

<!--  Clustering logging 
  --> 
- <!-- 
 Uncomment the following to redirect the org.jgroups and
      org.jboss.ha categories to a cluster.log file.
   <appender name="CLUSTER" class="org.jboss.logging.appender.RollingFileAppender">
     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
     <param name="File" value="${jboss.server.home.dir}/log cluster.log"/>
     <param name="Append" value="false"/>
     <param name="MaxFileSize" value="500KB"/>
     <param name="MaxBackupIndex" value="1"/>
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
     </layout>
   </appender>
   <category name="org.jgroups">
     <priority value="DEBUG" />
     <appender-ref ref="CLUSTER"/>
   </category>
   <category name="org.jboss.ha">
     <priority value="DEBUG" />
     <appender-ref ref="CLUSTER"/>
   </category>
  --> 

Vous trouverez le fichier cluster.log dans le répertoire log de la configuration du serveur JBoss (par exemple, \server\IDM\log).

2.4.2 Installation de l'application utilisateur dans une grappe JBoss

La méthode recommandée pour installer l'application utilisateur dans une grappe consiste à utiliser le programme d'installation de l'application utilisateur pour installer l'application utilisateur sur chaque noeud d'une grappe. Bien que nous ne recommandions pas le déploiement de l'application utilisateur dans une grappe en utilisant la mise en batterie JBoss, nous avons inclus une procédure de substitution.

Utilisation du programme d'installation de l'application utilisateur sur chaque noeud de la grappe

JBoss est fourni avec trois configurations de serveur différentes prêtes à l'emploi : minimale, par défaut et tout. La mise en grappe n'est activée que dans la configuration tout. Un fichier cluster-service.xml, dans le dossier /deploy, décrit la configuration de la partition de grappe par défaut. Lorsque vous installez l'application utilisateur et indiquez au programme d'installation que vous voulez effectuer l'installation dans une grappe, le programme d'installation effectue une copie de toute la configuration, nomme la copie IDM (par défaut ; le programme d'installation permet de modifier ce nom) et installe l'application utilisateur dans cette configuration.

Pour installer l'application utilisateur sur chaque noeud d'une grappe en utilisant le programme d'installation de l'application utilisateur :

  1. Effectuez une installation complète de l'application utilisateur (MySQL, JBoss et l'application utilisateur) sur le premier noeud JBoss. Pour obtenir des informations sur l'utilisation du programme d'installation de l'application utilisateur, reportez-vous au Guide d'installation Identity Manager 3.

    • Si vous utilisez MySQL comme base de données pour l'application utilisateur, le programme d'installation de l'application utilisateur crée une nouvelle installation de MySQL. Notez le mot de passe de l'utilisateur root MySQL que vous spécifiez. Vous aurez en effet besoin de ces informations lorsque vous installerez l'application sur les autres noeuds de la grappe.
    • Dans l'écran de configuration IDM du programme d'installation, sélectionnez l'option mise en grappe (tout).
    • Sélectionnez d'autres options d'installation en fonction de votre configuration.
  2. Si MySQL ne fonctionne pas, démarrez-le en utilisant le fichier start-mysql.bat situé dans le répertoire /IDM/mysql.

    REMARQUE:Sous Linux, la commande shell permet de déterminer si le daemon MySQL fonctionne :

    
    ps -A | grep mysqld
    

    Si cette commande renvoie plusieurs lignes de terminant par mysqld, le daemon fonctionne.

  3. Démarrez JBoss et l'application utilisateur en utilisant le fichier start-jboss.bat (Windows) ou start-jboss.sh (Linux), situé dans le répertoire IDM.

    Description : Description : Illustration
  4. Effectuez une installation personnalisée de l'application utilisateur sur chaque noeud supplémentaire de la grappe JBoss.

    • Sélectionnez uniquement l'application utilisateur à installer :
    Description : Description : Illustration
    • Spécifiez l'adresse IP ou le nom d'hôte du serveur dans lequel la base de données de l'application utilisateur est installée.
    • Spécifiez le nom d'utilisateur et le mot de passe de la base de données pour la base de données de l'application utilisateur. Si vous utilisez MySQL, le nom d'utilisateur est root et le mot de passe est celui que vous avez spécifié au cours du processus d'installation à l'Etape 1.
    • Dans l'écran du programme d'installation de la configuration IDM, sélectionnez l'option “mise en grappe (tout)”.
    • Sélectionnez d'autres options d'installation en fonction de votre configuration.
  5. Démarrez chaque noeud de la grappe JBoss en utilisant le fichier start-jboss.bat (Windows) ou start-jboss.sh (Linux), situé dans le répertoire IDM.

Déploiement de l'application utilisateur dans une grappe en utilisant la mise en batterie JBoss

N'utilisez pas la mise en batterie JBoss avec JBoss 4.0.2 ou une version précédente, car vous risquez de rencontrer des problèmes (reportez-vous au site http://jira.jboss.com/jira/browse/JBAS-1899). Nous vous recommandons d'installer l'application utilisateur, en utilisant le programme d'installation de l'application utilisateur, sur chaque noeud de la grappe (reportez-vous à Utilisation du programme d'installation de l'application utilisateur sur chaque noeud de la grappe dans ce chapitre). Toutefois, si vous voulez utiliser la mise en batterie pour déployer l'application utilisateur sur une grappe avec JBoss 4.0.3 ou une version ultérieure, procédez de la façon suivante.

REMARQUE:Ces étapes concernent les clients qui souhaitent utiliser JBoss 4.0.3 seuls, de façon expérimentale. La version prise en charge officiellement est la 4.0.2.

Pour déployer l'application utilisateur dans une grappe en utilisant la mise en batterie JBoss :

  1. Effectuez une installation personnalisée de l'application utilisateur sur l'un des noeuds de la grappe JBoss, en sélectionnant l'application utilisateur et MySQL (si vous utilisez MySQL ; sinon, installez seulement l'application utilisateur) pour les installer. Vous pouvez effectuer l'installation avec toutes les grappes dans le noeud en fonctionnement, mais le noeud sur lequel vous installez l'application utilisateur doit être le premier noeud de la grappe à démarrer.

  2. Copiez le fichier du pilote JDBC (par exemple, si vous utilisez MySQL, le pilote JDBC est mysql-connector-java-3.1.10-utf8-clob-fix-bin.jar), situé dans le répertoire /server/IDM/lib, dans le répertoire correspondant de chaque noeud de la grappe.

  3. Copiez le fichier cacerts du répertoire /lib/security du JRE qui était installé avec l'application utilisateur dans le répertoire JRE /lib/security de chaque noeud de la grappe.

  4. Déplacez le fichier IDM.war et le fichier source de données IDM-ds.xml depuis le répertoire /deploy du répertoire de configuration du serveur vers le répertoire /farm du répertoire de configuration du serveur. Vous devez vraiment déplacer les fichiers. Ne laissez pas les originaux dans le répertoire /deploy.

  5. Démarrez la base de données de l'application utilisateur (si vous utilisez MySQL fourni, démarrez MySQL en utilisant le fichier start-mysql.bat situé dans le répertoire /IDM/mysql).

  6. Démarrez JBoss et l'application utilisateur en utilisant le fichier start-jboss.bat (Windows) ou start-jboss.sh (Linux), situé dans le répertoire IDM sur le noeud dans lequel vous avez installé l'application utilisateur et la base de données de l'application utilisateur.

  7. Démarrez les autres noeuds de la grappe.

2.4.3 Configuration de la mise en cache du groupe de l'application utilisateur

Les utilisateurs qui connaissent bien JGroups et la mise en grappe de JBoss peuvent modifier la configuration de la mise en cache du groupe de grappes à l'aide de l'interface d'administration de l'application utilisateur (reportez-vous à la Section 13.3.5, Paramètres de cache pour les grappes). Les modifications apportées à la configuration en grappe ne prennent effet pour un noeud du serveur que lorsque ce dernier est redémarré.

2.4.4 Configuration des workflows pour la mise en grappe

La mise en grappe du moteur de workflow fonctionne indépendamment de l'infrastructure de cache de l'application utilisateur. Vous devez effectuer plusieurs étapes pour vous assurer que le moteur de workflow fonctionne correctement dans un environnement en grappe.

  • Tous les serveurs de la grappe doivent pointer vers la même base de données. Si vous installez l'application utilisateur sur la grappe en utilisant la méthode recommandée (reportez-vous à Utilisation du programme d'installation de l'application utilisateur sur chaque noeud de la grappe), vous devez spécifier, au cours du processus d'installation, l'adresse IP ou le nom d'hôte du serveur sur lequel la base de données de l'application utilisateur est installée. Si vous utilisez la mise en batterie pour déployer l'application utilisateur vers des noeuds de la grappe (reportez-vous à Déploiement de l'application utilisateur dans une grappe en utilisant la mise en batterie JBoss), vous le faites en déplaçant le fichier de la source de données (IDM-ds.xml) du répertoire /deploy vers le répertoire /farm sur le noeud sur lequel l'application utilisateur a d'abord été installée. Cela provoque le déploiement de la source de données sur tous les noeuds de la grappe.
  • Chaque serveur de la grappe doit être démarré avec un ID de moteur unique. Cela peut s'effectuer en définissant la propriété du système com.novell.afw.wf.engine-id au démarrage du serveur. Par exemple, si vous souhaitez démarrer JBoss et assigner l'ID de moteur ENGINE1 au moteur de workflow de ce serveur, vous devez utiliser la commande suivante :

    run.sh -Dcom.novell.afw.wf.engine-id=ENGINE1 (Linux)

    run.bat -Dcom.novell.afw.wf.engine-id=ENGINE1 (Windows)

Une fois démarrée par un moteur de workflow exécuté sur un serveur particulier, une instance du processus de workflow ne peut s'exécuter et se terminer que sur ce serveur. Cela garantit que le processus de workflow s'exécute en toute sécurité. Toutefois, cela ne permet pas la prise en charge de la reprise après échec de l'instance du processus. En cas de blocage d'un serveur de la grappe, l'instance du processus ne redémarre pas tant qu'un moteur portant le même ID ne redémarre pas.

Si un ordinateur serveur ne peut pas redémarrer du fait d'un grave problème matériel ou logiciel, vous pouvez démarrer le serveur d'applications sur un nouvel ordinateur, en utilisant le même ID de moteur de workflow que celui utilisé sur la machine en panne. L'ID du moteur étant un nom logique, et non une assignation directe vers un ordinateur physique sur lequel le moteur était exécuté, l'instance du processus interrompue peut se terminer sur le nouvel ordinateur.

Les instances du processus sont détenues par le moteur ayant démarré le processus. Toutefois, un utilisateur peut se loguer à n'importe quelle application utilisateur d'une grappe pour afficher le détail du processus, retirer des processus ou terminer les tâches qui leur sont assignées. Les processus ou les tâches retirés qui sont terminés sur un moteur qui n'est pas propriétaire du processus entrent dans un état d'attente et reprennent l'exécution lorsqu'ils sont découverts par le moteur qui en est le propriétaire.