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:
- Instale o seu driver JDBC como um módulo principal: copie o driver jar em
$EAP_HOME/modules/system/layers/base/e crie um arquivomodule.xmlno diretório. - Edite o arquivo
module.xmla 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> - Configure os nós dos servidores individuais no elemento
main-server-groupno arquivo$EAP_HOME/domain/configuration/host.xmlcom 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 propriedades Valor Descrição jboss.node.namenodeOneNome de nó exclusivo dentro do clusterorg.quartz.properties/bpms/quartz-definition.propertiesCaminho absoluto para o arquivo de configuração quartzorg.uberfire.cluster.autostarttrueEste 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-clusterNome do cluster do Helixorg.uberfire.cluster.local.idnodeOne_12345ID exclusiva do nó do cluster do Helix.Observe que:é substituído por_.org.uberfire.cluster.vfs.lockvfs-repoNome do recurso definido no cluster Helixorg.uberfire.cluster.zkserver1:2181Localização do ZooKeeperorg.uberfire.metadata.index.dir/home/jbpm/node[N]/indexLocal 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.port9418Porta usada pelo repositório VFS para aceitar as conexões do clienteA porta precisa ser exclusiva para cada membro do cluster.org.uberfire.nio.git.dir/home/jbpm/node[N]/repoLocalizaçã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>
- 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.
- Inicie o servidor do aplicativo:
]$ $JBOSS_HOME/bin/domain.sh
- Verifique se os nós estão disponíveis.
Implante o aplicativo Business Central nos seus servidores:
- Mude a persistência predefinida do aplicativo para o banco de dados solicitado (PostgreSQL): em
persistence.xml, mude o seguinte:- o nome da fonte de dados jta para a fonte definida no servidor do aplicativo (
java:jboss/datasources/psbpmsDS) - o dialeto do hibernate para corresponder ao dialeto da fonte de dados (
org.hibernate.dialect.PostgreSQLDialect)
- 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.