Apache Web Service + JBoss Mod cluster (Loadbalance) + JBoss AS 7 no CentOS 6.5 - 64 bits
Autor: josepojr | Publicado: 2014-06-23T16:38:00-03:00


INTRODUÇÃO


Num artigo anterior (http://www.josepojr.com/2013/04/criando-cluster-de-jboss-as-7-com-load.html)

explicamos detalhadamente a instalação do Apache Web Service (conhecido como "httpd") com o JBoss Mod Cluster já instalado. Nesse artigo, vamos explicar a configuração para o Apache Web Service "limpo", isto é, o httpd instalado no CentOS sem nenhum módulo adicional, em outras palavras, com a configuração padrão do httpd para o CentOS.



DESENVOLVIMENTO

Instalando e configurando o Apache Web Service (httpd).

Instalar os seguintes pacotes no CentOS 6.5 64 bits.

yum install httpd httpd-devel apr-devel openssl-devel mod_ssl -y

Depois disso, iniciar serviço do httpd com o comando:

service httpd start


Ou na interface gráfica dentro do CentOS, No menu "Sistema" &gt; "Administração" &gt; "Serviços", conforme mostra a figura a seguir:







Depois de iniciar o servidor httpd, o resultado no endereço http://127.0.0.1 (local) ou outro endereço que está configurado na interface de rede do CentOS, deve ser a página inicial do servidor httpd, conforme mostra a figura a seguir:









Depois de testar o servidor httpd, agora baixe (desligue) o httpd que vamos inserir módulos do projeto JBoss ModCluster para poder configurar o loadbalance (Balanceador de carga, isto é, de requisições HTTP).


Para isso, entre nesse site: http://mod-cluster.jboss.org/

faça o download da versão 1.2.6.Final para o sistema operacional linux-x86_64

ou pode usar o seguinte link: http://downloads.jboss.org/mod_cluster//1.2.6.Final/linux-x86_64/mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz.


Observação: Não baixe as versões que venha com o httpd incluído, pois estaremos usando o httpd fornecido dentro dos repositórios de pacotes .rpm do CentOS 6.5. Dá para notar que o tamanho do arquivo com o httpd é da ordem de megabytes, enquanto o arquivo só com os módulos é da ordem de kilobytes.

Ao baixar o arquivo, descompacte o arquivo *.tar.gz com o seguinte comando:

tar xvfz mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz&nbsp;


Dentro do arquivo compactado, teremos 4 arquivos binários com a extensão *.so que são:

mod_advertise.so
mod_manager.so
mod_proxy_cluster.so
mod_slotmem.so


Esses são os 4 módulos que vão ser inseridos na pasta /etc/httpd/modules, então, deve-se copiar esses arquivos para esse diretório, tomando cuidado para que o dono e grupo dos arquivos sejam sempre root.

Caso contrário, ao iniciar o httpd, o mesmo reportará erros de permissão nos módulos e não conseguirá ser iniciado.

Agora vamos para o diretório&nbsp; /etc/httpd/conf e edite o arquivo httpd.conf com os seguintes dados:


Comente a linha do módulo proxy_balancer_module para não entrar em conflito com o modulo de proxy do JBoss Cluster (mod_proxy_cluster) que estaremos incluindo:

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Insira as seguintes linhas depois das outras linhas com o nome "LoadModule":

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


Inserir a seguinte linha depois da linha com o comando "Include conf.d/*.conf"

MemManagerFile /var/cache/mod_cluster

Por último, inserir o comando "IfModule" para o módulo "manager_module" conforme mostra código a seguir:

&lt;IfModule manager_module&gt;
&nbsp;&nbsp; Listen 0.0.0.0:6666
&nbsp;&nbsp; ManagerBalancerName mycluster
&nbsp;&nbsp; &lt;VirtualHost *:6666&gt;
&nbsp; &nbsp; &nbsp;&nbsp; &lt;Location /&gt; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order deny,allow
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Deny from all
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all
&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KeepAliveTimeout 300
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaxKeepAliveRequests 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerAdvertise Off
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EnableMCPMReceiver Off
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Location /mod_cluster_manager&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetHandler mod_cluster-manager
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order deny,allow
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Deny from all
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Location&gt;
&nbsp;&nbsp; &lt;/VirtualHost&gt;
&lt;/IfModule&gt;


Depois disso, iniciar o servidor com o comando:

service httpd start


Observação: Nesse momento, é importante iniciar o servidor dessa maneira para que o mesmo possa imprimir no console os erros que possam ocorrer. Se iniciar pela interface gráfica e se tiver erros no arquivo httpd.conf, o servidor não iniciará e ficar com um alerta dizendo que está morto, ou a interface gráfica ficará travada. Também podemos olhar os logs no diretório /etc/httpd/logs mas o trabalho para chegar até ai e usar os velhos comandos como tail -f error.log seria muito demorado. Quando ocorre erros, o erro já foi reportado no próprio console, depois de executar o comando service httpd start.


Configurando o JBoss AS 7 para funcionar com o httpd + mod_cluster


Próximo passo é configurar o JBoss AS 7 para se conectar no httpd com o mod_cluster instalado. Para isso, altere o arquivo de configuração standalone-full-ha.xml da pasta $JBOSS_HOME/standalone/configuration conforme as configurações abaixo:

&lt;subsystem xmlns="urn:jboss:domain:modcluster:1.1"&gt;
&nbsp;&nbsp;&nbsp; &lt;mod-cluster-config advertise-socket="modcluster" proxy-list="127.0.0.1:6666" connector="ajp"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dynamic-load-provider history="10" decay="2"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &lt;load-metric type="cpu" weight="2" capacity="1" /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-metric type="sessions" capacity="512" /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dynamic-load-provider&gt;
&nbsp;&nbsp;&nbsp; &lt;/mod-cluster-config&gt;
&lt;/subsystem&gt;

&lt;subsytem xmlns="urn:jboss.domain:web:1.2" default-virtual-server="default-host" instance-id="%{jboss.node.name}" native="false"&gt;
&nbsp;&nbsp;&nbsp; &lt;connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" /&gt;
&nbsp;&nbsp;&nbsp; &lt;connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" /&gt;
&nbsp;&nbsp;&nbsp; &lt;virtual-server name="default-host" enable-welcome-root="true" &gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;alias name="localhost" /&gt;
&nbsp;&nbsp;&nbsp; &lt;/virtual-server&gt;
&lt;/subsystem&gt;

&lt;socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}" &gt;
&nbsp;&nbsp;&nbsp; &lt;socket-binding name="ajp" port="8009" /&gt;
&nbsp;&nbsp;&nbsp; &lt;socket-binding name="http" port="8080" /&gt;

&lt;/socket-binding-group&gt;

Depois disso, abrir navegador no endereço http://127.0.0.1, conforme mostra a figura seguir:







Note que a página inicial do httpd "sumiu", isto é, ficou no lugar da página inicial do JBoss AS 7. Isso mostra que o balanceador de carga (mod_cluster) + httpd (servidor web) estão funcionando juntos e corretamente!



CONCLUSÃO


Mostramos nesse artigo como configurar, instalar o JBoss ModCluster dentro do Apache Web Service e assim, funcionando junto com o servidor JBoss AS 7. Lembrando que podemos instanciar N servidores jboss para trabalhar com o mesmo servidor httpd, desta maneira, se um servidor jboss cair (for derrubado), o httpd com o mod_cluster instalado, detectará que uma instância do cluster de JBoss AS 7 caiu e não enviará mais requisições a essa instância.


Para realizar o acesso externo no CentOS, veja mais informações nesse link: http://tidahora.com.br/index.html/doku.php?id=instalando_o_mantis_no_centos_6. Esse artigo cita a instalação de um outro programa web como o Mantis (https://www.mantisbt.org/), mas cita a desativação do serviço SELINUX com a edição do arquivo /etc/selinux/config e pede para mudar a seguinte linha:

SELINUX = disabled


Para desabilitar o SELINUX. Depois, no menu "Sistema" &gt; "Administração" &gt; "Firewall" e configure o par porta/protocolo para o Firewall deixar fazer o acesso. Lembrando de clicar em "Aplicar" para as configurações possam estar valendo no sistema.

Por último, configurar o Iptables no linux para deixar realizar o acesso pelas portas necessárias. A configuração disso está fora do escopo desse artigo, podendo ser realizada pelo link http://www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html.

Ou como solução paliativa e para fins de desenvolvimento e testes, pode se desativar o serviço de Iptables no menu "Sistema" &gt; "Administração" &gt; "Serviços".


REFERÊNCIAS

http://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional/