Por Gabriel Prestes*

Diversas publicações na Internet apresentam formas de realizar a configuração de um cluster no Wildfly. Com replicação de sessão, balanceamento de carga e quando temos no ambiente a composição de Wildfly (infinispan, jgroups), Apache e mod_cluster ou mod_jk. Outro cenário comum nas publicações permite o multicast, ou seja, a propagação de informações para diversos destinatários usando UDP.

JBossWildfly um cluster sem multicast, mod_cluster ou mod_jk

Em datacenters privados é possível realizar tal configuração, mas ao levar para a realidade do VPC da Amazon, temos o Overlay Multicast cuja habilitação depende de um roteiro de ajustes, instalações de pacotes, etc.  

Existem meios mais simples de configurar o reconhecimento de host-controller do cluster. Caso sua necessidade seja trabalhar com AutoScale, então o Overlay se justifica principalmente por não fixar configurações no domain.xml, ao deixar mais dinâmica sua configuração. Entretanto, se esta não é sua necessidade, é possível transformar o multicast em uma lista de hosts de host-controllers.

Outro  item interessante de mencionar, com relação àa replicação de sessão, é alterar a comunicação dos objetos de sessão de UDP para TCP, pois isso tornará a replicação mais confiável. Mas quais ajustes são necessários e em quais arquivos? Na minha publicação não tratarei de como configurar um cluster, pois isto  está disponível em diversos sites com a correta orientação, mas vou citar especificamente as configurações que mencionei acima (initial_hosts do jgroups e também do método TCP com TCPPING).

Para realizar estes ajustes, segue um exemplo de configuração do domain.xml para adaptação de acordo com sua realidade de ambiente:

           <subsystem xmlns=”urn:jboss:domain:jgroups:3.0″>

               <channels default=”ee”>

                   <channel name=”ee”/>

               </channels>

               <stacks default=”tcp”>

                   <stack name=”udp”>

                       <transport type=”UDP” socket-binding=”jgroups-udp”/>

                       <protocol type=”PING”/>

                       <protocol type=”MERGE3″/>

                       <protocol type=”FD_SOCK” socket-binding=”jgroups-udp-fd”/>

                       <protocol type=”FD_ALL”/>

                       <protocol type=”VERIFY_SUSPECT”/>

                       <protocol type=”pbcast.NAKACK2″/>

                       <protocol type=”UNICAST3″/>

                       <protocol type=”pbcast.STABLE”/>

                       <protocol type=”pbcast.GMS”/>

                       <protocol type=”UFC”/>

                       <protocol type=”MFC”/>

                       <protocol type=”FRAG2″/>

                       <protocol type=”RSVP”/>

                   </stack>

                   <stack name=”tcp”>

                       <transport type=”TCP” socket-binding=”jgroups-tcp”/>

                       <protocol type=”TCPPING” socket-binding=”jgroups-tcp”>

                           <property name=”initial_hosts”>

                               master[7600],slave1[7600]

                           </property>

                           <property name=”port_range”>

                               0

                           </property>

                       </protocol>

                       <protocol type=”MERGE3″/>

                       <protocol type=”FD_SOCK” socket-binding=”jgroups-tcp-fd”/>

                       <protocol type=”FD”/>

                       <protocol type=”VERIFY_SUSPECT”/>

                       <protocol type=”pbcast.NAKACK2″/>

                       <protocol type=”UNICAST3″/>

                       <protocol type=”pbcast.STABLE”/>

                       <protocol type=”pbcast.GMS”/>

                       <protocol type=”MFC”/>

                       <protocol type=”FRAG2″/>

                       <protocol type=”RSVP”/>

                   </stack>

               </stacks>

           </subsystem>

IMPORTANTE: Aplique as configurações acima no profile utilizado, no HA ou Full-HA, os ajustes realizados estão em negrito.

Observe que o nome ‘master’ e ‘slave1’ são os node identifier no host.xml. Também libere a porta 7600 nos SecurityGroups.

Por que não utilizar o mod_cluster ou mod_jk? Quando estamos um ambiente AWS*, pode-se utilizar o próprio LoadBalancer (ELB) como balanceador e health-check* das instâncias, semelhante a funcionalidade do mod_cluster, que também é baseada em loadfactor para distribuir as conexões. Ao fazer isto não se deve expor a interface de gerenciamento (bmanagement), deixando-a apenas como loopback.Ainda que se possa contar com as regras de SecurityGroups, também é necessária uma página simples de teste dentro do WAR/EAR para  o ELB que pode retornar ‘OK’ após fazer alguns testes funcionais na aplicação e garantir  o funcionamento de DataSource e demais componentes relacionados àa aplicação.

Certificados SSL também podem ser instalados no ELB, assim como a camada de cache pode ser CloudFront, mas se for necessário envolver redirecionamentos para atender o negócio da aplicação, não tem como fugir de um webserver. Neste caso, é possível utilizar o Apache com mod_cluster ou mod_jk como frontend para o ELB. Sugiro o uso do mod_cluster como balanceador em função do loadfactor mais eficiente em comparação  com o mod_jk.

Caso surja qualquer outra dúvida pertinente ao Wildfly também há a possibilidade de recorrer à documentação do produto, que é bem rica em detalhes, tanto para o analista de infraestrutura como para o desenvolvedor. O link está disponível nas referências da publicação.

* Wildfly – chamarei nesta publicação somente assim e não mais de JBoss.

* AWS – Amazon Web Services

* Health-check – modelo que checagem para saber se o serviço da instance está ativo e funcional, respondendo as condições especificadas no ELB

Referências:

https://aws.amazon.com/articles/6234671078671125

https://docs.jboss.org/author/display/WFLY10/Documentation

 

Gabriel Prestes*Gabriel Prestes é formando em Gestão da Tecnologia da Informação, arquiteto de middleware da ilegra com experiência de mais de 5 anos em suítes de middleware Oracle e RedHat. É um entusiasta de carros antigos.

 

 

 

Tagged on:                 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

CAPTCHA
Change the CAPTCHA codeSpeak the CAPTCHA code