6.3. Configurando a Clusterização no Red Hat JBoss EAP

As informações fornecidas nessa seção tratam-se de uma receita simples de clusterização. Para informações adicionais sobre clusterização, por favor consulte a documentação do Red Hat JBoss EAP.
Durante o uso de clusterização do JBoss EAP, existe um único controlador de domínio do JBoss EAP com os outros subordinados do JBoss EAP conectando-se a ele como usuários de gerenciamento. A implantação do Business Central e do Dashbuilder pode ser feita como um usuário de gerenciamento em um controlador de domínio e as implantações WAR serão distribuídas a outros membros do cluster do JBoss EAP.
Para configurar a clusterização no Red Hat JBoss EAP 6, siga as instruções a seguir:
  1. Instale o seu driver JDBC como um módulo principal: copie o driver jar em $EAP_HOME/modules/system/layers/base/ e crie um arquivo module.xml no diretório.
  2. Edite o arquivo module.xml a partir do respectivo módulo XSD.

    Exemplo 6.6. Conteúdo do arquivo module.xml para uma fonte de dados 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>
    
  3. Configure os nós dos servidores individuais no elemento main-server-group no arquivo $EAP_HOME/domain/configuration/host.xml com as propriedades definidas na Tabela 6.1, “Propriedades dos Nós de Cluster ”:
    Observe que, ao configurar um cluster do JBoss EAP com o ZooKeeper, é possível haver uma diferença entre o número de nós do JBoss EAP e do ZooKeeper (lembrando que o ZooKeeper deve ter um número ímpar de nós). No entanto, a mesma contagem de nós tanto para o ZooKeeper quanto para o JBoss EAP é considerada a melhor prática.

    Tabela 6.1. Propriedades dos Nós de Cluster

    Nome das propriedadesValorDescrição
    jboss.node.namenodeOne
    Nome de nó exclusivo dentro do cluster
    org.quartz.properties/bpms/quartz-definition.properties
    Caminho absoluto para o arquivo de configuração quartz
    org.uberfire.cluster.autostarttrue
    Este valor atrasa a clusterização VFS até que o aplicativo seja completamente inicializado, evitando conflitos quando todos os membros do cluster criam clones locais.
    org.uberfire.cluster.idbpms-cluster
    Nome do cluster do Helix
    org.uberfire.cluster.local.idnodeOne_12345
    ID exclusiva do nó do cluster do Helix.
    Observe que : é substituído por _.
    org.uberfire.cluster.vfs.lockvfs-repo
    Nome do recurso definido no cluster Helix
    org.uberfire.cluster.zkserver1:2181
    Localização do ZooKeeper
    org.uberfire.metadata.index.dir/home/jbpm/node[N]/index
    Local onde o index para pesquisa será criado (mantido pelo Apache Lucene)
    org.uberfire.nio.git.daemon.hostnodeOneNome da máquina hospedeira daemon em um cluster físico.
    org.uberfire.nio.git.daemon.port9418
    Porta usada pelo repositório VFS para aceitar as conexões do cliente
    A porta precisa ser exclusiva para cada membro do cluster.
    org.uberfire.nio.git.dir/home/jbpm/node[N]/repo
    Localização do repositório (VFS) GIT no nó[N]
    org.uberfire.nio.git.ssh.hostnodeOneNome da máquinha hospedeira SSH em um cluster físico.
    org.uberfire.nio.git.ssh.port8003Número de porta exclusivo para acesso ssh ao repo GIT para um cluster em execução nas máquinas físicas.
    org.uberfire.nio.git.ssh.hostport and org.uberfire.nio.git.daemon.hostport8003 and 9418Porta externa a ser usada em um ambiente virtualizado.

    Exemplo 6.7. Configuração do cluster de nó 1 (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.cluster.autostart" value="true" boot-time="true"/>
      
      <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>

    Exemplo 6.8. Configuração do cluster de nó 2 (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.cluster.autostart" value="true" boot-time="true"/>
      
      <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>

    Exemplo 6.9. Configuração do cluster de nó 3 (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.cluster.autostart" value="true" boot-time="true"/>
      
      <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>
  4. Adicione os usuários de gerenciamento, como instruído no guia Administration and Configuration Guide do Red Hat JBoss EAP, e os usuários do aplicativo, como instruído no guia Red Hat JBoss BPM Suite Administration and Configuration Guide.
  5. Inicie o servidor do aplicativo:
    ]$ $JBOSS_HOME/bin/domain.sh
  6. Verifique se os nós estão disponíveis.
Implante o aplicativo Business Central nos seus servidores:
  1. Mude a persistência predefinida do aplicativo para o banco de dados solicitado (PostgreSQL): em persistence.xml, mude o seguinte:
    1. o nome da fonte de dados jta para a fonte definida no servidor do aplicativo (java:jboss/datasources/psbpmsDS)
    2. o dialeto do hibernate para corresponder ao dialeto da fonte de dados (org.hibernate.dialect.PostgreSQLDialect)
  2. Faça o logon como o usuário de gerenciamento no console de administração do servidor do seu domínio e adicione as novas implantações utilizando o modo de exibição de execução do console. Depois que a implantação for adicionada ao domínio, atribua-a ao grupo de servidores correto (main-server-group).

Nota

É importante que os usuários verifiquem explicitamente a prontidão da unidade de implantação em relação a cada membro de cluster.
Quando uma unidade de implantação é criada em um nó de cluster, leva-se algum tempo até que ela seja distribuída entre todos os membros do cluster. O status da implantação pode ser verificado via IU e REST, no entanto caso a consulta chegue ao nó onde a implantação foi emitida originalmente, a resposta será implantada - deployed. Qualquer solicitação direcionando essa unidade de implantação enviada a um membro de cluster diferente falha com DeploymentNotFoundException.