Configurando Wildfly com Apache, load balance e clusterização no CentOS7

Esse artigo mostra uma proposição de um ambiente balanceado, clusterizado, full profile HA, usando Apache2 e Wildfly, usando o modo domain para propósitos de gestão.

Para balanceamento e cluster, usaremos o mod_cluster sob o Apache com todas as máquinas rodando sistema operacional CentOS7. Para esse propósito usaremos quatro servidores, distribuídos em:

  • server1: 01 servidor para Apache e mod_cluster;
  • server2: 01 servidor para o domain, Wildfly;
  • server3 e server4: 02 servidores com wildfly para compor o cluster.

Seguiremos uma sequencia de comandos para a configuração dos servidores eapplications server.

Verifique em todos os servidores…

A rede está funcionando? Veja qual IP de cada máquina com “ip addr” ou “ifconfig” e tente “pingar” ou conectar com ssh. O CentOS7 por default deixa a rede desalibilitada.

server1: Instalando Apache2 HTTP

Execute o comando abaixo para a instalação do Apache2:

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

Após a instalação, inicie o serviço.

sudo service httpd start

Acesse no browser de sua máquina se o Apache HTTP Server está no ar, só acessar pelo IP: http://<IP_SERVER1>. Se nenhuma página de testes aparecer, então provavelmente você precisa liberar a porta 80 para o HTTP Server no firewall; veja aqui como configurar.

Baixar e instalar o mod_cluster.

wget http://downloads.jboss.org/mod_cluster//1.3.1.Final/linux-x86_64/mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz

Depois a instalação.

tar -zxvf mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz
sudo cp mod_advertise.so /etc/httpd/modules/
sudo cp mod_manager.so /etc/httpd/modules/
sudo cp mod_proxy_cluster.so /etc/httpd/modules/
sudo cp mod_cluster_slotmem.so /etc/httpd/modules/

Comente a linha do mod_proxy_balancer pois será usado o mod_cluster

cd /etc/httpd/conf.modules.d
vi 00-proxy.conf

Depois de comentada

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Criar e adicionar o conteúdo do arquivo de configuração do cluster, o mod_cluster.conf.

cd /etc/httpd/conf.d/
touch mod_cluster.conf
vi mod_cluster.conf

Adicione o texto abaixo no arquivo mod_cluster.conf

LoadModule cluster_slotmem_module modules/mod_cluster_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

MemManagerFile /var/cache/mod_cluster

Maxcontext 100
Maxnode 100
Maxhost 100

<VirtualHost *:80>

	<Directory />
		Order deny,allow
		Allow from all
	</Directory>

	<Location /mod_cluster_manager>
		SetHandler mod_cluster-manager
		#Order deny,allow
		#Deny from all
		#Allow from all
		AuthType Basic
		AuthName "MCM"
		AuthUserFile /etc/httpd/modclusterpassword
		Require user admin
	</Location>

	KeepAliveTimeout 60
	MaxKeepAliveRequests 0
	ServerAdvertise Off
	EnableMCPMReceive Off

</VirtualHost>

Criar um usuário com senha para o mod_cluster com o singelo nome de “admin”.

sudo htpasswd -c /etc/httpd/modclusterpassword admin

Fazer uma reciclagem do Apache.

sudo service httpd stop
sudo service httpd start

Testar novamente no browser: http://<IP_SERVER1>

Testar se o mod_cluster foi corretamente instalado e está respondendo: http://<IP_SERVER1>/mod_cluster_manager

server2, server3 e server4: Instalando e configurando Java e Wildfly

Baixar, instalar e configurar o Java

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-linux-x64.rpm
sudo rpm -Uvh jdk-7u80-linux-x64.rpm
sudo alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 200000
sudo alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 200000
sudo alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
sudo alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 200000

Baixar o Wildfly

wget http://download.jboss.org/wildfly/8.1.0.Final/wildfly-8.1.0.Final.tar.gz

Instalar Wildfly

tar xzf wildfly-8.1.0.Final.tar.gz
sudo mv wildfly-8.1.0.Final /opt
cd /opt
sudo ln -sf wildfly-8.1.0.Final/ wildfly

Configurar um usuário no Linux, o wildfly

sudo groupadd wildfly
sudo useradd -s /bin/bash -d /home/wildfly -m -g wildfly wildfly
sudo chown -R wildfly:wildfly /opt/wildfly-8.1.0.Final
sudo chown -h wildfly:wildfly /opt/wildfly

Alterar a permissão do usuário “wildfly” para administrador do Linux (cuidado!) acrescentando a linha logo abaixo.

sudo visudo
wildfly ALL=(ALL) NOPASSWD:ALL

Depois criar password e entrar como usuário “wildfly”

sudo passwd wildfly
su wildfly

Configurar o Wildfly

sudo cp /opt/wildfly/bin/init.d/wildfly.conf /etc/default/

Editar o arquivo de configuração e descomente as linhas abaixo

sudo vim /etc/default/wildfly.conf
## Location of WildFly
JBOSS_HOME="/opt/wildfly"

## The username who should own the process.
JBOSS_USER=wildfly

Configurar o Wildfly como um serviço

sudo cp /opt/wildfly/bin/init.d/wildfly-init-redhat.sh /etc/init.d/wildfly

Iniciar o Wildfly

sudo service wildfly start

Veja no log se não algum erro

more /var/log/wildfly/console.log

Parar o Wildfly

sudo service wildfly stop
server2: configurando o Wildfly Master Domain

Configurar o Wildfly Master

sudo vi /etc/default/wildfly.conf

Altere as linhas abaixo

JBOSS_MODE=domain
JBOSS_DOMAIN_CONFIG=domain.xml
JBOSS_HOST_CONFIG=host-master.xml
STARTUP_WAIT=30
SHUTDOWN_WAIT=30
JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log

Faça login como usuário “wildfly” se já não estiver

su wildfly

Configurar  o parâmetro jboss.bind.address.management, adicionando junto com as outras linhas de JAVA_OPTS

vi /opt/wildfly/bin/domain.conf
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=<IP_DA_MAQUINA>"

Configurar os nomes do domínio

vi /opt/wildfly/domain/configuration/domain.xml

De…

<server-groups>
 [...]
</server-groups>

Para…

<server-groups>
   <server-group name="arquitetura-grupo-1" profile="full-ha">
    <jvm name="default">
      <heap size="512m" max-size="512m"/>
      <permgen max-size="256m"/>
    </jvm>
    <socket-binding-group ref="full-ha-sockets"/>
   </server-group>
</server-groups>

Criar um usuário dentro do WildFly para comunicação no modo domain, usaremos depois; siga a sequência abaixo.

sh /opt/wildfly/bin/add-user.sh
[enter]
wuser
sapucaia@1
sapucaia@1
[enter]
yes
yes

Anotar o secret gerado após criar o usuáro pois será usado adiante

more /opt/wildfly/domain/configuration/host-slave.xml | grep secret
<secret value="c2xhdmVfdXNlcl9wYXNzd29yZA=="/>

Criar um usuário para acessar a web console

sh /opt/wildfly/bin/add-user.sh
[enter]
domainadmin
sapucaia@1
sapucaia@1
[enter]
yes
no
server3 e server4: configurando o Wildfly como host-slave

Configurar o Wildfly para modo host-slave

sudo vi /etc/default/wildfly.conf

Alterar as linhas abaixo

JBOSS_USER=wildfly
JBOSS_MODE=domain
JBOSS_HOST_CONFIG=host-slave.xml
STARTUP_WAIT=30
SHUTDOWN_WAIT=30
JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log

Adicionar as linhas de JAVA_OPTS para o domain

vi /opt/wildfly/bin/domain.conf

 

JAVA_OPTS="$JAVA_OPTS -Djboss.domain.master.address=<IP MASTER>" 
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=<IP MAQUINA>"

Configurar o slave

vi /opt/wildfly/domain/configuration/host-slave.xml

Adicionar name no <host (no server03 adicione host1, no server4 adicione host2)

<host name="host1-wildfly" xmlns="urn:jboss:domain:2.1">

Alterar o secret para o mesmo do Master Domain

<secret value="c2xhdmVfdXNlcl9wYXNzd29yZA=="/>

Adicionar o username

<domain-controller>
    <remote host="${jboss.domain.master.address}" username="wuser" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
</domain-controller>

Alterar o servers para: (no server03 adicionar arquitetura-1, no server04 adicionar arquitetura-2)

<servers>
   <server name="arquitetura-1" group="arquitetura-grupo-1"/>
</servers>

Conectando o Wildfly ao Apache Web Server

No Servidor server-domain-widfly edite o arquivo /opt/wildfly/domain/configuration/domain.xml. Busque pele profile <profile name=”arquitetura-full-ha”>. Dentro desse profile edite o Subsystem <subsystem xmlns=”urn:jboss:domain:modcluster:1.2″> deixando-o como abaixo:

<subsystem xmlns="urn:jboss:domain:modcluster:1.2">
  <mod-cluster-config advertise-socket="modcluster" proxy-list="<IP_MOD_CLUSTER>:80" advertise="false" sticky-session="true" load-balancing-group="arquitetura"  connector="ajp">
   <dynamic-load-provider>
     <load-metric type="cpu"/>
   </dynamic-load-provider>
  </mod-cluster-config>
</subsystem>

Observe que na tag proxy-list nós colocamos os Balancer(s) / Apache Web Servers. Acesse o mod cluster manager para visualizar as instâncias conectadas nos Balancers.

 

 

 

 

 

 

 

 

 

 

 

Published by

Claudio Cardozo

Ubuntu Kernel Team Membership, Certified SCRUM Master, System Architect, Open Source enthusiastic, Java and JavaFX passioned, OpenCRX Team, Theologist, minimalist lifestyle, eitaa!