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.