Olá galera!
Esse post mostra como montar um ambiente com um Apache HTTP Server como loadbalancer e vários WildFly 8 em Cluster utilizando o modo domain para facilitar a gestão do ambiente.
Esse ambiente foi apresentado em uma palestra no TDC Floripa 2015. Para ver os slides: TDC Floripa - Palestra WildFly Avançado
Utilizei como base para montar esse ambiente os posts do Mauricio Magnani e ajuda do pessoal do JBUG Brasil.
Todas as máquinas utilizadas para montar esse ambiente utilizam CentOs 7. Você pode utilizar o S.O. que desejar, caso tenha alguma dificuldade é só entrar em contato.
Você precisará de 4 máquinas:
- maq01: Apache HTTP Server
- maq02: WildFly Master
- maq03: WildFly Server1
- maq04: WildFly Server2
Em todas as máquinas
- Configure a rede conforme desejado:
/etc/init.d/network stop
vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network
vi /etc/resolv.conf
/etc/init.d/network start
- Teste se a rede está OK
ping www.google.com
ifconfig
Maq01 - Apache HTTP Server
yum install httpd httpd-devel apr-devel openssl-devel mod_ssl -y
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_da_maquina>
- Baixe 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
tar -zxvf mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz
cp mod_advertise.so /etc/httpd/modules/
cp mod_manager.so /etc/httpd/modules/
cp mod_proxy_cluster.so /etc/httpd/modules/
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
- A linha deve ficar assim:
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
- Crie e adicione o conteúdo do arquivo mod_cluster.conf
cd /etc/httpd/conf.d/
touch mod_cluster.conf
vi 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/modclusterpassword Require user admin </Location> KeepAliveTimeout 60 MaxKeepAliveRequests 0 ServerAdvertise Off EnableMCPMReceive Off </VirtualHost>
- Crie um usuário e senha
htpasswd -c /etc/modclusterpassword admin
- Reinicie o Apache:
sudo service httpd stop
sudo service httpd start
- Teste novamente no browser: http://<ip_da_maquina>
- Teste no browser o mod_cluster: http://<ip_da_maquina>/mod_cluster_manager
Maq02, Maq03, Maq04
- Instale e configure o Java
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm
rpm -Uvh jdk-7u79-linux-x64.rpm
alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 200000
alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 200000
alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 200000
- Instale o WildFly 8:
wget http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip
yum install unzip
unzip wildfly-8.2.0.Final.zip -d /opt/
ln -s /opt/wildfly-8.2.0.Final /opt/wildfly
- Configure um usuário no linux:
groupadd wildfly
useradd -s /bin/bash -d /home/wildfly -m -g wildfly wildfly
chown -R wildfly:wildfly /opt/wildfly-8.2.0.Final
chown -h wildfly:wildfly /opt/wildfly
sudo vi /etc/sudoers
wildfly ALL=(ALL) NOPASSWD:ALL
passwd wildfly
su wildfly
- Configure o WildFly
cd /etc/default
vi wildfly.conf
descomentar JBOSS_USER
- Inicie o WildFly
sudo service wildfly start
- Veja no log se não deu erros
vi /opt/wildfly/standalone/log/server.log
- Pare o WildFly
sudo service wildfly stop
Maq02 - WildFly Master
- Configure o WildFly
sudo vi /etc/default/wildfly.conf
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 com o usuário wildlfy
su wildfly
- Adicione a linha para setar o parametro jboss.bind.address.management, adicione 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>"
- Configure o domain.xml
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>
- Crie um usuário dentro do WildFly para comunicação no modo domain, usaremos mais para frente
sh /opt/wildfly/bin/add-user.sh
[enter]
wuser
mortadela@1
mortadela@1
[enter]
yes
yes
- Anote o secret gerado após criar o usuáro pois usaremos adiante:
<secret value="bW9ydGFkZWxhQDE=" />
- Crie um usuário para acessar o webconsole
sh /opt/wildfly/bin/add-user.sh
[enter]
domainadmin
mortadela@1
mortadela@1
[enter]
yes
no
Maq03 e Maq04
- Configure o WildFly:
sudo vi /etc/default/wildfly.conf
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
- Adicione as linhas de JAVA_OPTS:
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>"
- Configure o slave:
vi /opt/wildfly/domain/configuration/host-slave.xml
- adicione name no <host (na maq03 adicione host1, na maq04 adicione host2)
<host name="server-host1-widfly"
- altere o <secret> para o secret gerado no master
- Adicione o username:
<domain-controller>
<remote host="${jboss.domain.master.address}" username="wuser" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
</domain-controller>
- Altere o servers para: (na maq03 adicione arquitetura-1, na maq04 adicione arquitetura-2)
<servers>
<server name="arquitetura-1" group="arquitetura-grupo-1"/>
</servers>
Maq02, Maq03, Maq04
- Inicie o WildFly
sudo service wildfly start
Maq02
- Faça deploy de uma aplicação de testes
1) Entre via browser no console admin do WildFly master: http://<ip_wildfly_master>:9990/
2) Digite usuário domainadmin e a senha mortadela@1
3) Acesse a parte de deployments
4) Faça o deploy da aplicação systemprops: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/systemprops.war
5) Clique em Assign e associe ao grupo grupo-arquitetura-1
- Teste o load balancer
1) Acesse via broser a aplicação pelo apache http server: http://<ip_do_apache>/systemprops
2) A aplicação mostrará em qual host você vai estar: arquitetura-1 ou arquitetura-2. Vai depender de onde o loadbalancer te direcionou
3) Vá até a máquina que você foi direcionado (arquitetura-1 por exemplo) e pare o WildFly: sudo service wildfly stop
4) Acesse a mesma URL e veja que você foi redirecionado para o arquitetura-2, ou seja, o loadbalancer está funcinando
5) Suba novamente o wildfly: sudo service wildfly start
- Teste o cluster:
1) Faça deploy da aplicação de teste do cluster: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/cluster-example.war
2) Acesse http://<ip_do_apache>/cluster
3) Veja uma contagem acontecendo, esse valor está num EJB Stateful
4) Pare um wildfly
5) A contagem deve continuar
6) Suba a máquina que parou e pare a outra
7) A contagem deve continuar, ou seja, o cluster está funcionando.
Mais detalhes:
- Esse tutorial foi baseado neste:
https://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional/
https://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional-parte-2/
- Para mais informações sobre mod_cluster
http://mod-cluster.jboss.org/
- Dúvidas podem ser tiradas no JBUG Brasil:
https://developer.jboss.org/groups/jbug-brasil
Vaaaaleu!!
Adriano Schmidt
Olá Adriano, essa configuração funciona para jboss EAP-6.1 ?
ResponderExcluiropa, funciona sim! já montei esse mesmo ambiente com o EAP-6.1, talvez vc encontre alguma pequena diferença na configuração, mas nada complicado de identificar... qualquer coisa é só abrir um tópico no JBug Brasil que vamos resolvendo por lá: https://developer.jboss.org/groups/jbug-brasil abração!!!
ExcluirCara ta faltando coisa ai, coloque a parte que deve ser colocado o ip do balanceador no master.
ResponderExcluirSeu tutorial pode ajudar muita gente, porém ta muito bagunçado.
ExcluirFala Raymesson, agora que vi seu comentário... esse post fiz enquanto anotava o que fazia para montar o ambiente, talvez faltou essa parte sim, mas a princípio o master não precisa do load balancer... o load balancer enxerga apenas os nós que contém a aplicação... já faz um tempo q vc comentou, mas você ainda lembra o que era exatamente que faltava? abraço!
Excluiropa... fiz um novo tutorial com wildfly 10: http://localhost8080.blogspot.com.br/2016/09/load-balancer-com-wildfly-10.html
ExcluirOpa Adriano estou seguindo seu tutorial, assim como outros e por algum motivo não consigo colocar para funcionar.
ResponderExcluirEstou usando WildFly 9.0.2, o master registra o slave, mas assim como em todos os tutoriais no final não consigo dar deploy em nenhuma aplicação, já estou quase jogando a tolha. Acredito que deva ser algo simples, pois uso duas maquinas virtuals com VirtualBox e usando linux centoOS.
Alguma ideia do que possa ser?
Obrigado.
Sandro Marques
Muitas vezes quando o deploy não sobe é por conta de alguma incompatibilidade entre o wildfly e a aplicação. Já aconteceu comigo.
Excluirsim, pode ser isso que o Raymesson falou... talvez vc poderia testar fszendo deploy de uma aplicação mais simples..
ExcluirAdriano, ótimo tutorial. Estou precisando de um desses para Windows, não tem ai não??? Hehehe
ResponderExcluirAdriano seu Tuto ficou show. Faltou a configuração de conexão do Wildfly ao Apache Web Server.
ResponderExcluirSe eu estiver errado corrija por favor. Acho que é isso. Um abraço.
opa... acho q sim...
Excluirveja esse tutorial com wildfly 10 que eu montei: http://localhost8080.blogspot.com.br/2016/09/load-balancer-com-wildfly-10.html
Boa noite.
ResponderExcluirApós a instalação do apache ao tentar iniciar o mesmo alerta a seguinte mensagem:
Redirecting to /bin/systemctl start httpd.service
Após isso não consigo acessar por ip via console.
Oque devo fazer?
Opa, não vou conseguir ver agora, mas abre um tópico no JBug Brasil https://developer.jboss.org/groups/jbug-brasil
ResponderExcluirLá fica mais fácil de responder... e além de mim, tem uma galera lá q pode ajudar tmb! abraço!
Bom dia, Adriano!
ResponderExcluirvocê tem esses arquivos pra mim disponibilizar systemprops.war cluster-example.war, porque através dos links acima os arquivos não está mais dipsonivéis.
Grato
tenho sim... me manda e-mail no adriano@localhost8080.com.br
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirSeu artigo ficou muito bom. Praticamente uma receita de bolo. Foi o mais completo que achei. Parabéns! Ficaram faltando algumas coisas no meio da receita. Por exemplo, como o load balancer escuta o master pra fazer o balanceamento. Pra você deve ser tão automático que omitiu essa parte. Abraço!
ResponderExcluir