Configurando Ambiente de Produção no JBoss AS 7.1.3 (JBoss EAP 6.0.1) – Parte 3

Postado em Atualizado em

Olá amigos,

Hoje vamos continuar a configuração do ambiente criado nos posts anteriores:

No post anterior nós terminamos a configuração do balanceamento de carga. Hoje vamos aprender como adicionar recurso de cluster ao nosso ambiente. Portanto se sua intenção não é a de utilizar recursos clusterizados aguarde a próxima parte e pule essa etapa.

A arquitetura  do JBoss AS 7 foi totalmente redesenhada para que seus recursos possam ser iniciados de modo concorrente ou sob demanda. Anteriormente nós definimos que o profile utilizado seria o ha (high availability) que possui tecnologias (subsystems) para utilização de cluster. Nesse perfil podemos encontrar o JGroups que é a tecnologia utilizada no JBoss para fazer a comunicação entre os nós do cluster e replicar o estado dos mesmos (entre muitas outras coisas). No post anterior deployamos uma aplicação  web que não estava preparada para cluster portanto tais recursos não foram ativados. Utilizando a tag <distributable/> no web.xml estamos “basicamente” habilitando clusterização para nossa aplicação.

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

   <distributable/>

</web-app>

Mais informações podem ser encontradas na documentação: https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto

Então ao deployarmos uma aplicação <distributable/> os recursos de cluster serão carregados automaticamente. É claro que existem outras configurações a serem feitas mas podem variar conforme o ambiente de cada administrador. Por exemplo, por padrão é utilizado UDP para comunicação entre os “nós do cluster”, então é necessário que o ambiente esteja preparada para multicast.

Para testes,  basta adicionar uma nova rota:

route add -net 224.0.0.0 netmask 224.0.0.0 dev ethXYZ

Na inicialização basta fazer o binding com a opção -b IP ou -Djboss.bind.address=IP.

Para realização dos testes eu criei uma simples aplicação Web com um contador utilizando um Bean @Stateful.

@Stateful
@SessionScoped
@Clustered
@Named
public class CounterBean implements Serializable{

  private static final long serialVersionUID = -6708383025283195006L;
  private int count;

  public int getCount() {
    return count;
  }

  public void setCount(int count) {
    this.count = count;
  }

  public void increment() {
    count++;
  }
}

Vou deixar o projeto e a aplicação para que vocês possam realizar os testes.  Vamos utilizar a estrutura criada no Configurando Ambiente de Produção no JBoss AS 7.1.3 (JBoss EAP 6.0.1) – Parte 2.

Inicei o Domain Controller (master):

 ./usr/local/jboss/7.1.3/jboss-eap-6.0/bin/domain.sh
 -Djboss.domain.base.dir=/usr/local/jboss/7.1.3/jboss-eap-6.0/master
 -Djboss.host.default.config=host-master.xml
 -Djboss.bind.address=192.168.0.128
 -Djboss.bind.address.management=192.168.0.128

Vamos conectar o primeiro Host Controller 01 (slave01) ao Master:

 ./usr/local/jboss/7.1.3/jboss-eap-6.0/bin/domain.sh
 -Djboss.domain.base.dir=/usr/local/jboss/7.1.3/jboss-eap-6.0/slave01
 -Djboss.host.default.config=host-slave.xml
 -Djboss.domain.master.address=192.168.0.128
 -Djboss.bind.address.management=192.168.0.140
 -Djboss.bind.address=192.168.0.140
 -Djboss.server.name=server-one

Observe os logs no Domain Controller e perceba que o Host Controller 01 se conectou do Domain:

JBAS010918: Registered remote slave host "slave01", JBoss EAP 6.0.1.GA (AS 7.1.3.Final-redhat-4)

Agora temos um Domain Controller e um Host Controller com Server ( instância JBoss) chamada server-one. Vamos realizar o deploy da aplicação  cluster-example.war que responderá no contexto cluster (http://192.168.0.140/cluster/). Acesse a interface web no endereço http://192.168.0.128:9990/console/ e será solicitado usuário e senha. Podemos utilizar o usuário jboss e a senha 123456 criadas nas etapas anteriores. Para realizar o deploy siga os passos baixo:

deploy1

deploy2

deploy3

deploy4

deploy5

Ao realizarmos o assign da aplicação o serviço de cluster é inicializado:

[Server:server-one] 20:48:49,847 INFO  [stdout] (ServerService Thread Pool -- 66)
[Server:server-one] 20:48:49,847 INFO  [stdout] (ServerService Thread Pool -- 66) -------------------------------------------------------------------
[Server:server-one] 20:48:49,848 INFO  [stdout] (ServerService Thread Pool -- 66) GMS: address=slave01:server-one/ejb, cluster=ejb, physical address=192.168.0.140:55200
[Server:server-one] 20:48:49,853 INFO  [stdout] (ServerService Thread Pool -- 66) -------------------------------------------------------------------
[Server:server-one] 20:48:49,884 INFO  [org.jboss.as.osgi] (MSC service thread 1-1) JBAS011907: Register module: Module "deployment.cluster-example.war:main" from Service Module Loader
[Server:server-one] 20:48:50,117 INFO  [stdout] (ServerService Thread Pool -- 67)
[Server:server-one] 20:48:50,122 INFO  [stdout] (ServerService Thread Pool -- 67) -------------------------------------------------------------------
[Server:server-one] 20:48:50,122 INFO  [stdout] (ServerService Thread Pool -- 67) GMS: address=slave01:server-one/web, cluster=web, physical address=192.168.0.140:55200
[Server:server-one] 20:48:50,123 INFO  [stdout] (ServerService Thread Pool -- 67) -------------------------------------------------------------------

Acesse a url http://192.168.0.14o/cluster ( url do balanceador Apache nada tem a ver com a localização da instância JBoss)  e perceba que a aplicação iniciará a contagem.

app

Agora conecte o segundo Host Controller 02 (slave02) ao Master:

 ./usr/local/jboss/7.1.3/jboss-eap-6.0/bin/domain.sh
 -Djboss.domain.base.dir=/usr/local/jboss/7.1.3/jboss-eap-6.0/slave02
 -Djboss.host.default.config=host-slave.xml
 -Djboss.domain.master.address=192.168.0.128
 -Djboss.bind.address.management=192.168.0.117
 -Djboss.bind.address=192.168.0.117
 -Djboss.server.name=server-two

Pare a instância instância server-one.

stop01

stop02

A  aplicação passará a reponder no server-two pela mesma url http://192.168.0.14o/cluster e a contagem será continuada da onde havia parado no server-one. Com isso percebemos que o estado da nossa aplicação foi replicado entre os nós.

deployfinal

Por hoje é isso ai galera. Na próxima parte vamos habilitar o SSL para o Mod Cluster e realizar algumas configurações de segurança no JBoss.

Abraços!

7 comentários em “Configurando Ambiente de Produção no JBoss AS 7.1.3 (JBoss EAP 6.0.1) – Parte 3

    adrianoschmidt disse:
    25 de março de 2013 às 0:29

    show de bola!! estou aguardando os novos posts dessa série!! abraço!!

    Luciano Molinari disse:
    25 de março de 2013 às 9:46

    Excelente essa série de artigos Maurício, parabéns!Abs!

    victor neves disse:
    25 de março de 2013 às 13:28

    melhor a cada novo post! xD

Deixe um comentário