Cluster de Servidores Standalone no JBoss AS 7.1 – Parte 1

Postado em Atualizado em

Em aplicações sérias, é essencial que o ambiente ofereça escalabilidade e alta disponibilidade, esse objetivo pode ser alcançado através de ambientes clusterizados e altamente elásticos. Hoje vamos abordar uma das formas de criação de Cluster no JBoss AS 7.1, utilizando o conceito de servidores standalone.

As possíveis configurações de cluster  para servidores standalone podem ser divididos em dois cenários principais:

• Cluster de nós executando na mesma máquina
• Cluster de nós executando em máquinas diferentes

Cluster de Nós Executando na Mesma Máquina

A criação de cluster de servidores JBoss na mesma máquina, se aplica  quando possuímos ótimos recursos de hardware. A configuração de nós na mesma máquina exige que você duplique a sua distribuição do JBoss AS 7.  Também será necessário que você escolha entre duas opções:

1. Definir múltiplos endereços IP  na mesma máquina.
2. Definir um offset de portas para cada nó.

A primeira forma é conhecida como multi-homing,  possuir múltiplas conexões reduzem a chance de acontecer uma parada catastrófica se uma das conexões falhar. Para configurar multi-homing no Linux, é bem simples, basta especificar o IP que deverá responder em determinada interface:

# ifconfig eth0 192.168.0.10 up
# ifconfig eth1 192.168.0.20 up

Exemplo:

eth0      Link encap:Ethernet  Endereço de HW 08:00:27:53:CD:E5
          inet end.: 192.168.0.10  Bcast:192.168.0.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe53:cde5/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:4939 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4919 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:5269711 (5.0 MiB)  TX bytes:761430 (743.5 KiB)

eth1      Link encap:Ethernet  Endereço de HW 08:00:27:4A:3C:82
          inet end.: 192.168.0.20  Bcast:192.168.0.255  Masc:255.255.255.0
          endereço inet6: fe80::a00:27ff:fe4a:3c82/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:118 errors:0 dropped:0 overruns:0 frame:0
          TX packets:190 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:32243 (31.4 KiB)  TX bytes:22900 (22.3 KiB)

O próximo passo agora é configurarmos o arquivo standalone-ha.xml, só para deixar claro, nós duplicamos os arquivos de instalação do JBoss AS 7, então temos JBossAS7-1 e JBossAS7-2 .

Edite o arquivo standalone-ha.xml do JBossAS7-1

   vim JBOSS_HOME/standalone/configuration/standalone-ha.xml

Atualize as interface public e management, com o IP configurado anteriormente.

 <interfaces>
         <interface name="management">
            <inet-address value="192.168.0.10"/>
         </interface>
         <interface name="public">
            <inet-address value="192.168.0.10"/>
         </interface>
 </interfaces>

Repita o Processo para o JBossAS-2

vim JBOSS_HOME/standalone/configuration/standalone-ha.xml

Atualize as interfaces:

 <interfaces>
         <interface name="management">
            <inet-address value="192.168.0.20"/>
         </interface>
         <interface name="public">
            <inet-address value="192.168.0.20"/>
         </interface>
 </interfaces>

Agora já estamos prontos para iniciar o cluster do JBoss AS 7, para isso execute os comandos abaixo:

JBossAS7-1 –>    ./JBOSS_HOME/bin/standalone.sh –server-config=standalone-ha.xm -Djboss.node.name=node1

JBossAS7-2 –>    ./JBOSS_HOME/bin/standalone.sh –server-config=standalone-ha.xm -Djboss.node.name=node2

Ao iniciarmos os servidores não encontramos detalhes sobre os nós do cluster, isso se deve ao fato de que o serviço de cluster só é  iniciado sob demanda no JBoss AS 7, por isso não conseguimos visualizar nada relacionado a isso no console.
Para habilitarmos o cluster, devemos realizar o deploy de uma aplicação que esteja utilizando a tag <distributable/>  no web.xml.

<web-app>
   <distributable/>
</web-app>

Ao realizar o deploy, podemos verificar que os serviços de cluster são ativados:

13:35:05,796 INFO  [stdout] (MSC service thread 1-2)
13:35:05,797 INFO  [stdout] (MSC service thread 1-2) -------------------------------------------------------------------
13:35:05,797 INFO  [stdout] (MSC service thread 1-2) GMS: address=node2/web, cluster=web, physical address=192.168.0.20:55200
13:35:05,797 INFO  [stdout] (MSC service thread 1-2) -------------------------------------------------------------------
13:35:06,177 INFO  [org.jboss.as.clustering.CoreGroupCommunicationService.web] (MSC service thread 1-2) JBAS010207: Number of cluster members: 2
13:35:08,184 INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (MSC service thread 1-2) ISPN000078: Starting JGroups Channel
13:35:08,187 AVISO [org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher] (MSC service thread 1-2) Channel Muxer already has a default up handler installed (org.jboss.as.clustering.jgroups.ClassLoaderAwareUpHandler@35cfee57) but now it is being overridden
13:35:08,190 INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (MSC service thread 1-2) ISPN000094: Received new cluster view: [node1/web|1] [node1/web, node2/web]
13:35:08,192 INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (MSC service thread 1-2) ISPN000079: Cache local address is node2/web, physical addresses are [192.168.0.20:55200]
13:35:08,201 INFO  [org.infinispan.factories.GlobalComponentRegistry] (MSC service thread 1-2) ISPN000128: Infinispan version: Infinispan 'Brahma' 5.1.0.CR1
13:35:08,203 WARN  [org.infinispan.config.ConfigurationValidatingVisitor] (MSC service thread 1-1) ISPN000152: Passivation configured without a valid eviction policy. This could mean that the cache store will never get used unless code calls Cache.evict() manually.
13:35:08,681 INFO  [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-2) ISPN000031: MBeans were successfully registered to the platform mbean server.
13:35:08,805 INFO  [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-1) ISPN000031: MBeans were successfully registered to the platform mbean server.
13:35:09,469 INFO  [org.jboss.as.clustering] (MSC service thread 1-2) JBAS010301: Started registry cache from web container
13:35:09,474 INFO  [org.jboss.as.clustering] (MSC service thread 1-1) JBAS010301: Started repl cache from web container
13:35:09,939 INFO  [org.jboss.web] (MSC service thread 1-2) registering web context: /myapptest
13:35:10,124 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "myapptest.war"

Lembrando que que não existe mais o conceito de farm deployment, mas você pode realizar o deploy de uma aplicação para todos as instâncias que fazem parte do mesmo grupo de servidores. Vamos abordar esse conceito mais a frente. Nesse caso é necessário realizar o deploy nos dois nós. O deploy pode pode ser realizado no diretório JBOSS_HOME/standalone/deployments/.

Uma ultima observação é de que poderíamos ter ter passado via parametro na inicialização os IPs das interfaces public e management, como abaixo:

JBossAS7-1 –> ./JBOSS_HOME/standalone.bat –server-config=standalone-ha.xml –b 192.168.0.10 -bmanagement 192.168.0.10 -Djboss.node.name=node1

JBossAS7-2 –> ./JBOSS_HOME/standalone.bat –server-config=standalone-ha.xml –b 192.168.0.20 -bmanagement 192.168.0.20 -Djboss.node.name=node2

Na próxima parte vamos abordar Cluster de nós executando em máquinas diferentes, que é muita similar ao que fizemos.

Abraços a todos!

🙂

15 comentários em “Cluster de Servidores Standalone no JBoss AS 7.1 – Parte 1

    Leo disse:
    14 de fevereiro de 2012 às 15:17

    Alguma previsão para o artigo sobre “Cluster de nós executando em máquinas diferentes”?

      Mauricio Magnani respondido:
      14 de fevereiro de 2012 às 16:33

      Oi Léo Obrigado pelo interesse, vou tentar colocar ainda hoje🙂
      Mas caso não de tempo, até quinta feira vai estar ai…
      Acompanha ai que os próximos tópicos sobre o JBoss AS 7 vão ser bem legais…
      Abraços.

    Renato disse:
    2 de outubro de 2012 às 10:52

    Olá Mauricio, você já postou o artigo que o Leo comentou? “Cluster de nós executando em máquinas diferentes”?

      Mauricio Magnani respondido:
      2 de outubro de 2012 às 11:11

      Ainda não mas posso fazer isso numa boa… é bem simples. Deixe o seu email aqui que vou te mandar alguns procedimentos para você nao ficar esperando eu escrever hehehe🙂

      Abraços

    Renato disse:
    2 de outubro de 2012 às 13:20

    Ok Mauricio. Segue meu email renatoag@checkcheck.com.br.

      Mauricio Magnani respondido:
      2 de outubro de 2012 às 13:38

      OK Renato,
      Hoje pela noite separo algumas anotações e te mando..
      Abraços

    Renato disse:
    2 de outubro de 2012 às 13:48

    Legal Mauricio. Tenho uma outra dúvida quanto ao AS7. É o seguinte como carregar um série de lib’s comuns que são usadas em minha aplicações. Na verdade são muitas e verifiquei que no AS7 essa estrutura fica dentro da pasta “modules” contudo será que tenho que criar um caminho diferente para cada lib ou tem como criar uma estrutura minha e lá colocar todos os .jar e nela colocar o arquivo “module.xml” com path de cada uma lá? Amigo desculpe-me estar abusando de seus conhecimentos mais é que quero muito migrar minhas aplicações do AS6 para o AS7 até porque quero muito usar o recurso de Domínio da nova versão. Mais preciso primeiro testa-las standalone no AS7, e aí sim partir para este novo recurso.

    Renato disse:
    2 de outubro de 2012 às 14:41

    Então minha dúvida é como fazer isso, veja o exemplo:
    No momento em que fui fazer o deploy de minha aplicação recebi o seguinte erro:

    Could not load component class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag…

    Muito bem, o que fiz foi criar a seguinte estrutura:

    Criei “modules/org/apache/struts/main” e lá coloquei a lib “struts-taglib-1.3.8.jar” e adicionei manualmente o arquivo “module.xml” com o seguinte conteúdo:

    Muito bem…ainda assim o deploy continua dando erro na carga desta lib. E agora !!!
    Será que você sabe me dizer onde estou errando?

      Mauricio Magnani respondido:
      2 de outubro de 2012 às 14:55

      Realmente nao sei hehe nunca trablhei com struts… tem como vc me enviar um exemplo para eu testar… vou te enviar um email ai vc me responde no mesmo email com o projeto de exemplo com as libs. Eu vou testar e te falo se consegui fazer funcionar…

      Abs

    Rafael disse:
    5 de dezembro de 2012 às 11:24

    Mauricio tem jeito de vc me enviar um email (limarafrl@gmail.com) com as informações sobre com fazer o Cluster de nós executando em máquinas diferentes. Muito Obrigado.

      Mauricio Magnani Jr respondido:
      5 de dezembro de 2012 às 11:26

      Sim, vou juntar algumas informações e hoje pela tarde te envio.

      Abs

    Ricardo disse:
    12 de agosto de 2013 às 16:41

    Mauricio…

    Poderia me ajudar, como faço para ativar o cluster nas aplicações .EAR

    Mauricio Magnani Jr respondido:
    12 de agosto de 2013 às 19:16

    Oi Ricardo,

    Desculpe a demora em responder eu estava de férias e estou voltando agora… basicamente o servico de cluster é ativado quando a tag distributable é encontrada no web.xml.

    Nesse caso acredito que esteja utilizando EJBs com as anotações @org.jboss.ejb3.annotation.Clustered

    Entao acredito que vc já saiba disso… voce tem algum web.xml nesse .ear?

    Abs

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s