6.2. Agrupamiento de conjunto genérico

6.2.1. Configuración de un clúster

Para agrupar su repositorio GIT (VFS) en Business Central, siga los siguientes pasos (Si no utiliza Business Central, por favor ignore esta sección):
  1. Descargue jboss-bpmsuite-brms-VERSIÓN-supplementary-tools.zip, la cual contiene scripts de Apache Zookeeper, Apache Helix y Quartz DDL. Después de descargar, descomprima el archivo: se crearán el directorio Zookeeper ($ZOOKEEPER_HOME) y el directorio Helix ($HELIX_HOME).
  2. Ahora configure Zookeeper:
    1. En el directorio Zookeeper, vaya al directorio conf y haga lo siguiente:
      cp zoo_sample.cfg zoo.cfg
    2. Abra zoo.cfg para modificar y ajustar los parámetros incluidos los siguientes:
      # 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
      
      Asegúrese de que el sitio dataDir exista y sea accesible.
    3. Asigne un ID de nodo a cada miembro que ejecutará ZooKeeper. Por ejemplo, use "1", "2" y "3" respectivamente para nodo 1, nodo 2 y nodo 3, respectivamente. ZooKeeper debería tener un número de instancias impar, y por lo menos 3 para recuperarse del fallo.
      El ID de nodo es especificado en el campo myid en el directorio de datos de ZooKeeper en cada nodo. Por ejemplo, en nodo 1, ejecute: $ echo "1" > /zookeeper/data/myid
  3. Configure Zookeeper, para que pueda usarlo durante la creación del clúster con Helix:
    1. Vaya al directorio $ZOOKEEPER_HOME/bin/ e inicie ZooKeeper:
      ./zkServer.sh start
      Puede revisar el registro de Zookeeper en el archivo $ZOOKEEPER_HOME/bin/zookeeper.out. Revise este registro para verificar si el 'ensemble' (clúster) se ha formado correctamente. Uno de los nodos debe ser elegido como líder con los otros dos nodos que los siguen.
  4. Después de iniciar el clúster de Zookeeper, configure e inicie Helix. Helix solamente necesita ser configurado una vez y desde un solo nodo. Luego Zookeeper almacenará y compartirá la configuración como corresponde.
    Establezca el clúster con el servidor Zookeeper como el maestro de la configuración:
    1. Cree el clúster al proporcionar el host y el puerto de Zookeper como una lista separada por comas:
      $HELIX_HOME/bin/helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT --addCluster CLUSTER_NAME
    2. Agregue sus nodos al clúster:
      $HELIX_HOME/bin/helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT --addNode CLUSTER_NAME NODE_NAMEUNIQUE_ID

      Ejemplo 6.8. Adición de los tres nodos de clúster

      ./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. Agregar recursos al clúster.

    Ejemplo 6.9. Agregar vfs-repo como recurso

    ./helix-admin.sh --zkSvr server1:2181,server2:2181,server3:2181 --addResource bpms-cluster vfs-repo 1 LeaderStandby AUTO_REBALANCE
  6. Reequilibrar el clúster con tres nodos.

    Ejemplo 6.10. Reequilibrar bpms-cluster

    ./helix-admin.sh --zkSvr server1:2181,server2:2181,server3:2181 --rebalance bpms-cluster vfs-repo 3
    
    En el comando anterior, 3 significa para tres nodos zookeeper
  7. Inicie el controlador Helix en todos los nodos en el clúster.

    Ejemplo 6.11. Inicie el controlador Helix

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

Nota

Zookeeper debe ser un número impar de instancias, al menos 3 para recuperarlas del fallo. Después de un fallo, el número restante de nodos aún puede formar una mayoría. Por ejemplo, un clúster de cinco nodos Zookeeper puede soportar la pérdida de dos nodos para recuperarse completamente. Una instancia Zookeeper aún es posible, la replicación funcionará, sin embargo las posibilidades de no recuperación estarán disponibles si falla.

Detención de Helix y Zookeeper

Para detener los procesos Helix y el servidor Zookeeper, siga el siguiente procedimiento:

Procedimiento 6.1. Detención de Helix y Zookeeper

  1. Detenga los procesos de servidor JBoss EAP
  2. Detenga el proceso Helix que ha sido creado por run-helix-controller.sh, por ejemplo, kill -15 <pid of HelixControllerMain>.
  3. Detenga el servidor ZooKeeper mediante el comando zkServer.sh stop .

6.2.2. Configuración de Quartz

Nota

Si usted no está utilizando Quartz (temporizadores) en los procesos de su empresa, o si no utiliza el Execution Server de ninguna manera, puede ignorar esta sección. Por favor, observe que si desea replicar temporizadores en su proceso empresarial, debe usar el componente Quartz.
Antes de configurar la base de datos en su servidor de aplicaciones, necesitará preparar la base de datos para que Quartz pueda crear tablas Quartz,las cuales guardarán la fecha de temporizador y el archivo de definición Quartz.
Para configurarlo, haga lo siguiente:
  1. Configure la base de datos. Asegúrese de usar una la fuente de datos con soporte non-JTA. Observe que debido a que Quartz necesita un fuente de datos non-JTA, usted no puede usar la fuente de datos de Business Central. En el código de ejemplo, se utiliza PostgreSQL con el usuario bpms y la contraseña bpms .
  2. Cree las tablas Quartz en su base de datos para permitir la sincronización de eventos de temporizador. Para ello, use el script DDL de su base de datos, el cual está disponible en el archivo zip extraído complementario en $QUARTZ_HOME/docs/dbTables.
  3. Cree el archivo de configuración quartz-definition.properties en el directorio $JBOSS_HOME/PROFILE/configuration/ y defina las propiedades Quartz.

    Ejemplo 6.12. Archivo de configuración para base de datos 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
    
    Observe las fuentes de datos que se acomodarán a los dos esquemas Quartz al final del archivol

    Importante

    El intervalo recomendado para descubrir clúster es de 20 segundos y se establece en el org.quartz.jobStore.clusterCheckinInterval del archivo quartz-definition.properties. Según su configuración considere el impacto de rendimiento y modifique el parámetro si es necesario.
    También observe la propiedad org.quartz.jobStore.driverDelegateClass que define el dialecto de la base de datos a usar para comunicarse con el set de base de datos (en este ejemplo, org.quartz.impl.jdbcjobstore.PostgreSQLDelegate. Para Oracle, use org.quartz.impl.jdbcjobstore.oracle.OracleDelegate).