Integração Apache com Tomcat e balanceamento de carga com JkMount


A integração do Apache com o TOMCAT é feita para que as páginas estáticas sejam executadas pelo Apache e as em JSP pelo contêiner TOMCAT, além do direcionamento das aplicações via APACHE, sendo o WebServer de acesso para as aplicações que estão no TOMCAT. As páginas ESTÁTICAS serão executadas pelo APACHE (ganho de performance) e as páginas dinâmicas (JSP) executadas pelo contêiner TOMCAT. A integração permite “esconder” as portas do TOMCAT, já que sua aplicação será chamada por uma URL na porta 80 e o APACHE sim, irá pegar sua aplicação no TOMCAT e mostrar. Possibilidade de se realizar LOADBALANCER entre dois ou mais TOMCATs usando o APACHE como o WebServer que irá gerenciar essa carga e dividirá ela. Quando o servidor é instalado, a configuração inicial do Tomcat contém um conector que recebe pedidos de HTTP utilizando AJP (Apache Jserv Protocol). Embora o Tomcat seja capaz de recebe pedidos de HTTP diretamente da rede, esse conector permite que o Tomcat receba pedidos de software em uma camada inferior. Por exemplo, o Tomcat pode receber pedidos de servidores da Web (como o Apache HTTP Server), servidores proxy e sistemas de balanceamento de carga que suportem os protocolos AJP.

Exemplo:
Integração Apache Tomcat com JkMount

Instalação

Para que o Apache consiga efetuar o balanceamento de carga entre ele e camada inferior de servidores (Tomcat) ele precisa ter o módulo JkMount (mod_jk) instalado pois ele é o responsável pela comunicação entre o Apache e o Tomcat. Este módulo pode ser obtido aquie os seus arquivos devem ser descompactados na pasta de módulos do
Apache:

/etc/httpd/modules

JkMount

Configuração

Para que o Apache utilize o módulo JkMout isso deve-se:

Localização do módulo

Localização do módulo: Criar o arquivo /etc/httpd/conf/jk.conf indicando onde está instalado o módulo JkMount, veja abaixo o conteúdo do arquivo:

 LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so

Definição dos Workers

Definição dos Workers: Criar o arquivo /etc/httpd/conf/jkworkers.properties

O arquivo abaixo cria 7 workers que são os servidores que o Apache irá balancear.

  • 4 servidores Tomcats, descrevendo a porta padrão, nome do localhost e qual o tipo de conexão (no nosso caso utilizamos o conector AJP para criar um proxy do Tomcat)
  • 2 balanceadores: loadbalancer efetua o balanceamento entre os servidores Tomcat 1 e 2 e loadbalancer2 efetua o balanceamento entre os servidores Tomcat 3 e 4.
  • 1 worker.status que é responsável de retornar o status de cada worker.
 #
 # workers.properties
 #
 #
 # In Unix, we use forward slashes:
 ps=/
 #
 # list the workers by name
 #
 worker.list=tomcat1, tomcat2, tomcat3, tomcat4, loadbalancer, loadbalancer2, status
 #
 # ------------------------
 # First tomcat server
 # ------------------------
 worker.tomcat1.port=8009
 worker.tomcat1.host=localhost
 worker.tomcat1.type=ajp13
 #
 # Specify the size of the open connection cache.
 #worker.tomcat1.cachesize
 #
 #
 # Specifies the load balance factor when used with
 # a load balancing worker.
 # Note:
 #  ----> lbfactor must be > 0
 #  ----> Low lbfactor means less work done by the worker.
 worker.tomcat1.lbfactor=100
 #
 # ------------------------
 # Second tomcat server
 # ------------------------
 worker.tomcat2.port=9009
 worker.tomcat2.host=localhost
 worker.tomcat2.type=ajp13
 #
 # Specify the size of the open connection cache.
 #worker.tomcat2.cachesize
 #
 #
 # Specifies the load balance factor when used with
 # a load balancing worker.
 # Note:
 #  ----> lbfactor must be > 0
 #  ----> Low lbfactor means less work done by the worker.
 worker.tomcat2.lbfactor=100
 #
 # ------------------------
 # Third tomcat server
 # ------------------------
 worker.tomcat3.port=10009
 worker.tomcat3.host=localhost
 worker.tomcat3.type=ajp13
 #
 # Specify the size of the open connection cache.
 #worker.tomcat3.cachesize
 #
 #
 # Specifies the load balance factor when used with
 # a load balancing worker.
 # Note:
 #  ----> lbfactor must be > 0
 #  ----> Low lbfactor means less work done by the worker.
 worker.tomcat3.lbfactor=100
 #
 worker.tomcat4.port=11009
 worker.tomcat4.host=localhost
 worker.tomcat4.type=ajp13
 worker.tomcat4.lbfactor=100
 #
 #
 # ------------------------
 # Load Balancer worker
 # ------------------------
 #
 #
 # The loadbalancer (type lb) worker performs weighted round-robin
 # load balancing with sticky sessions.
 # Note:
 #  ----> If a worker dies, the load balancer will check its state
 #        once in a while. Until then all work is redirected to peer
 #        worker.
 worker.loadbalancer.type=lb
 worker.loadbalancer.balanced_workers=tomcat1, tomcat2
 #
 worker.loadbalancer2.type=lb
 worker.loadbalancer2.balanced_workers=tomcat3 ,tomcat4
 #
 #
 # ------------------------
 # Status worker
 # ------------------------
 worker.status.type=status
 #
 #
 # END workers.properties
 #

Regras de Balanceamento

Regras de Balanceamento: No arquivo /etc/httpd/conf/httpd.conf devem ser inseridas as regras de balanceamento que deverão ser aplicadas pelo Apache, segue as regras criadas para o MoIP:

NameVirtualHost [ip localhost]
<VirtualHost ip localhost:80>
#
#JkMount /ig/* loadbalancer2
#
JkMount /*.jsp loadbalancer
#JkMount /*.do loadbalancer
JkMount /admin* loadbalancer
JkMount /manager* loadbalancer
JkMount /web-console* loadbalancer
JkMount /* loadbalancer
#
JkMount /jkstatus status
#
JkUnMount  /mail* loadbalancer
JkUnMount  /cgi-bin/* loadbalancer
JkUnMount  /openwebmail/* loadbalancer

ScriptAlias /cgi-bin/awstats /var/www/cgi-bin/awstats
Alias /awstats /var/www/html/awstats
ServerName   exemplo.com.br
DocumentRoot /var/www/vhosts/
SuexecUserGroup apache apache
ServerAlias "www.exemplo.com.br"
ServerAlias "www.exemplo_url2.com.br"
ServerAdmin "webmaster@exemplo.com.br"
ErrorDocument "503" "Por favor, tente mais tarde. O sistema esta temporariamente fora do ar.
CustomLog "/etc/httpd/logs/exemplo-access_log" "combined"
ErrorLog "/etc/httpd/logs/exemplo-error_log"
SSLCertificateChainFile  /etc/httpd/conf/ssl.crt/verisign.site.pro.intermediate.crt
Redirect /exemplo http://blog.exemplo.com.br
Redirect /forum http://forum.exemplo.com.br
<Directory /var/www/vhosts/exemplo.com.br>
Options Includes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost ip localhost:443>
#
JkMount /*.jsp loadbalancer
#JkMount /*.do loadbalancer
JkMount /admin* loadbalancer
JkMount /manager* loadbalancer
JkMount /web-console* loadlancer
JkMount /* loadbalancer
#
JkMount /jkstatus status
#
JkUnMount  /mail* loadbalancer
JkUnMount  /cgi-bin/* loadbalancer
JkUnMount  /openwebmail/* loadbalancer
#
#
ScriptAlias /cgi-bin/awstats /var/www/cgi-bin/awstats
Alias /awstats /var/www/html/awstats
ServerName exemplo.com.br
DocumentRoot /var/www/vhosts/exemplo.com.br
SuexecUserGroup apache apache
ServerAlias "www.exemplo.com.br"
ServerAlias "www.exemplo_url2.com.br"
ServerAdmin "webmaster@exemplo.com.br"
ErrorDocument "503" "Por favor, tente mais tarde. O sistema esta temporariamente fora do ar.
CustomLog "/etc/httpd/logs/exemplo-access_log" "combined"
ErrorLog "/etc/httpd/logs/exemplo-error_log"
SSLCertificateFile /etc/httpd/conf/ssl.crt/exemplo.com.br.hspc.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/exemplo.com.br.hspc.key
SSLEngine on
SSLCertificateChainFile  /etc/httpd/conf/ssl.crt/verisign.site.pro.intermediate.crt
Redirect /moipideias http://blog.exemplo.com.br
Redirect /forum http://forum.exemplo.com.br
< Directory /var/www/vhosts/exemplo.com.br>
Options Includes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

Carregar o Módulo

Carregar o Módulo: Criar o arquivo /etc/httpd/conf.d/tomcat.conf que o Apache irá utilizar para carregar o módulo JkMount, workers e regras.

<IfModule mod_jk.c>
    JkWorkersFile /etc/httpd/conf/jkworkers.properties
    JkLogFile logs/mod_jk.log
    JkLogLevel error
    #
    JkMount /*.jsp loadbalancer
    #
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
    JkRequestLogFormat "%w %V %T"
</IfModule>

2 comentários em “Integração Apache com Tomcat e balanceamento de carga com JkMount

  1. Bruno sei que esse post é meio antigo mais gostaria de saber se consegue me ajudar com um balanceamento que preciso fazer mais com http e https.

    Procurei seu e-mail na net mais não achei se puder por favor me encaminhe um e-mail.

    Por enquanto agradeço,

    Vivi

    Curtir

Deixe um comentário

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

13 Minutos De Um DBA

Você é o dono de todas as informações

ANTES QUE ELES CRESÇAM

Logo seu anjinho vira um moção. Leia agora.

Think Different

Shifting organisations to a better place

Matthew Skelton

Consultant in Operability and Continuous Delivery at Conflux

Dataloop.IO Blog

A new SaaS monitoring tool for DevOps & Operations

Labs

Spotify's Engineering and Technology Blog

%d blogueiros gostam disto: