6.2. Mise en cluster d'un ensemble générique

6.2.1. Installer un Cluster

Pour mettre votre référentiel GIT (VFS) en cluster dans Business Central, veuillez effectuer ce qui suit (si vous n'utilisez pas Business Central, vous pouvez ignorer cette section) :
  1. Téléchargez jboss-bpmsuite-brms-VERSION-supplementary-tools.zip, qui contient Apache Zookeeper, Apache Helix et les scripts Quartz DDL. Après le téléchargement, décompressez l'archive : les répertoires Zookeeper ($ZOOKEEPER_HOME) et Helix ($HELIX_HOME) sont créés.
  2. Veuillez maintenant configurer ZooKeeper :
    1. Dans le répertoire ZooKeeper, allez dans le répertoire conf et effectuez ce qui suit :
      cp zoo_sample.cfg zoo.cfg
    2. Ouvrez zoo.cfg pour effectuer des modifications et ajustez les paramètres dont :
      # the directory where the snapshot is stored.
      	dataDir=$ZOOKEEPER_HOME/data/
      	# the port at which the clients connects
      	clientPort=2181
      	server.1=server1:2888:3888
      	server.2=server2:2888:3888
      	server.3=server3:2888:3888
      
      Assurez-vous de l'existence et de l'accessibilité de l'emplacement dataDir.
    3. Attribuez un ID de nœud à chaque membre qui exécutera ZooKeeper. Par exemple, utilisez 1, 2 et 3 pour le nœud 1, 2 et 3 respectivement. ZooKeeper doit avoir un nombre impair d'instances, au moins trois, pour pouvoir récupérer d'un échec.
      L'ID de nœud est spécifié dans un champ appelé myid sous le répertoire de données de ZooKeeper sur chaque nœud. Par exemple, sur le nœud 1, exécutez : $ echo "1" > /zookeeper/data/myid
  3. Installez ZooKeeper afin de l'utiliser lors de la création du cluster avec Helix :
    1. Allez sur le répertoire $ZOOKEEPER_HOME/bin/ et démarrez ZooKeeper :
      ./zkServer.sh start
      Vous pouvez vérifier le journal de ZooKeeper dans le fichier $ZOOKEEPER_HOME/bin/zookeeper.out. Vérifiez ce journal pour vous assurer que « l'ensemble » (cluster) a bien été créé. Un des nœuds doit être élu comme nœud principal, suivi par les deux autres.
  4. Une fois l'ensemble ZooKeeper démarré, l'étape suivante consiste à configurer et démarrer Helix. Helix ne doit être configuré qu'une fois, à partir d'un nœud unique. La configuration est ensuite stockée par l'ensemble ZooKeeper et partagée si besoin.
    Installez le cluster avec le serveur ZooKeeper comme maître de la configuration :
    1. Créez le cluster en fournissant l'hôte ZooKeeper et importez en tant que liste séparée par des virgules :
      $HELIX_HOME/bin/helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT --addCluster CLUSTER_NAME
    2. Ajoutez vos nœuds au cluster :
      $HELIX_HOME/bin/helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT --addNode CLUSTER_NAME NODE_NAMEUNIQUE_ID

      Exemple 6.8. Ajouter trois nœuds de cluster

      ./helix-admin.sh --zkSvr server1:2181,server2:2181,server3:2181 --addNode bpms-cluster nodeOne:12345
      	./helix-admin.sh --zkSvr server1:2181,server2:2181,server3:2181 --addNode bpms-cluster nodeTwo:12346
      	./helix-admin.sh --zkSvr server1:2181,server2:2181,server3:2181 --addNode bpms-cluster nodeThree:12347
  5. Ajouter des ressources au cluster

    Exemple 6.9. Ajouter vfs-repo comme ressource

    ./helix-admin.sh --zkSvr server1:2181,server2:2181,server3:2181 --addResource bpms-cluster vfs-repo 1 LeaderStandby AUTO_REBALANCE
  6. Rééquilibrez le cluster avec les trois nœuds.

    Exemple 6.10. Rééquilibrer le bpms-cluster

    ./helix-admin.sh --zkSvr server1:2181,server2:2181,server3:2181 --rebalance bpms-cluster vfs-repo 3
    
    Dans la commande ci-dessus, 3 fait référence à trois nœuds Zookeeper.
  7. Démarrez le contrôleur Helix dans tous les nœuds du cluster.

    Exemple 6.11. Démarrez le contrôleur Helix

    ./run-helix-controller.sh --zkSvr server1:2181,server2:2181,server3:2181 --cluster bpms-cluster 2>&1 > /tmp/controller.log &

Note

ZooKeeper doit contenir un nombre impair d'instances, au moins 3 pour récupérer d'un échec. Suite à un échec, le nombre de nœuds restants doit toujours pouvoir former une majorité. Par exemple, un cluster de cinq nœuds ZooKeeper peut supporter la perte de deux nœuds afin de récupérer complètement. Une instance ZooKeeper est toujours possible, la replication fonctionnera, mais aucune possibilité de récupération n'est disponible si elle échoue.

Arrêt de Helix et ZooKeeper

Pour arrêter les processus de Helix et le serveur ZooKeeper, utilisez la procédure suivante.

Procédure 6.1. Arrêt de Helix et ZooKeeper

  1. Arrêtez les processus du serveur JBoss EAP
  2. Arrêtez le processus Helix créé par run-helix-controller.sh, par exemple kill -15 <pid of HelixControllerMain>.
  3. Arrêtez le serveur ZooKeeper à l'aide de la commande zkServer.sh stop

6.2.2. Installation de Quartz

Note

Si vous n'utilisez pas (les minuteurs) Quartz dans vos processus métiers, ou si vous n'utilisez pas du tout le serveur d'exécution, vous pouvez ignorer cette section. Veuillez noter que si vous souhaitez répliquer des minuteurs dans vos processus métiers, vous devrez utiliser le composant Quartz.
Avant de pouvoir configurer la base de données de votre serveur d'application, vous devez préparer la base de données pour que Quartz crée des tableaux Quartz, qui détiendra les données de minuterie et le fichier de définition Quartz.
Pour cela, veuillez effectuer ce qui suit :
  1. Installez la base de données. Assurez-vous d'utiliser l'une des sources de données non JTA prises en charge. Veuillez noter que Quartz nécessite une source de données non JTA et que vous ne pouvez donc pas utiliser la source de données Business Central. Dans le code en exemple, PostgreSQL est utilisé avec l'utilisateur bpms et le mot de passe bpms. Cette base de données devra être connectée à votre serveur d'application, assurez-vous donc de noter les informations et détails d'authentification de la base de données.
  2. Créez des tableaux Quartz sur votre base de données pour permettre une synchronisation d'événements de minuteur. Pour cela, veuillez utiliser le script DDL pour votre base de données, disponible dans l'archive zip supplémentaire disponible sur $QUARTZ_HOME/docs/dbTables.
  3. Créez le fichier de configuration Quartz quartz-definition.properties dans le répertoire $JBOSS_HOME/PROFILE/configuration/ et définissez les propriétés Quartz.

    Exemple 6.12. Fichier de configuration Quartz pour une base de données PostgreSQL

     #============================================================================
    	# Configure Main Scheduler Properties
    	#============================================================================
    
    	org.quartz.scheduler.instanceName = jBPMClusteredScheduler
    	org.quartz.scheduler.instanceId = AUTO
    
    	#============================================================================
    	# Configure ThreadPool
    	#============================================================================
    
    	org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    	org.quartz.threadPool.threadCount = 5
    	org.quartz.threadPool.threadPriority = 5
    
    	#============================================================================
    	# Configure JobStore
    	#============================================================================
    
    	org.quartz.jobStore.misfireThreshold = 60000
    
    	org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreCMT
    	org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
    	org.quartz.jobStore.useProperties=false
    	org.quartz.jobStore.dataSource=managedDS
    	org.quartz.jobStore.nonManagedTXDataSource=notManagedDS
    	org.quartz.jobStore.tablePrefix=QRTZ_
    	org.quartz.jobStore.isClustered=true
    	org.quartz.jobStore.clusterCheckinInterval = 20000
    
    	#============================================================================
    	# Configure Datasources
    	#============================================================================
    	org.quartz.dataSource.managedDS.jndiURL=jboss/datasources/psbpmsDS
    	org.quartz.dataSource.notManagedDS.jndiURL=jboss/datasources/quartzNotManagedDS
    
    Veuillez noter les sources de données configurées qui recevront les deux programmes Quartz à la fin du fichier.

    Important

    L'intervalle recommandé pour la détection de cluster est de 20 secondes. Il est défini dans la propriété org.quartz.jobStore.clusterCheckinInterval du fichier quartz-definition.properties. Selon votre configuration, prenez en compte l'impact sur la performance et modifiez les paramètres en conséquence.
    Veuillez également noter la propriété org.quartz.jobStore.driverDelegateClass qui définit le dialecte DB à utiliser lors de la communication avec la base de données configurée (dans cet exemple, org.quartz.impl.jdbcjobstore.PostgreSQLDelegate. Si vous utilisez Oracle, utilisez org.quartz.impl.jdbcjobstore.oracle.OracleDelegate).