Balanceamento de Carga com Mod JK no JBoss AS 7.1.1

Postado em Atualizado em

Iniciamente devemos baixar o mod_jk, que é um módulo para balanceamento de carga da apache muito utilizado, pois possui grande diversidade de parâmetros podendo  se adequar a inúmeras situações. O mod_jk também é bem robusto e estável. Ele é customizado através de parâmetros salvos em arquivos “.conf”.

O mod_jk pode ser baixado na seguinte url: http://tomcat.apache.org/download-connectors.cgi, o arquivo tomcat-connectors-1.2.32-src.tar.gz, deverá ser baixado.

Logo em seguida devemos descompactar o arquivo, e compilar utilizando os comandos abaixo:

yum install httpd-devel
tar xvfz tomcat-connectors-1.2.32-src.tar.gz
cd tomcat-connectors-1.2.32-src/native/
./configure --with-apxs=yes
make
make install

Agora o mod_jk.so já está  no diretório modules do httpd :

ls /etc/httpd/modules

Crie em /etc/httpd/conf.d/ o arquivo mod-jk.conf e o configure-o como abaixo:

vim /etc/httpd/conf.d/mod-jk.conf

 

#### Mod JK 1.32 ####
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkLogStampFormat  "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /application/* loadbalancer
JkMountFile conf/uriworkermap.properties
JkShmFile logs/jk.shm

<Location /jkstatus/>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

Edite o arquivo httpd.conf :

vim /etc/httpd/conf/httpd.conf

E  adicione o arquivo de configuração do mod-jk.conf:

Include conf/mod-jk.conf

Crie o arquivo workers.properties. No arquivo worker estão as informações relacionadas aos hosts envolvidos e  parâmetros como factor de balanceamento, protocolos, configurações de cache entre outros.

vim /etc/httpd/conf/workers.properties

 


# Define instance01
worker.instance01.port=8009
worker.instance01.host=192.168.0.160
worker.instance01.type=ajp13
worker.instance01.ping_mode=A
worker.instance01.lbfactor=1

# Define instance02
worker.instance02.port=8009
worker.instance02.host=192.168.0.170
worker.instance02.type=ajp13
worker.instance02.ping_mode=A
worker.instance02.lbfactor=1

# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=instance01,instance02
worker.loadbalancer.sticky_session=False
worker.list=loadbalancer

Crie o arquivo uriworkermap.properties, mapeando a url da sua aplicação conforme o exemplo abaixo:

/TestApp=loadbalancer
/TestApp/*=loadbalancer

No JBoss AS 7.1 edite o arquivo standalone.xml :

vim jboss-as-7.1.0.Final/standalone/configuration/standalone.xml

O “jvmRoute”  agora se chama instance-id (https://issues.jboss.org/browse/AS7-1365):

   <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="instance01" native="false">

Adicione o protocolo AJP:

   <connector name="ajp" protocol="AJP/1.3" socket-binding="ajp" enabled="true" scheme="http"/>

Em <socket-binding-group name=”standard-sockets” default-interface=”public” port-offset=”${jboss.socket.binding.port-offset:0}”>, adicione a port AJP configurada no arquivo workers.properties, que para instance01 é 8009.

<socket-binding name="ajp" port="8009"/>

Agora no outro servidor repita os procedimentos realizados em instance01 para instance02

Inicie as instâncias:

Instance01

./jboss-as-7.1.0.Final/bin/standalone.sh  -b 192.168.0.160 -bmanagement 192.168.0.160

Instance02

./jboss-as-7.1.0.Final2/bin/standalone.sh  -b 192.168.0.170 -bmanagement 192.168.0.170

Realize o deploy a aplicação no diretório: jboss-as-7.1.0.Final/standalone/deployments/  de instance01 e instance02

Acesse a url: http://ipservidor/TestApp , a sua aplicação deverá estar funcionando em conjunto com o Mod JK. Lembre-se que existem algumas configurações  que não foram abordadas nesse post.

Espero que tenha ajudado abraços!

18 comentários em “Balanceamento de Carga com Mod JK no JBoss AS 7.1.1

    Luciano Molinari disse:
    26 de abril de 2012 às 8:23

    Legal Maurício!
    Você prefere o mod_jk ou o próprio JBoss Cluster?Falando de JBoss 7 memso.
    Abraços

      Mauricio Magnani respondido:
      26 de abril de 2012 às 9:58

      E ai Luciano… posso dizer que estou bem por dentro desses balancers… no JBoss AS 7 eu aconselharia fortemente usar mod_cluster… o mod_jk é bem maduro e estável mas o foco de toda a infra do JBoss em questão de clusters e balancers será voltada para o JBoss AS 7… então se vc vai iniciar um projeto o mais recomendado é o mod_cluster🙂

        Luciano Molinari disse:
        26 de abril de 2012 às 11:11

        Blz!Eu tinha escutado algo parecido com isso, mas bom saber sua opinião também!
        Valew

        Mauricio Magnani respondido:
        26 de abril de 2012 às 11:20

        🙂
        Vlw Obrigado pela Visita..
        To acompanhando seu blog hein
        []s

    hilner disse:
    31 de julho de 2012 às 7:49

    no modo domain essa configuração funciona?
    já modifiquei o instance-id mas não sei se o que deve ser modificado é no master ou nos slaves.Teria alguma informação a respeito?

      Mauricio Magnani respondido:
      31 de julho de 2012 às 9:19

      Hey Hilner essa modificação deve ser feita no profile que você está utilizando por exemplo “full” ou “full-ha”, isso tudo no arquivo domain.xml

    Mauricio Magnani respondido:
    31 de julho de 2012 às 9:51

    Basicamente para o modo domain edite o arquivo: jboss/domain/configuration/domain.xml

    Adicione o instance-id…

    o configure o arquivo workers.properties para o mod_jk…

    Luciano Marin disse:
    5 de março de 2013 às 17:24

    Caro Mauricio, tive que adicionar a uma configuração de jvmRoute via jboss-cli em cada um dos nos do cluster para que o mod_jk funcionasse. usei o comando abaixo:
    /host=srv01/system-property=jvmRoute:add(value=node01)
    e
    /host=srv02/system-property=jvmRoute:add(value=node02)

    Ele criou uma property no arquivo domain.xml conforme abaixo:

    Sem isso o stick_session não estava funcionado.

      Mauricio Magnani Jr respondido:
      6 de março de 2013 às 15:08

      Oi Luciano, Sério?

      Qual a versão do JBoss vc está utilizando? Eu passei por problema parecido na versao 7.0 mas faz um tempinho hein!!!

      Aquele Abraço!!

    tmoreira2020 disse:
    25 de julho de 2013 às 16:13

    Boa tarde Mauricio,

    Há um erro no trecho de código que declara o socket AJP no JBoss 7.1.1 o nome correto do atributo schema é scheme!

    Abraço

    Luan Gil de Azevedo disse:
    17 de fevereiro de 2014 às 12:35

    Boa Tarde Mauricio.

    Segui seu tutorial e tudo funcionou muito bem mas em certos momentos percebo que o apache leva a aplicação a uma lentidão e não consegui entender o porque.
    Você já viu algum tipo de problema parecido?

    Obrigado.

      Mauricio Magnani Jr respondido:
      17 de fevereiro de 2014 às 12:47

      Oi Luan Bacana,

      Bom realmente eu já certas situações mas pode ser qualquer coisa… Aconselho a dar uma olhada aqui:

      https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/5/html/HTTP_Connectors_Load_Balancing_Guide/Apache_HTTP_Troubleshooting.html

      Talvez seja algo relacionado ao Timeout do SO com o do Apache… realmente dificil saber..

      Esse doc aqui é bacana: https://community.jboss.org/wiki/OptimalModjk12Configuration

      Lembrando que o mod_jk só é aconselhavel se relmente foi necessário! Seria interessante testar o Mod Cluster tenho certeza de que problemas de performance serão bem mais fáceis de serem indentificados.

      Abraços

        Luan Gil de Azevedo disse:
        17 de fevereiro de 2014 às 13:23

        Obrigado pela resposta Mauricio.

        Ja quebrei a cabeça e só consegui fazer o cluster funcionar pelo mod JK . vou tentar novamente com o Mod cluster para ver se consigo resolver esse problema.

        Tenho cerca de 2 consultas por segundo no meu sistema…. mas meu ambiente é todo windows server 2012 isso é um problema para tratar varias requisições ? Ou o mod cluster no windows já ajudaria ? ou se criar um ambiente linux terei mais sucesso ?

        abraço

        Mauricio Magnani Jr respondido:
        17 de fevereiro de 2014 às 14:06

        Então Luan,

        Sinceramente acho que um ambiente Linux com Mod Cluster realmente é superior ao Windows mas essa é a apenas a minha opinião😉

        Acredito que com o Windows funcione mas o Linux sem duvida consegue tratar um ambiente de missão critica como é o seu caso de uma maneira mais robusta.

        Me passa seu email… vou te mandar um material legal pra vc seguir e montar o ambiente em Linux com Mod Cluster. Na vdd é um livro que gosto muito…

        Lembrando utilizando Mod Cluster você já saira ganhando na questão do balanceamento inteligente pois permite um ajuste mais fino nas configurações o no seu caso seu ambiente é bem critico.

        Abs

        Luan Gil de Azevedo disse:
        17 de fevereiro de 2014 às 15:26

        Blz Mauricio.

        Muito Obrigado!!

        Ah se tiver alguma coisa para windows e puder me mandar ficarei grato, pois talvez nesse momento não tenha como mudar de ambiente ainda .

        novamente Obrigado.!!

        Mauricio Magnani Jr respondido:
        17 de fevereiro de 2014 às 17:31

        Vixi Luan,

        Eu fiquei até de fazer o tutorial no Windows… infelizmente só tenho material pra Linux..
        :/

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