Capítulo 6. Clusterizando
- O Repositório GIT: repositório do sistema de arquivos virtual (em inglês, virtual-file-system - VFS) que retém os ativos empresariais para que todos os nós do cluster utilizem o mesmo repositório.
- O Servidor de Execução e os Aplicativos Web: servidor de tempo de execução que reside no contêiner (como o Red Hat JBoss EAP) junto com os aplicativos web BRMS e BPM Suite para que os nós compartilhem os mesmos dados de tempo de execução.Para instruções sobre como clusterizar o aplicativo, consulte a documentação de clusterização de contêineres.
- O Banco de Dados Back-end: banco de dados com dados de estados, tais como, instâncias de processos, sessões KIE, log do histórico, etc., com finalidade de failover.
Figura 6.1. Esquema do Sistema Red Hat JBoss BPM Suite com Componentes de Sistemas Individuais
Mecanismo de Clusterização do Repositório GIT
- Apache Zookeeper, que reúne todas as partes.
- Apache Helix, componente de gerenciamento do cluster que registra todos os detalhes do cluster (o cluster em si, os nós e os recursos).
- uberfire framework, que fornece o suporte principal dos aplicativos web.
Figura 6.2. Esquema de clusterização com Helix e Zookeeper
- Configurar o próprio cluster, usando Zookeeper e Helix
- Configurar o banco de dados back-end com configuração e tabelas Quartz
- Configurar a clusterização no seu contêiner (essa documentação fornece instruções de clusterização apenas para o Red Hat JBoss EAP 6)
Clusterizando os Repositórios do Maven
rsync.
6.1. Clusterização no JBoss EAP Copiar o linkLink copiado para a área de transferência!
6.1.1. Clusterização utilizando instalador JAR Copiar o linkLink copiado para a área de transferência!
Nota
business-central.war, dashbuilder.war, e kie-server.war . Para personalizar a configuração para adaptar ao seu cenário, ou para utilizar clusterização com ZIP implantável, consulte o Seção 6.1.2, “Configuração Personalizada (ZIP Implantável)”. Você pode também obter mais informações no JBoss EAP documentation.
Nota
Selecione fornecedor JDBC
Nesta tela, selecione o fornecedor JDBC da lista. Você precisa fornecer os JARs drivers JDBC correspondentes em uma destas formas:- Selecione um ou mais arquivos no sistema de arquivos
- Forneça uma ou mais URLs. O instalador baixa os arquivos automaticamente.
Em seguida, o instalador copia o(s) JAR(s) em uma localização apropriada abaixo do diretório$EAP_HOME/modules, onde um arquivomodule.xmlcorrespondente também foi criado automaticamente.
Figura 6.3. Configuração do JDBC Driver
Configurar conexão Quartz
Na próxima tela, forneça os dados para o banco de dados para Quartz. O instalador automaticamente cria o arquivo de definição Quartz ($EAP_HOME/domain/configuration/quartz-definition.properties) e duas fontes de dados Quartz no arquivo de configuração de domínio$EAP_HOME/domain/domain.xml. Você pode editar os arquivos depois de terminada a instalação.Nota
Durante a instalação, scripts do DDL Quartz serão executados no banco de dados selecionado nesta etapa. Estes scripts fazem mudanças necessárias para que o Quartz opere (adicionando tabelas, etc.), e podem ser encontrados em$EAP_HOME/jboss-brms-bpmsuite-6.2-supplementary-tools/ddl-scriptspara referência (Você não precisa modificá-los de nenhuma forma).
Figura 6.4. Configuração de banco de dados Quartz
- Clique em next para iniciar a instalação.
Importante
Quando utilizar o instalador JAR, os arquivoswarsão automaticamente criados dos aplicativos que residem em$EAP_HOME/standalone/deployments/. Isto significa que é necessário espaço adicional conforme os aplicativos existam em ambos os estados compactado e descompactado no armazenamento durante a instalação.Três instâncias ZooKeeper são criadas automaticamente em$EAP_HOME/jboss-brms-bpmsuite-6.2-supplementary-tools/(directory nameszookeeper-one,zookeeper-two, ezookeeper-three).No diretório$EAP_HOME/jboss-brms-bpmsuite-6.2-supplementary-tools/helix-core, você pode encontrar configuração Helix padrão e scripts para iniciar o cluster—startCluster.shpara UNIX estartCluster.batpara Windows.Depois de finalizada a instalação, NÃO selecione executar o servidor imediatamente. Primeiro você precisa iniciar o cluster mudando para o diretório$EAP_HOME/jboss-brms-bpmsuite-6.2-supplementary-tools/helix-coree executando o script de inicialização mencionado:Nos sistemas UNIX:./startCluster.shNo Windows:./startCluster.batEste script inicializa o cluster Helix e as intâncias ZooKeeper. Somente depois disto, inicie o servidor EAP no modo de domínio, movendo para o diretório$EAP_HOME/bine executando:Nos sistemas UNIX:./domain.shNo Windows:./domain.bat
6.1.2. Configuração Personalizada (ZIP Implantável) Copiar o linkLink copiado para a área de transferência!
- Configurar Zookeeper e Helix de acordo com Seção 6.2.1, “Configurando um Cluster”.
- Configurar Quartz de acordo com Seção 6.2.2, “Configurando o Quartz”.
- 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.1. 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> - Configurar a fonte de dados para o servidor: abra para edição o arquivo
host.xmloustandalone.xml, dependendo do PERFIL utilizado que está localizado no$EAP_HOME/PROFILE/, localize o perfilcompletoe siga as instruções a seguir:- Adicione a definição da fonte de dados principal usada pelo JBoss BPM Suite.
Exemplo 6.2. A fonte de dados PostgreSQL definida como a fonte de dados JBoss BPM Suite principal
<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> - Adicionar a definição da fonte de dados para o serviço Quartz.
Exemplo 6.3. A fonte de dados PostgreSQL definida como a fonte de dados Quartz
<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> - Definir o driver da fonte de dados.
Exemplo 6.4. Definição do driver PostgreSQL
<driver name="postgres" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver>
- Configure os nós de servidores individuais no
main-server-groupelement in the$EAP_HOME/domain/configuration/host.xmlarquivo com propriedades definidas 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, é considerada a melhor prática ter a mesma contagem de nós tanto para o ZooKeeper quanto para o JBoss EAP.Expand 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.5. 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.6. 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.7. 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, conforme instruído no guia Administration and Configuration Guide do Red Hat JBoss EAP e os usuários do aplicativo, conforme instruído no guia Red Hat JBoss BPM Suite Administration and Configuration Guide.
- Mova para o diretório
$EAP_HOME/bine inicie o servidor do aplicativo no modo de domínio:Nos sistemas UNIX:./domain.shNo Windows:./domain.bat - Verifique se os nós estão disponíveis.
- 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) - hibernar o dialeto 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 Runtime do console. Depois que a implantação for adicionada ao domínio, atribua-a ao grupo de servidores correto (
main-server-group).
Nota
deployed. Qualquer solicitação direcionando essa unidade de implantação enviada a um membro de cluster diferente falha com DeploymentNotFoundException.