Chapitre 6. Mise en cluster

Lors de la mise en cluster de Red Hat JBoss BPM Suite, demandez-vous quels sont les composants à mettre en cluster. Vous pouvez mettre en cluster :
  • Le référentiel GIT : le référentiel VFS (virtual-file-system) détenant les ressources d'entreprise afin que tous les nœuds du cluster utilisent le même référentiel
  • Serveur d'exécution et applications Web : le serveur runtime présent dans le conteneur (tel que Red Hat JBoss EAP) ainsi que les applications web Red Hat JBoss BRMS et Red Hat JBoss BPM Suite pour que les nœuds se partagent les mêmes données de runtime.
    Pour savoir comment mettre l'application en cluster, veuillez consulter la documentation relative à la mise en cluster du conteneur.
  • Base de données d'arrière-plan : base de données avec les données de statut, telles que, entre autre, les instances de processus, sessions KIE et journal d'historique pour les basculements.
Schéma du système Red Hat JBoss BPM Suite avec composants de système individuel

Figure 6.1. Schéma du système Red Hat JBoss BPM Suite avec composants de système individuel

Mécanisme de mise en cluster du référentiel GIT

Pour mettre le référentiel GIT en cluster, les produits suivants sont utilisés :
  • Apache Zookeeper regroupe toutes les parties.
  • Apache Helix est le composant de gestion de cluster qui enregistre tous les détails du cluster (le cluster, les nœuds, les ressources).
L'environnement de runtime, c'est-à-dire le serveur d'Exécution, utilise ce qui suit pour fournir les fonctionnalités de mise en cluster :
  • uberfire framework, qui fournit le pilier des applications web
Schéma de mise en cluster avec Helix et Zookeeper

Figure 6.2. Schéma de mise en cluster avec Helix et Zookeeper

Une configuration de mise en cluster typique implique ce qui suit :
  • Installation du cluster avec Zookeeper et Helix
  • Installation de la base de données d'arrière-plan avec une configuration et des tableaux Quartz
  • Configuration de la mise en cluster sur votre conteneur (cette documentation ne fournit que des instructions relatives à la mise en cluster pour Red Hat JBoss EAP 6)

Mise en cluster des référentiels Maven

Différentes opérations dans Business Central publient des JAR vers le référentiel Maven interne de Business Central.
Ce référentiel existe sur le système de fichier du serveur d'applications comme fichiers réguliers et n'est pas compatible avec les clusters. Ce dossier n'est pas synchronisé entre les différents nœuds du cluster. Il doit être synchronisé à l'aide d'outils externes comme rsync.
À la place d'utiliser un outil de synchronisation externe, il est possible d'installer la propriété de système org.guvnor.m2repo.dir sur chaque nœud de cluster pour diriger vers un SAN ou NAS. Dans ce cas, il n'est pas nécessaire de mettre le référentiel Maven en cluster.

6.1. Mise en cluster avec JBoss EAP

Pour installer Red Hat JBoss BPM Suite en mode clusterisé, nous vous recommandons d'utiliser le programme d'installation JAR, qui offre un échantillon d'installation prêt à l'emploi. Vous pouvez également installer la mise en cluster avec le fichier ZIP déployable pour EAP.

6.1.1. Mise en cluster à l'aide du programme d'installation JAR

Note

Le programme d'installation JAR fournit uniquement un échantillon de l'installation, un ajustement de la configuration sera nécessaire pour mieux correspondre aux besoins de votre projet.
En utilisant le programme d'installation JAR décrit dans la Section 2.1, « Installation de Red Hat JBoss BPM Suite Installer », vous pouvez paramétrer une configuration de cluster de base de Red Hat JBoss BPM Suite.
La configuration automatique crée trois instances ZooKeeper, un cluster Helix qui utilise ces instances, et deux magasins de données Quartz (un géré et un non-géré). Cette installation Red Hat JBoss BPM Suite consiste en deux nœuds EAP qui partagent un référentiel Maven, utilisent Quartz pour coordonner les tâches minutées, et dont business-central.war, dashbuilder.war, et kie-server.war sont déployés. Pour personnaliser l'installation afin qu'elle correspondent à votre scénario, ou pour utiliser la mise en cluster avec le fichier ZIP déployable, veuillez consulter Section 6.1.2, « Configuration personnalisée (ZIP déployable) ». Vous pouvez également obtenir davantage d'informations dans la documentation JBoss EAP.
Suivez le processus d'installation décrit dans Section 2.1.1, « Installation de Red Hat JBoss BPM Suite à l'aide du programme d'installation » et sélectionnez Installer une configuration clusterisée dans Configuration avancée du runtime. Après avoir cliqué sur Suivant, vous serez guidé à travers les étapes suivantes :

Note

Les étapes répertoriées ici décrivent l'installation de l'interface utilisateur graphique. Les étapes pour l'installation de la console sont analogues.
  1. Sélectionner le fournisseur JDBC

    Sur cet écran, veuillez sélectionner le fournisseur JDBC dans la liste. Vous devrez fournir le ou les JAR correspondants de l'une des manières suivantes :
    • Sélectionnez un ou plusieurs fichiers sur le système de fichiers
    • Veuillez fournir un ou plusieurs URL. Le programme d'installation télécharge les fichiers automatiquement.
    Le programme d'installation copie ensuite le ou les JAR sur l'emplacement approprié sous le répertoire $EAP_HOME/modules, où un fichier module.xml correspondant est également créé automatiquement.
    Configure JDBC provider and drivers

    Figure 6.3. Installation du pilote JDBC

  2. Configurer la connexion Quartz

    Sur l'écran suivant, veuillez fournir les données à la base de données pour Quartz. Le programme d'installation crée automatiquement le fichier de définition Quartz ($EAP_HOME/domain/configuration/quartz-definition.properties) et deux sources de données Quartz dans le fichier de configuration du domaine $EAP_HOME/domain/domain.xml. Vous pouvez modifier les fichiers après avoir terminé l'installation.

    Note

    Pendant l'installation, les scripts DDL Quartz seront exécutés sur la base de données sélectionnée dans cette étape. Ces scripts rendent des changements nécessaires pour permettre à Quartz d'opérer (d'ajouter des tables, etc...), et se trouvent dans $EAP_HOME/jboss-brms-bpmsuite-6.3-supplementary-tools/ddl-scripts comme référence (il n'est pas nécessaire de les modifier de quelque manière que ce soit).
    Configure database connections

    Figure 6.4. Installation de la base de données Quartz

  3. Cliquez sur Suivant pour lancer l'installation.

    Important

    Lors de l'utilisation du programme d'installation JAR, les archives war sont automatiquement créées à partir des applications résidant dans $EAP_HOME/standalone/deployments/. Cela signifie que de l'espace supplémentaire est nécessaire car les applications existent à la fois dans un état compressé et non-compressé dans le stockage pendant l'installation.
    Trois instances de ZooKeeper sont automatiquement créées dans $EAP_HOME/jboss-brms-bpmsuite-6.3-supplementary-tools/ (noms des répertoires zookeeper-one, zookeeper-two, et zookeeper-three).
    Dans le répertoire $EAP_HOME/jboss-brms-bpmsuite-6.3-supplementary-tools/helix-core, vous pourrez trouver la configuration Helix par défaut et les scripts pour lancer le cluster—startCluster.sh pour UNIX et startCluster.bat pour Windows.
    Une fois l'installation terminée, veuillez NE PAS sélectionner d'exécuter le serveur immédiatement. Vous devrez d'abord lancer le cluster en déplaçant dans le répertoire $EAP_HOME/jboss-brms-bpmsuite-6.3-supplementary-tools/helix-core le script de lancement mentionné ci-dessus et en l'exécutant :
    Sur les systèmes Unix :
    ./startCluster.sh
    Sur Windows :
    ./startCluster.bat
    Ce script lance le cluster Helix et les instances ZooKeeper. Uniquement après cela, lancez le serveur EAP en mode domaine en vous déplaçant sur le répertoire $EAP_HOME/bin et en exécutant :
    Sur les systèmes Unix :
    ./domain.sh
    Sur Windows :
    ./domain.bat
Vous avez désormais un cluster Red Hat JBoss BPM Suite fonctionnant correctement.

6.1.2. Configuration personnalisée (ZIP déployable)

Lors de la mise en cluster JBoss EAP, un contrôleur de domaine JBoss EAP unique existe avec d'autres esclaves JBoss EAP s'y connectant en tant qu'utilisateur de gestion. Les déploiements de Business Central et dashbuilder peuvent être effectués en tant qu'utilisateur de gestion sur un contrôleur de domaine et les déploiements WAR seront distribués à d'autres membres du cluster JBoss EAP.
Pour configurer la mise en cluster sur Red Hat JBoss EAP 6, veuillez effectuer ce qui suit :
  1. Configurer ZooKeeper et Helix selon Section 6.2.1, « Installer un Cluster ».
  2. Installez votre pilote JDBC comme module principal : copiez le jar du pilote sur $EAP_HOME/modules/system/layers/base/ et créez un fichier module.xml dans le répertoire.
  3. Veuillez modifier le fichier module.xml d'après le module XSD correspondant.

    Exemple 6.1. Contenu de fichier module.xml pour la source de données PostgreSQL

    <module xmlns="urn:jboss:module:1.0" name="org.postgresql">
    	  <resources>
    		<resource-root path="postgresql-jdbc.jar"/>
    	  </resources>
    
    	  <dependencies>
    		<module name="javax.api"/>
    		<module name="javax.transaction.api"/>
    	  </dependencies>
    	</module>
    
  4. Configurez la source de données pour le serveur : ouvrez le fichier host.xml ou standalone.xml pour modification, selon le PROFIL utilisé situé dans $EAP_HOME/PROFILE/, localisez le profil full et effectuez ce qui suit :
    1. Ajoutez la définition de la source de données principale utilisée par Red Hat JBoss BPM Suite.

      Exemple 6.2. La source de données PostgreSQL définie comme la source de données Red Hat JBoss BPM Suite principale

      <datasource jndi-name="java:jboss/datasources/psbpmsDS"
      					pool-name="postgresDS" enabled="true" use-java-context="true">
      	  <connection-url>jdbc:postgresql://localhost:5432/jbpm</connection-url>
      	  <driver>postgres</driver>
      	  <security>
      		<user-name>bpms</user-name>
      		<password>bpms</password>
      		</security>
      	</datasource>
    2. Ajoutez la définition de la source de données pour le service Quartz.

      Exemple 6.3. La source de données PostgreSQL définie comme la source de données Quartz principale

      <datasource jta="false" jndi-name="java:jboss/datasources/quartzNotManagedDS"
      			   pool-name="quartzNotManagedDS" enabled="true" use-java-context="true">
      		<connection-url>jdbc:postgresql://localhost:5432/jbpm</connection-url>
      	  <driver>postgres</driver>
      	  <security>
      		<user-name>bpms</user-name>
      		<password>bpms</password>
      	  </security>
      	</datasource>
    3. Définissez le pilote de la source de données.

      Exemple 6.4. La définition du pilote PostgreSQL

       <driver name="postgres" module="org.postgresql">
      	  <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
      	</driver>
  5. Configurer des nœuds de serveurs individuels dans l'élément main-server-group du fichier $EAP_HOME/domain/configuration/host.xml dont les propriétés sont définies dans Tableau 6.1, « Propriétés de nœud Cluster » :
    Veuillez noter que lors de la configuration d'un cluster JBoss EAP avec Zookeeper, il est possible que le nombre de nœuds JBoss EAP soit différent de celui des nœuds de Zookeeper (Zookeeper doit avoir un nombre impaire de nœuds). Il est conseillé que Zookeeper et JBoss EAP aient le même nombre de nœuds.

    Tableau 6.1. Propriétés de nœud Cluster

    Nom de propriétéValeurDescription
    jboss.node.namenodeOne
    Nom de nœuds unique dans le cluster
    org.quartz.properties/bpms/quartz-definition.properties
    chemin d'accès absolu vers le fichier de configuration Quartz
    org.uberfire.cluster.idbpms-cluster
    Nom de cluster de Helix
    org.uberfire.cluster.local.idnodeOne_12345
    ID unique du nœud de cluster Helix
    Veuillez noter que : est remplacé par _.
    org.uberfire.cluster.vfs.lockvfs-repo
    nom de la ressource défini sur le cluster Helix
    org.uberfire.cluster.zkserver1:2181
    Emplacement Zookeeper
    org.uberfire.metadata.index.dir/home/jbpm/node[N]/index
    emplacement où l'index de recherche doit être créé (pris en charge par Apache Lucene)
    org.uberfire.nio.git.daemon.hostnodeOnele nom de la machine d'hôte démon dans un cluster physique.
    org.uberfire.nio.git.daemon.port9418
    port utilisé par le référentiel VFS pour accepter les connexions client
    Le port doit être unique pour chaque membre de cluster.
    org.uberfire.nio.git.dir/home/jbpm/node[N]/repo
    Emplacement du référentiel GIT (VFS) sur le nœud [N]
    org.uberfire.nio.git.ssh.hostnodeOnele nom de la machine d'hôte SSH dans un cluster physique.
    org.uberfire.nio.git.ssh.port8003le numéro de port unique pour l'accès SSH au référentiel GIT pour un cluster exécuté sur des machines physiques.
    org.uberfire.nio.git.ssh.hostport and org.uberfire.nio.git.daemon.hostport8003 and 9418Dans un environnement virtualisé, le port externe à utiliser

    Exemple 6.5. Configuration du Cluster nodeOne

    <system-properties>
    
    	  <property name="org.uberfire.nio.git.dir" value="/tmp/bpms/nodeone" boot-time="false"/>
    	  <property name="jboss.node.name" value="nodeOne" boot-time="false"/>
    
    	  <property name="org.uberfire.cluster.id" value="bpms-cluster" boot-time="false"/>
    	  <property name="org.uberfire.cluster.zk" value="server1:2181,server2:2181,server3:2181" boot-time="false"/>
    	  <property name="org.uberfire.cluster.local.id" value="nodeOne_12345" boot-time="false"/>
    	  <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
    
    
    	  <property name="org.uberfire.nio.git.daemon.host" value="nodeOne" />
    	  <property name="org.uberfire.nio.git.daemon.port" value="9418" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.daemon.hostport" value="9418" boot-time="false"/>
    
    	  <property name="org.uberfire.nio.git.ssh.port" value="8003" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.hostport" value="8003" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.host" value="nodeOne" />
    
    	  <property name="org.uberfire.metadata.index.dir" value="/tmp/jbpm/nodeone" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.cert.dir" value="/tmp/jbpm/nodeone" boot-time="false"/>
    
    	  <property name="org.quartz.properties" value="/tmp/jbpm/quartz/quartz-db-postgres.properties" boot-time="false"/>
    
    	</system-properties>

    Exemple 6.6. Configuration du Cluster nodeTwo

    <system-properties>
    
    	  <property name="org.uberfire.nio.git.dir" value="/tmp/bpms/nodetwo" boot-time="false"/>
    	  <property name="jboss.node.name" value="nodeTwo" boot-time="false"/>
    
    	  <property name="org.uberfire.cluster.id" value="bpms-cluster" boot-time="false"/>
    	  <property name="org.uberfire.cluster.zk" value="server1:2181,server2:2181,server3:2181" boot-time="false"/>
    	  <property name="org.uberfire.cluster.local.id" value="nodeTwo_12346" boot-time="false"/>
    	  <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
    
    
    	  <property name="org.uberfire.nio.git.daemon.host" value="nodeTwo" />
    	  <property name="org.uberfire.nio.git.daemon.port" value="9418" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.daemon.hostport" value="9418" boot-time="false"/>
    
    	  <property name="org.uberfire.nio.git.ssh.port" value="8003" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.hostport" value="8003" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.host" value="nodeTwo" />
    
    	  <property name="org.uberfire.metadata.index.dir" value="/tmp/jbpm/nodetwo" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.cert.dir" value="/tmp/jbpm/nodetwo" boot-time="false"/>
    
    	  <property name="org.quartz.properties" value="/tmp/jbpm/quartz/quartz-db-postgres.properties" boot-time="false"/>
    
    
    	</system-properties>

    Exemple 6.7. Configuration du Cluster nodeThree

    <system-properties>
    
    	  <property name="org.uberfire.nio.git.dir" value="/tmp/bpms/nodethree" boot-time="false"/>
    	  <property name="jboss.node.name" value="nodeThree" boot-time="false"/>
    
    	  <property name="org.uberfire.cluster.id" value="bpms-cluster" boot-time="false"/>
    	  <property name="org.uberfire.cluster.zk" value="server1:2181,server2:2181,server3:2181" boot-time="false"/>
    	  <property name="org.uberfire.cluster.local.id" value="nodeThree_12347" boot-time="false"/>
    	  <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
    
    
    	  <property name="org.uberfire.nio.git.daemon.host" value="nodeThree" />
    	  <property name="org.uberfire.nio.git.daemon.port" value="9418" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.daemon.hostport" value="9418" boot-time="false"/>
    
    	  <property name="org.uberfire.nio.git.ssh.port" value="8003" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.hostport" value="8003" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.host" value="nodeThree" />
    
    	  <property name="org.uberfire.metadata.index.dir" value="/tmp/jbpm/nodethree" boot-time="false"/>
    	  <property name="org.uberfire.nio.git.ssh.cert.dir" value="/tmp/jbpm/nodethree" boot-time="false"/>
    
    	  <property name="org.quartz.properties" value="/tmp/jbpm/quartz/quartz-db-postgres.properties" boot-time="false"/>
    
    
    	</system-properties>
  6. Ajoutez les utilisateurs de gestion comme indiqué dans le Guide d'Administration et de Configuration pour Red Hat JBoss EAP et les utilisateurs d'application comme indiqué dans le Guide d'Administration et de Configuration Red Hat JBoss BPM Suite.
  7. Déplacez-vous sur le répertoire $EAP_HOME/bin et exécutez le serveur d'applications en mode domaine  :
    Sur les systèmes Unix :
    ./domain.sh
    Sur Windows :
    ./domain.bat
  8. Vérifiez que les nœuds sont disponibles.
Déployez l'application Business Central vers vos serveurs :
  1. Remplacez la persistance prédéfinie de l'application par la base de données requise (PostgreSQL) : appliquez les modifications suivantes dans persistence.xml :
    1. nom jta-data-source de la source défini sur le serveur d'application (java:jboss/datasources/psbpmsDS)
    2. dialecte hibernate doit correspondre au dialecte de la source de données (org.hibernate.dialect.PostgreSQLDialect)
  2. Connectez-vous en tant qu'utilisateur de gestion à la console Administration du serveur de votre domaine et ajoutez les nouveaux déploiements à l'aide de l'affichage Runtime de la console. Une fois le déploiement ajouté au domaine, attribuez-le au groupe de serveur approprié (main-server-group).

Note

Il est important que les utilisateurs vérifient explicitement la disponibilité de l'unité de déploiement de chaque membre du cluster.
Lorsqu'une unité de déploiement est créée sur un nœud de cluster, sa distribution auprès de tous les membres cluster peut prendre un certain temps. Le statut de déploiement peut être vérifié par UI et REST, cependant, si la requête est dirigée vers le nœud où le déploiement était initialement émis, la réponse est déployé. Toute requête ciblant cette unité de déploiement envoyé à un membre de cluster échoue avec DeploymentNotFoundException.