Apostila Jboss as 7

23
Mauricio Magnani Jr

Transcript of Apostila Jboss as 7

  • Mauricio Magnani Jr

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    2

    Introduo

    Atualmente a plataforma Java uma das mais utilizadas no mundo, muito disso se deve

    capacidade da plataforma de suportar outras linguagens como JRuby, Groovy e Scala por

    exemplo. Milhares de aplicativos para Web e Mobile so desenvolvidos a cada ms utilizando a

    plataforma como base. A plataforma Java mudou muito desde seu incio, e provavelmente vai

    continuar evoluindo nos prximos anos.

    Em paralelo com essas mudanas, visualizamos os servidores de aplicao que cada vez mais

    oferecem recursos de alta complexidade, como componentes de balanceamento de carga

    inteligente, implementao de autenticao (JAAS), troca de mensagens assncronas (JMS),

    controle de transao (JTA), persistncia de objetos (JPA), componentes para criao de

    aplicaes distribudas e clusterizadas (EJB), API Java para processamento de arquivos XML e

    Webservices (JAX-WS e JAX-B) e muitas outras tecnologias facilitando o desenvolvimento e

    padronizao de aplicaes. Eles tambm disponibilizam uma infraestrutura estvel e escalvel

    para aplicaes de misso crtica. Um dos grandes desafios dos servidores de aplicao

    acoplar servios de grande complexidade, deixando-os estveis e flexveis.

    Nas verses iniciais a plataforma ainda conhecida como Java2EE no estava madura e seus

    recursos nos servidores de aplicao eram carregados de forma hierrquica consumindo

    muitos recursos e tornando o statup altamente custoso.

    A arquitetura dos principais servidores de aplicao foi redesenhada para que seus recursos

    possam ser iniciados de modo concorrente ou sob demanda. As melhorias tambm podem ser

    notadas no consumo de memria, onde em uma simples mquina desktop, pode-se facilmente

    configurar servios de alta disponibilidade e escalveis para realizao de testes em tempo de

    desenvolvimento.

    Se voc deseja um ambiente com alta disponibilidade, escalonvel e que seja independente de

    fabricante (::vendor lock-in::) o Java EE e seus servidores de aplicao foram feitos para voc.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    3

    JBoss Application Server 7

    JBoss Application Server 7 ou apenas JBoss AS 7 um servidor de aplicao de cdigo aberto

    que 100% compatvel com a especificao Java EE 6. Em verses anteriores do Java EE

    mesmo utilizando somente algumas tecnologias para o desenvolvimento da aplicao, ramos

    obrigados a lidar como todos os recursos implementados no servidor. Para resolver esse

    problema no Java EE 6 foi inserido o conceito de profile que tem como objetivo criar

    configuraes com responsabilidades especificas como, por exemplo, o Web Profile que possui

    tecnologias para o desenvolvimento web .

    At o momento a verso atual do JBoss AS foi baixada mais de 150 mil vezes. Para mais

    informaes visite o site do projeto http://www.jboss.org/jbossas.

    Recentemente o projeto recebeu um novo nome e futuramente se chamar WildFly. Mais

    informaes podem ser encontradas em: http://www.wildfly.org/faq/

    Requisitos

    Como todo servidor de aplicao o JBoss AS 7 requer um ambiente com JDK 1.6/JDK 1.7

    devidamente configurado e instalado. O Java Development Kit (JDK) um conjunto de

    utilitrios para criao de softwares para plataforma Java. Existem vrias implementaes cada

    qual com a sua finalidade.

    Para baixar o JDK 7 navegue at a pgina de download da Oracle em

    http://www.oracle.com/technetwork/java/javase/downloads/index.html e escolha a opo

    Java Platform (JDK). Em seguida voc ser direcionado para outra pgina onde dever aceitar a

    License Agreement. Baixe a verso jdk-7u21-linux-x64.rpm.

    Para instalar o JDK execute o seguinte comando:

    $ sudo rpm -Uvh jdk-7u21-linux-x64.rpm

    Execute o comando java --version para verificar se o JDK est instalado:

    $ java --version

    java version "1.7.0_21"

    Java(TM) SE Runtime Environment (build 1.7.0_21-b11)

    Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    4

    Duvidas na instalao? Consulte o link:

    http://docs.oracle.com/javase/7/docs/webnotes/install/index.html

    Instalando o JBoss AS 7

    O JBoss AS 7 pode ser baixado gratuitamente no site da comunidade:

    http://www.jboss.org/jbossas/downloads/ Para instalar basta descompactar o arquivo jboss-

    as-7.1.1.Final.zip utilizando um utilitrio de descompresso.

    Boas Prticas

    Em hiptese alguma inicie o JBoss utilizando o usurio root, pois a plataforma Java oferece

    APIs para execuo de cdigos nativos do sistema operacional e mecanismos de

    gerenciamento remoto. No Linux crie um usurio com privilgios de root para iniciar o servio

    do JBoss. J no Windows crie um usurio com poderes administrativos, mas com privilgios

    reduzidos.

    Uma vez instalado fortemente aconselhvel iniciar o JBoss AS para verificar se existe alguma

    incompatibilidade com a arquitetura do JDK utilizado ou at mesmo se a memria

    disponibilizada suficiente.

    Execute uma simples instncia standalone e acesse a url http://localhost:8080 para verificar se

    o JBoss foi iniciado corretamente.

    $ ./jboss-as-7.1.1.Final/bin/standalone.sh

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    5

    Configurando JBoss AS 7 como Servio

    Inicialmente edite o arquivo vim /usr/local/jboss/jboss-as-7.1.1.Final/bin/standalone.conf e

    adicione a propriedade -Djboss.bind.address=0.0.0.0 para que o JBoss fique acessvel

    externamente:

    #sets interface to binding for applications to be accessed from

    outside

    JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=0.0.0.0"

    O JBoss AS 7 j vem com um exemplo de arquivo para colocar o JBoss como servio precisando

    apenas fazer pequenas alteraes.

    Copie o arquivo jboss-as-standalone.sh para /etc/init.d/ :

    $ sudo cp /usr/local/jboss/jboss-as-7.1.1.Final/bin/init.d/jboss-as-

    standalone.sh /etc/init.d/

    Adicione tambm o diretrio /etc/jboss-as/ que conter o arquivo jboss-as.conf:

    $ sudo mkdir -p /etc/jboss-as

    Agora copie o arquivo de configurao:

    $ sudo cp /usr/local/jboss/jboss-as-7.1.1.Final/bin/init.d/jboss-

    as.conf /etc/jboss-as

    O arquivo de configurao jboss-as.conf deve ser configurado como abaixo:

    JBOSS_USER=jboss

    JBOSS_CONSOLE_LOG=/var/log/jboss-as/console.log

    Para finalizar edite o arquivo /etc/init.d/jboss-as-standalone.sh e altere a propriedade

    JBOSS_HOME deixando exatamente como abaixo:

    JBOSS_HOME=/usr/local/jboss/jboss-as-7.1.1.Final

    Se for necessrio utilizar um perfil personalizado na propriedade

    LAUNCH_JBOSS_IN_BACKGROUND devemos passar o parmetro

    -Djboss.server.base.dir=$JBOSS_HOME/nomeperfil:

    if [ ! -z "$JBOSS_USER" ]; then

    if [ -x /etc/rc.d/init.d/functions ]; then

    daemon --user $JBOSS_USER LAUNCH_JBOSS_IN_BACKGROUND=1

    JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG -

    Djboss.server.base.dir=$JBOSS_HOME/nomeperfil 2>&1 >

    $JBOSS_CONSOLE_LOG &

    else

    su - $JBOSS_USER -c "LAUNCH_JBOSS_IN_BACKGROUND=1

    JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG -

    Djboss.server.base.dir=$JBOSS_HOME/nomeperfil" 2>&1 >

    $JBOSS_CONSOLE_LOG &

    fi

    fi

    Salve o arquivo.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    6

    Para facilitar altere o nome do arquivo /etc/init.d/jboss-as-standalone.sh para

    /etc/init.d/jboss:

    $ sudo mv /etc/init.d/jboss-as-standalone.sh /etc/init.d/jboss

    D permisso para o script ser executado:

    $ sudo chmod a+x /etc/init.d/jboss

    Adicione o JBoss como servio:

    $ sudo chkconfig --add /etc/init.d/jboss

    $ sudo chkconfig --level 3 /etc/init.d/jboss

    Para iniciar o JBoss execute:

    $ sudo service jboss start

    Starting jboss-as: [ OK ]

    Criando um Novo Perfil

    Em verses anteriores bastava apenas copiar um dos perfis disponveis como all, default ou

    web. No JBoss AS 7 o diretrio JBOSS_HOME/standalone ou JBOSS_HOME/domain deve ser

    duplicado para a criao de um novo perfil, Por exemplo:

    $ sudo cp -Rap JBOSS_HOME/standalone JBOSS_HOME/meuperfil

    Para iniciar o perfil criado execute:

    $ sudo ./standalone.sh -c standalone-full.xml -

    Djboss.server.base.dir=../meuperfil -Djboss.socket.binding.port-

    offset=150

    necessrio definir jboss.server.base.dir com o caminho completo ou como no exemplo acima

    se voc estiver no diretrio JBOSS_HOME/bin.

    O parmetro jboss.socket.binding.port-offset similar ao jboss.service.binding.set com a

    diferena de que no parmetro antigo voc passava os intervalos de portas pr-definidos

    como por exemplo ports-01 e j no novo modelo voc pode passar intervalos de sua

    preferncia como 100, 150, 200, etc.

    Deploy no JBoss AS 7

    Em verses anteriores o arquivo da aplicao WAR/EAR era implantado no diretrio

    ${JBOSS_HOME}/server//deploy e quando era necessrio realizar um BKP, bastava

    apenas copi-lo para outro lugar.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    7

    No JBoss AS 7 em standalone mode bem simples: Basta copiar o arquivo que fica implantado

    em ${JBOSS_HOME}/standalone/deployments.

    No domain mode temos um problema. Quando realizamos o deploy do arquivo WAR/EAR, ele

    descompactado e copiado para o diretrio content em

    ${JBOSS_HOME}/domain/data/content ficando quase impossvel encontrar o arquivo

    implantado . Ento se voc est utilizando o domain mode sempre faa uma cpia de

    segurana do arquivo WAR/EAR antes de realizar o deploy.

    Desabilitando Hot Deployment no JBoss AS 7.1

    O JBoss AS 7 (como verses anteriores) possui um recurso chamado deployment scanner

    service. O deployment scanner responsvel pelo conhecido Hot Deployment (deploy com o

    servidor em execuo). O problema que o deployment scanner consome uma quantidade

    relevante de recursos j que ele fica varrendo o diretrio

    JBOSS_HOME/standalone/deployments periodicamente em busca de novas aplicaes para

    serem implantadas.

    Esse intervalo definido na tag scan-interval=5000 que por padro 5 segundos. Para alterar por exemplo para 60 segundos v at o subsystem deployment-scanner e defina o novo valor:

    Caso realmente deseje desabilitar basta remover o subsystem deployment-scanner (opo no

    recomendada) . Outra

    maneira (recomendada) desabilitar o deploy das aplicaes exploded e zipped (.WAR por

    exemplo):

    Voc deve estar se perguntando: OK, desabilitei tudo! Como o JBoss vai saber que a aplicao

    deve ser implantada? Simples basta renomear o arquivo implantado por exemplo

    minhaapp.war para minhaapp.war.dodeploy e pronto! A aplicao ser finalmente publicada.

    Para saber mais sobre as marcaes dos arquivos implantados no JBoss AS 7, aconselho a

    leitura do JBOSS_HOME/standalone/deployments/README.txt.

    Criando um DataSource no JBoss AS 7

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    8

    O primeiro passo realizar o download do driver JDBC para o nosso banco de dados, que no

    caso o MySQL 5.

    O driver pode se baixado em: http://dev.mysql.com/downloads/connector/j/

    A estrutura de diretrios do nosso mdulo deve ser criada conforme abaixo: $sudo mkdir -p jboss-as-7.1.1.Final/modules/com/mysql/main

    O diretrio main, conter os arquivos mysql-connector-java-5.1.18-bin.jar e o module.xml. Para copiar o driver execute: $sudo cp mysql-connector-java-5.1.18-bin.jar /jboss-as-

    7.1.1.Final/modules/com/mysql/main/

    O Prximo passo, criar o arquivo module.xml $sudo vim jboss-as-7.1.1.Final/modules/com/mysql/main/module.xml

    No standalone.xml ou domain.xml do perfil desejado adicione o Datasource para o MySQL:

    jdbc:mysql://localhost:3306/brasil

    mysql

    root

    123456

    Reinicie o JBoss e o datasource para o MySQL estar disponvel.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    9

    Domain Mode x Standalone Mode

    O JBoss AS 7 possui dos modelos de trabalho conhecidos como Standalone Mode e Domain

    Mode. No Standalone mode podemos trabalhar com uma nica instncia muito semelhante a

    verses anteriores do JBoss AS 5 e JBoss AS 6. Para utilizar o Standalone mode basta iniciar o

    script JBOSS_HOME/standalone.sh no Linux .

    Agora voc deve estar se perguntando se possvel criar um ambiente de alta disponibilidade

    utilizando o Standalone Mode. A resposta Sim! possvel criar um ambiente com recursos

    clusterizados, replicao de sesso e tudo mais. Se voc j utilizou outras verses do JBoss

    deve estar pensando em utilizar o famoso Farm Deployment onde a aplicao era replicada

    para todos os ns do cluster. Esse recurso no existe no Standalone Mode, voc ter que

    realizar o deploy em todos os ns um por um. Isso no um problema se for 3 ou 4 instncias

    mas imagine se forem umas 20 instncias.

    Uma soluo para esse problema seria a utilizao de ferramentas como o RHQ para

    realizao de deploy em mltiplas instncias o que acarretaria consumo de mais recursos e

    tempo. Para solucionar esse problema temos uma soluo bem simples j embutida no

    servidor de aplicao o Domain Mode e sobre isso que vamos falar no prximo tpico.

    Introduo ao Domain Mode

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    10

    Essa a melhor novidade da verso JBoss AS 7. O Domain Mode permite iniciar vrias

    instncias e tambm oferece uma maneira centralizada de gerenciamento dos recursos

    facilitando a administrao das instncias JBoss. O Domain Mode pode ser visto como uma

    unidade de instncias que compartilham recursos e configuraes e so administradas por um

    processo chamado Domain Controller.

    Para iniciar o JBoss AS 7 de modo domain execute o script JBOSS_HOME/domain.sh no Linux

    ou JBOSS_HOME/domain.bat no Windows.

    Quando iniciamos o JBoss em Domain Mode na configurao default temos no mnimo Quatro

    processos. Um Host Controller, um Process Controller e dois Servers.

    Domain Controller: Ele quem controla o gerenciamento do domain. Nele esto as

    configuraes que so compartilhadas entre as instncias que esto nesse domain.

    Process Controller: Ele de grande importncia pois ele responsvel pela criao das

    instncias e tambm do Host Controller que vamos falar a seguir. O Process Controller no

    deve ser confundido com uma instncia, ele simplesmente um processo na JVM.

    Host Controller: Como Domain Controller o Host Controller tambm coordena as instncias

    do domain. Ele o responsvel por fazer algo semelhando ao Farm Deployment(no existe

    nessa verso), ou seja, ele distribui o arquivo deployado para todas as instncias do domain.

    Servers: So as instncias em si, onde esto as aplicaes deployadas. Um ponto importante

    que cada server um processo Java.

    Entre os benefcios da utilizao do Modo Domain que ns podemos citar esto:

    Gerenciamento Centralizado;

    Configurao Centralizada;

    Deploy Centralizado;

    Manuteno Centralizada;

    Preparando a Infra Estrutura

    Nesse artigo estamos utilizando Trs servidores. Dois deles sero utilizados pelas as instncias

    JBoss e Um ser utilizado Pelo Domain Controller e Apache Web Server para realizar o

    Balanceamento de carga.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    11

    Crie um grupo e adicione um usurio para ser utilizado pelo JBoss AS 7 em todos os servidores:

    $ sudo groupadd jboss

    $ sudo useradd -s /bin/bash -d /home/jboss -m -g jboss jboss

    Faa tambm o download do JBoss AS 7 no diretrio tmp:

    $ cd /tmp

    $ wget http://download.jboss.org/jbossas/7.1/jboss-as-

    7.1.1.Final/jboss-as-7.1.1.Final.zip

    Crie a estrutura de diretrios para armazenar o JBoss:

    $ sudo mkdir /usr/local/jboss

    $ chown jboss:jboss /usr/local/jboss

    $ su jboss

    $ mkdir /usr/local/jboss/

    $ cd /usr/local/jboss/

    $ unzip /tmp/jboss-as-7.1.1.Final.zip

    Finalmente o JBoss AS 7 est instalado em /usr/local/jboss/jboss-as-7.1.1.Final em todos os

    servidores.

    Configurando Cluster e Alta Disponibilidade

    Para aplicaes como muitas solicitaes a busca pela melhora do desempenho quase que

    constante. Um dos meios mais utilizados o Balanceamento de Carga, que consiste em

    distribuir a carga das solicitaes em vrios servidores ou instncias proporcionando a melhora

    no tempo de reposta.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    12

    O JBoss AS 7 possui um componente nativo conhecido como mod_cluster que foi criado para

    atender a mecanismos de balanceamento de carga alinhados ao conceito de Cloud. O Mod

    Cluster vem com algoritmos de balanceamento de carga mais avanados, que se baseiam na

    carga da aplicao, ou seja, quantidades de sesses, conexes abertas, entre outros. Ele pode

    ser customizado conforme a necessidade da aplicao visando um ambiente elstico. Um das

    vantagens tambm o descobrimento automtico de novas instncias JBoss (Utilizando

    Multicast), no havendo a necessidade de configuraes extras.

    As configuraes do mod_cluster devem ser realizadas no JBoss AS 7 e no Apache Web Server

    que ser utilizado como Proxy reverso.

    Instalando Apache Web Server

    No Servidor Balancer instale o Apache Web Server. Basta executar o seguinte comando:

    $ sudo yum install httpd y

    Inicie o servio e verifique se pgina de testes carregada:

    $ sudo service httpd start

    Instalando Mod Cluster

    Ainda no Servidor Balancer instale o Mod Cluster. Ele pode ser baixado gratuitamente no site

    da comunidade: http://www.jboss.org/mod_cluster/downloads/1-2-0-Final/ Para instalar

    basta descompactar o arquivo mod_cluster-1.2.0.Final-linux2-x64-ssl.tar.gz utilizando um

    utilitrio de descompresso e copiar os mdulos para o diretrio de mdulos do Apache Web

    Server:

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    13

    Para baixar e extrair o arquivo execute:

    $ cd /tmp

    $ wget

    http://downloads.jboss.org/mod_cluster//1.2.0.Final/mod_cluster-

    1.2.0.Final-linux2-x64-ssl.tar.gz

    $ tar -zxvf mod_cluster-1.2.0.Final-linux2-x64-ssl.tar.gz

    Copie os mdulos para o Apache:

    $ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_advertise.so

    /etc/httpd/modules/

    $ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_manager.so

    /etc/httpd/modules/

    $ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_proxy_cluster.so

    /etc/httpd/modules/

    $ sudo cp /tmp/opt/jboss/httpd/lib/httpd/modules/mod_slotmem.so

    /etc/httpd/modules/

    Edite o arquivo /etc/httpd/conf/httpd.conf e comente a linha LoadModule

    proxy_balancer_module modules/mod_proxy_balancer.so , para no ocorrer um conflito com

    LoadModule proxy_cluster_module modules/mod_proxy_cluster.so:

    #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

    Crie o arquivo mod_cluster.conf e adicione a seguinte configurao:

    $ sudo vim /etc/httpd/conf.d/mod_cluster.conf

    #Content Mod Cluster

    LoadModule slotmem_module modules/mod_slotmem.so

    LoadModule manager_module modules/mod_manager.so

    LoadModule proxy_cluster_module modules/mod_proxy_cluster.so

    LoadModule advertise_module modules/mod_advertise.so

    Order deny,allow

    Allow from all

    KeepAliveTimeout 60

    ManagerBalancerName mycluster

    MaxKeepAliveRequests 0

    ServerAdvertise On

    EnableMCPMReceive On

    SetHandler mod_cluster-manager

    Order deny,allow

    Allow from all

    Reinicie o Apache:

    $ sudo service httpd restart

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    14

    Acesse o mod_cluster-manager e verifique se as informaes sobre a verso do mod_cluster

    esto aparecendo:

    Arquitetura dos Servidores em Modo Domain Para realizar os testes do balanceamento de carga com o mod_cluster, vamos subir o Domain

    Controller e depois vamos conectar dois Hosts Controller com uma Instncia JBoss em cada.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    15

    Criando os Perfis dos Servidores JBoss

    No Servidor Balancer crie o perfil chamado master que ser o Domain Controller:

    $ cp -Rap /usr/local/jboss/jboss-as-7.1.1.Final/domain/

    /usr/local/jboss/jboss-as-7.1.1.Final/master

    No Servidor Host-01 crie o perfil chamado host01 que ser um dos Hosts Controllers:

    $ cp -Rap /usr/local/jboss/jboss-as-7.1.1.Final/domain/

    /usr/local/jboss/jboss-as-7.1.1.Final/host01

    No Servidor Host-02 crie o perfil chamado host02 que tambm ser um dos Hosts Controllers:

    $ cp -Rap /usr/local/jboss/jboss-as-7.1.1.Final/domain/

    /usr/local/jboss/jboss-as-7.1.1.Final/host02

    Configurando Toda a Arquitetura

    Como vimos anteriormente todas as configuraes e gerenciamento so realizadas de forma

    centralizada no Domain Controller. Quando for necessrio adicionar um novo grupo de

    servidores, configurar logs, criar datasources, alterar portas entre outras coisas, tudo isso

    dever ser feito no domain.xml do Domain Controller que nesse caso chamado de master.

    Sendo assim todas as nossas instncias JBoss usufruiro das configuraes realizadas para o

    Domain ou para o Server Group em questo.

    A primeira coisa a ser feita definir qual o conjunto de tecnologias (subsystems) sero

    utilizadas na aplicao. Isso pode variar conforme os requisitos de cada sistema. Um conjunto

    de tecnologias (subsystems) no JBoss 7 chamado de profile.

    O JBoss AS 7 possui 4 profiles por padro: default, full, ha, full-ha , mas nada impede

    de ns copiarmos qualquer um deles e renome-los conforme nossos requisitos. No Java EE 6

    foi introduzido o conceito de Profiles, onde pode-se criar um subconjunto de tecnologias

    presentes na spec Java EE ou at mesmo adicionar novas definidas pela JCP (Java Community

    Process).

    Mais informaes:

    https://community.jboss.org/wiki/JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7

    Ns vamos utilizar o profile ha, pois nele os recursos para clusterizao esto disponveis.

    Depois de definir o profile o prximo criar um Grupo de Servidores: Server Group. Um server

    group nada mais que um agrupamento de instncias JBoss. Nessa arquitetura vamos utilizar

    apenas um server group. Isso pode ser definido na tag no domain.xml do

    master (Domain Controller).

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    16

    Crie um Server Group chamado apps que utilize o profile ha:

    $ vim /usr/local/jboss/jboss-as-

    7.1.1.Final/master/configuration/domain.xml

    Os outros Server Groups podem ser removidos.

    No profile ha especificamente no subsystem web adicione o atributo instance-id:

    O instance-id ser passado como parmetro na inicializao do Host Controller.

    O prximo passo configurar o atributo proxy list no subsystem modcluster:

    Nesse atributo est configurado o IP e porta do Apache Web Server.

    No Servidor Host-01 edite o arquivo /usr/local/jboss/jboss-as-

    7.1.1.Final/host01/configuration/host-slave.xml para criar a instncia JBoss.

    Na tag onde esto de fato as nossas instncias JBoss. Quando criamos um novo

    estamos criando uma nova instncia JBoss.

    Conforme foi definido na arquitetura o Host Controller 01 conter apenas uma instncia JBoss

    chamada instance-one.

    Deixe o como abaixo:

    Definimos que a instncia JBoss instance-one far parte do Server Group apps.

    Para finalizar na tag adicione o nome host01.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    17

    Repita os procedimentos realizados no servidor Host-01 em Host-02 alterando apenas o nome

    do servidor que ser instance-two e do que ser host02.

    No ambiente em que realizei os testes o sevidores possuem os seguintes IPs:

    Domain Controller + Apache Web Server: 192.168.238.186

    Hostr Controller 01: 192.168.238.187

    Hostr Controller 02: 192.168.238.188

    Inicie o Domain Controler (master) utilizando os seguintes parmetros:

    ./usr/local/jboss/jboss-as-7.1.1.Final/bin/domain.sh

    -Djboss.domain.base.dir=/usr/local/jboss/jboss-as-7.1.1.Final/master/

    -Djboss.host.default.config=host-master.xml

    -Djboss.bind.address=192.168.238.186

    -Djboss.bind.address.management=192.168.238.186

    Verifique o log:

    JBoss AS 7.1.1.Final "Brontes" (Host Controller) started in 15505ms - Started 11 of 11 services

    (0 services are passive or on-demand)

    O Domain Controller foi iniciado com sucesso.

    Conecte primeiro Host Controller 01 (Host-01) ao Master. Inicie o Perfil host01 utilizando os

    seguintes parmetros:

    ./usr/local/jboss/jboss-as-7.1.1.Final/bin/domain.sh

    -Djboss.domain.base.dir=/usr/local/jboss/jboss-as-7.1.1.Final/host01/

    -Djboss.host.default.config=host-slave.xml

    -Djboss.domain.master.address=192.168.238.186

    -Djboss.bind.address.management=192.168.238.187

    -Djboss.bind.address=192.168.238.187

    -Djboss.server.name=host-01

    Agora observe os logs no Domain Controller e perceba que o Host Controller 01 se conectou

    ao Domain:

    JBAS010918: Registered remote slave host "host01", JBoss AS

    7.1.1.Final "Brontes"

    Observe tambm o Mod Cluster Manager em http://192.168.238.186/mod_cluster-manager e

    veja que a nossa primeira instncia j apareceu:

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    18

    Inicie o Host Controller 02 (slave02) utilizando os seguintes parmetros:

    ./usr/local/jboss/jboss-as-7.1.1.Final/bin/domain.sh

    -Djboss.domain.base.dir=/usr/local/jboss/jboss-as-7.1.1.Final/host02/

    -Djboss.host.default.config=host-slave.xml

    -Djboss.domain.master.address=192.168.238.186

    -Djboss.bind.address.management=192.168.238.188

    -Djboss.bind.address=192.168.238.188 -Djboss.server.name=host-02

    Observando novamente o log Domain Controller e verifque que o Host Controller 02 se

    tambm conectou:

    JBAS010918: Registered remote slave host "host02", JBoss AS

    7.1.1.Final "Brontes"

    No Mod Cluster Manager em http://192.168.238.186/mod_cluster-manager j esto as Duas

    instncias:

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    19

    Para testar o Balanceamento vamos fazer o deploy da aplicao SystemProps que pode ser

    baixada http://goo.gl/yjynK

    Para fazer o deploy conecte do domain controller utilizando o CLI:

    $ sudo ./jboss-as-7.1.1.Final/bin/jboss-cli.sh -c

    controller=192.168.238.186:9999

    [[email protected]:9999 /] deploy /tmp/systemprops.war --server-

    groups=apps

    A aplicao foi implantada para as instncias do server group apps.

    Acesse a url do balanceador e verifique se a aplicao est disponvel:

    http://192.168.238.186/systemprops/

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    20

    Perceba que estamos na instance-one. Ento para testarmos o funcionamento do balanceador

    vamos parar a Instncia instance-one e quando tentarmos um novo acesso ser redirecionado

    para o instance-two:

    No CLI execute o seguinte comando para parar o instance-one:

    [[email protected]:9999 /] /host=host01/server-config=instance-

    one:stop

    {

    "outcome" => "success",

    "result" => "STOPPING"

    }

    Acesse novamente a aplicao http://192.168.238.186/systemprops/

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    21

    Perceba que agora estamos no instance-two. Conclumos assim que o balanceamento de carga

    est funcionando.

    Configurando Cluster

    Anteriormente ns definimos que o profile utilizado seria o ha (high availability) que possui

    tecnologias (subsystems) para utilizao de cluster. Nesse perfil podemos encontrar o JGroups

    que a tecnologia utilizada no JBoss para fazer a comunicao entre os ns do cluster e

    replicar o estado dos mesmos (entre muitas outras coisas). Ao implantarmos uma aplicao

    web que no estava preparada para cluster portanto tais recursos no foram ativados.

    Utilizando a tag no web.xml estamos basicamente habilitando clusterizao

    para nossa aplicao.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    22

    Mais informaes podem ser encontradas na documentao:

    https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto

    Ao implantarmos uma aplicao os recursos de cluster sero carregados

    automaticamente. claro que existem outras configuraes a serem feitas, mas podem variar

    conforme o ambiente de cada administrador. Por exemplo, por padro utilizado UDP para

    comunicao entre os ns do cluster, ento necessrio que o ambiente esteja preparado

    para multicast.

    Adicione uma nova rota:

    route add -net 224.0.0.0 netmask 224.0.0.0 dev ethXYZ

    Na inicializao basta fazer o binding com a opo -b IP ou -Djboss.bind.address=IP. Para realizao dos testes eu criei uma simples aplicao Web com um contador utilizando um Bean @Stateful. Essa aplicao pode ser baixada no seguinte link: http://goo.gl/uuUzj Ao realizar o deploy da aplicao o servio 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.186/cluster ( url do balanceador Apache nada tem a ver com a

    localizao da instncia JBoss) e perceba que a aplicao iniciar a contagem. Pare um dos

    servidores e perceba que o estado a aplicao ser replicada.

  • Introduo ao JBoss AS 7 Mauricio Magnani Jr

    23

    Concluso

    O JBoss AS 7 trouxe a evoluo arquitetural que era esperada como pode ser vista nesse

    artigo. Carregamento de mdulos dinmico, gerenciamento centralizado e tempo de startup

    reduzido so apenas algumas das inmeras melhorias trazidas nessa verso.

    Espera-se que a plataforma JBoss continue evoluindo trazendo sempre mais benefcios a todos

    que utilizam os produtos desse ecossistema. Cada membro da comunidade tambm pode

    fazer a sua parte seja colaborando com artigos ou participando de discusses para encontrar

    melhorias para a plataforma.

    Links e Materiais Adicionais

    JBossDivers - http://jbossdivers.wordpress.com

    MasterTheBoss - http://www.mastertheboss.com/

    MiddlewareMagic - http://middlewaremagic.com/

    JBUG Brasil - https://community.jboss.org/groups/jbug-brasil

    Livros

    http://www.packtpub.com/jboss-as-7-configuration-deployment-administration/book