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:
1 |
sudo yum install httpd httpd-devel apr-devel openssl-devel mod_ssl -y |
Após a instalação, inicie o serviço.
1 |
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.
1 |
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.
1 2 3 4 5 |
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
1 2 |
cd /etc/httpd/conf.modules.d vi 00-proxy.conf |
Depois de comentada
1 |
#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.
1 2 3 |
cd /etc/httpd/conf.d/ touch mod_cluster.conf vi mod_cluster.conf |
Adicione o texto abaixo no arquivo mod_cluster.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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”.
1 |
sudo htpasswd -c /etc/httpd/modclusterpassword admin |
Fazer uma reciclagem do Apache.
1 2 |
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
1 |
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 |
1 |
sudo rpm -Uvh jdk-7u80-linux-x64.rpm |
1 2 3 4 |
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
1 |
wget http://download.jboss.org/wildfly/8.1.0.Final/wildfly-8.1.0.Final.tar.gz |
Instalar Wildfly
1 |
tar xzf wildfly-8.1.0.Final.tar.gz |
1 2 |
sudo mv wildfly-8.1.0.Final /opt cd /opt |
1 |
sudo ln -sf wildfly-8.1.0.Final/ wildfly |
Configurar um usuário no Linux, o wildfly
1 2 3 4 |
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.
1 |
sudo visudo |
1 |
wildfly ALL=(ALL) NOPASSWD:ALL |
Depois criar password e entrar como usuário “wildfly”
1 2 |
sudo passwd wildfly su wildfly |
Configurar o Wildfly
1 |
sudo cp /opt/wildfly/bin/init.d/wildfly.conf /etc/default/ |
Editar o arquivo de configuração e descomente as linhas abaixo
1 |
sudo vim /etc/default/wildfly.conf |
1 2 3 4 5 |
## Location of WildFly JBOSS_HOME="/opt/wildfly" ## The username who should own the process. JBOSS_USER=wildfly |
Configurar o Wildfly como um serviço
1 |
sudo cp /opt/wildfly/bin/init.d/wildfly-init-redhat.sh /etc/init.d/wildfly |
Iniciar o Wildfly
1 |
sudo service wildfly start |
Veja no log se não algum erro
1 |
more /var/log/wildfly/console.log |
Parar o Wildfly
1 |
sudo service wildfly stop |
server2: configurando o Wildfly Master Domain
Configurar o Wildfly Master
1 |
sudo vi /etc/default/wildfly.conf |
Altere as linhas abaixo
1 2 3 4 5 6 |
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
1 |
su wildfly |
Configurar o parâmetro jboss.bind.address.management, adicionando junto com as outras linhas de JAVA_OPTS
1 |
vi /opt/wildfly/bin/domain.conf |
1 |
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=<IP_DA_MAQUINA>" |
Configurar os nomes do domínio
1 |
vi /opt/wildfly/domain/configuration/domain.xml |
De…
1 2 3 |
<server-groups> [...] </server-groups> |
Para…
1 2 3 4 5 6 7 8 9 |
<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.
1 2 3 4 5 6 7 8 |
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
1 |
more /opt/wildfly/domain/configuration/host-slave.xml | grep secret |
1 |
<secret value="c2xhdmVfdXNlcl9wYXNzd29yZA=="/> |
Criar um usuário para acessar a web console
1 2 3 4 5 6 7 8 |
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
1 |
sudo vi /etc/default/wildfly.conf |
Alterar as linhas abaixo
1 2 3 4 5 6 |
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
1 |
vi /opt/wildfly/bin/domain.conf |
1 2 |
JAVA_OPTS="$JAVA_OPTS -Djboss.domain.master.address=<IP MASTER>" JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=<IP MAQUINA>" |
Configurar o slave
1 |
vi /opt/wildfly/domain/configuration/host-slave.xml |
Adicionar name no <host (no server03 adicione host1, no server4 adicione host2)
1 |
<host name="host1-wildfly" xmlns="urn:jboss:domain:2.1"> |
Alterar o secret para o mesmo do Master Domain
1 |
<secret value="c2xhdmVfdXNlcl9wYXNzd29yZA=="/> |
Adicionar o username
1 2 3 |
<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)
1 2 3 |
<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:
1 2 3 4 5 6 7 |
<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.