Mostrando postagens com marcador wildfly. Mostrar todas as postagens
Mostrando postagens com marcador wildfly. Mostrar todas as postagens

terça-feira, 13 de setembro de 2016

Load balancer com WildFly 10

Esse passo a passo mostra como montar um ambiente com um Apache HTTP Server como loadbalancer e vários WildFly 10 atrás utilizando sempre o modo standalone.

Bom, trabalho com JBoss/WIldFly desde a versão 3 e já montei ambientes load balancer e cluster em mais de 20 ambientes... Esse mês montei novamente utilizando o WildFly 10 para um cliente que estou dando consultoria.

Antes de mais nada agradeço a todos do JBug Brasil. Sem a galera desse grupo eu não saberia nem iniciar o WildFly :) Entrem lá, recomendo!

O ambiente será assim:




Standalone ou domain?
Resolvi usar o modo standalone pois acredito que o modo domain adiciona um pouco mais de complexidade que não é necessária para ambientes com poucos servidores WildFly....

o domain serve apenas para centralizar as configurações em uma máquina só... caso queira fazer usando o modo domain, basta seguir esse tutorial e depois alterar para o modo domain....


Load balancer e/ou cluster

Aqui mostro apenas o como fazer um Load Balancer... não mostro como fazer um cluster... mas em muitos (talvez na maioria) dos ambientes, o cluster não é necessário....

O Load balancer serve para permitir escalabilidade... então atrás do Apache vai ter vários WildFly e você pode adicionar mais caso necessário (caso aumente o número de usuários por exemplo)

O Load balancer serve para redundância... se cair um WildFly, outro WildFly vai assumir....

"Tá Adriano, então pra que serve o cluster?"

O cluster serve para permitir o compartilhamento de dados de sessão.. por exemplo... no load balancer se vc estiver logado e de repente o WildFly cair, outro WildFly vai assumir, mas você voltará para a tela de login e terá q fazer login de novo... pois dados de sessão não são compartilhados no load balancer....

Para permitir que o usuário continue logado, você teria que ter um cluster...

Como os WildFly não vão cair o tempo inteiro... e se quando cair não for um problema tão grande o usuário ter q fazer login de novo... você não precisa de cluster....

Se você quiser fazer um cluster tudo bem.... não é muuuito dificil, é só seguir esse tutorial e depois alterar mais algumas coisinhas para implementar o cluster, mas não vou mostrar isso neste post...

Ahhh... E caso você esteja usando Amazon ou Digital Ocean... fazer um cluster vai ser um pouco mais difícil pois eles não permitem multicast (q é como as máquinas do cluster se comunicam) e você teria que fazer isso de outra forma... o q não é tããão simples...

Post passo-a-passo

Talvez (ou não) vc esteja se perguntando:
"Este passo-a-passo é completo e é só seguir que vai dar certo?"

Não! Esse passo-a-passo provavelmente não vai estar 100% claro e talvez falte algum detalhe... Foram anotações que fiz quando estava montando esse ambiente...

Não achei nenhum passo-a-passo mostrando como montar um load balancer com WildFly 10... por isso resolvi postar aqui mesmo que falte algum detalhe...

Até pq quando você for usar talvez vc use alguma versão diferente do que usei ou talvez seja diferente na sua infra ou no seu S.O.

Já montei load balancers e clusters em mais de 20 ambientes... e todas as vezes deu algum problema diferente...

"Tá Adriano, mas se não tá completo então esse post é inútil"

Acredito que é útil sim! talvez vc vai ter alguma dificuldade em algum ponto... aí vc abre um chamado no JBug Brasil e eu e outros caras que são bem legais vamos tentar te ajudar.


Vamos lá!


Você precisará de 3 máquinas:
- maq01: Apache HTTP Server
- maq02: WildFly Server1
- maq03: WildFly Server2

Sistema operacional
Sugiro o uso do sistema operacional RHEL (Red Hat Entrerprise Linux) ou CentOS (que é igual ao RHEL só que da comunidade).
Mas já implantei isso no Ubuntu também.
No Windows deve dar também... mas esse post vai ser todo focado em linux...


Em todas as máquinas faça esses passos:

- 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

Documentação complementar:
https://docs.jboss.org/mod_cluster/1.1.0/html/native.config.html
https://httpd.apache.org/docs/2.4/howto/access.html

Apache 2.2
Aqui vou falar como implantar com o Apache 2.2... mais pra baixo comento como é com o Apache 2.4

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

sudo service httpd start


- Acesse no browser de sua máquina e verifique se o Apache HTTP Server está no ar, só acessar pelo ip: http://<ip da maquina>

- Baixe o mod_cluster (sempre utilize a versão mais atual ao invés de usar o comando abaixo, procure em http://mod-cluster.jboss.org/)
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>



Apache 2.4
Essa semana instalei esse ambiente no Ubuntu e no Apache 2.4... teve algumas diferenças...

Para fazer isso (Apache 2.4 no Ubuntu) usei esse passo-a-passo:
https://symbiotics.co.za/configure-apache-with-mod_cluster-load-balancer-on-ubuntu/


Se acontecer o erro:

apache2: Syntax error on line 140 of /etc/apache2/apache2.conf:
Syntax error on line 3 of /etc/apache2/mods-enabled/proxy_cluster.load:
Cannot load /usr/lib/apache2/modules/mod_proxy_cluster.so into server:
/usr/lib/apache2/modules/mod_proxy_cluster.so: undefined symbol: ap_proxy_hashfunc



A solução é deixar o arquivo "proxy_cluster.load" dessa forma:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule cluster_slotmem_module /usr/lib/apache2/modules/mod_cluster_slotmem.so
LoadModule manager_module /usr/lib/apache2/modules/mod_manager.so
LoadModule advertise_module /usr/lib/apache2/modules/mod_advertise.so
LoadModule proxy_cluster_module /usr/lib/apache2/modules/mod_proxy_cluster.so


Além disso, aconteceu o erro:

[Thu Aug 25 18:01:33.049309 2016] [proxy:warn] [pid 5911:tid [...] [client 177.101.142.200:58291] AH01144: No protocol handler was valid for the URL /systemprops. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

Ali onde estou carregando os módulos então tive que adicionar a seguinte linha:

LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so

Mais detalhes em: https://developer.jboss.org/thread/272092. Agradeço ao Ingo e filippe.spolti do JBug Brasil pela ajuda nesse problema.


Além disso, deu o erro:

2016-08-23 19:38:20,417 ERROR [org.jboss.modcluster] (UndertowEventHandlerAdapter - 1) MODCLUSTER000042: Error null sending INFO command to ip-<IP INTERNO DO APACHE>.sa-east-1.compute.internal/<IP INTERNO DO APACHE>:80, configuration will be reset: null


A solução... meu conf do apache estava assim:

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

Mas na versão Apache 2.4 tem que ser assim:

<Directory />
    AllowOverride none
    Require all granted
</Directory>

Mais detalhes em: https://developer.jboss.org/thread/272023



- 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

- Instale e configure o Java (Sempre use a versão mais atual)

Aqui está um exemplo de como instalar (no caso Java 7, mas use o 8), mas pode fazer como achar melhor.
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 (Sempre baixe a versão mais atual):
Aqui está o 8, mas use o 10 ou superior:

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


- Inicie o WildFly rodando o standalone.sh da pasta bin passando como parâmetro o profile full-ha
./standalone.sh -server-config=standalone-full-ha.xml

- Veja no log se não deu erros
vi /opt/wildfly/standalone/log/server.log

- Pare o WildFly


- Adicione as linhas de JAVA_OPTS:
vi /opt/wildfly/bin/standalone.conf
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=<IP MAQUINA>"

Ao invés de IP da máquina você pode usar 0.0.0.0 que é mais genérico



- Configure o mod_cluster no WildFly:
- acesse o arquivo standalone-full-ha.xml
- procure o subsystem modcluster e altere o conteúdo dele para:

<mod-cluster-config advertise-socket="modcluster" proxies="apache1" advertise="false" sticky-session="true" load-balancing-group="arquitetura" connector="ajp">
   <dynamic-load-provider>
     <load-metric type="cpu"/>
   </dynamic-load-provider>
</mod-cluster-config>


-dentro do seu socket-binding-group, você deve colocar isso:

<outbound-socket-binding name="apache1">
<remote-destination host="<IP INTERNO DO APACHE>" port="80"/>
</outbound-socket-binding>

Mais sobre isso: https://developer.jboss.org/thread/272022


- Inicie o WildFly
./standalone.sh -server-config=standalone-full-ha.xml


- Faça deploy de uma aplicação de testes
- Faça o deploy da aplicação systemprops jogando o war na pasta deployments do WildFly: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/systemprops.war

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
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


Segurança
- Nunca inicie nada como root
- Não deixe acessível na web o servidor onde está o WildFly (configuração de infra). Resumindo, você não pode conseguir pingar o servidor onde está o WildFly, pois só o servidor do Apache deve estar disponível.
- Use SSL
- Permita o acesso ao mod cluster manager apenas na rede interna (melhor opção) ou apenas para um determinado IP. Algo como:
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from <seu_ip>
AuthType Basic
AuthName "MCM"
AuthUserFile /etc/modclusterpassword
Require user admin
</Location>

Mais sobre segurança em: https://developer.jboss.org/thread/258299


Perfomance
- Com Java 8 já vai aumentar muuuito a performance comparado com versões anteriores..
- o load balancer é bom para performance pois vai distribuir os acessos deixando tudo mais rápido...
- gzip compression no Apache é essencial
- Configure xms e xmx...
- faça testes de desempenho e utilize ferramentas de monitoramento: http://localhost8080.blogspot.com.br/2016/07/monitorar-ambiente-infra-e-jboss-wildfly.html
- Tuning: http://localhost8080.blogspot.com.br/2014/06/tunning-de-aplicacoes-java.html


Integração contínua
Use! :)


Consultoria:
Lembrando que se precisar dou consultorias nesse assunto e também em questões como performance, arquitetura, integração contínua, montagem de ambientes com load balancer e cluster, etc... Só entrar em contato: adriano@localhost8080.com.br


Abraço!
Adriano Schmidt

sexta-feira, 5 de agosto de 2016

Uma martelada

Oi :)

Ouvir seu cliente falando "obrigado, agora eu durmo tranquilo" não tem preço :D





Quando eu era pequeno ouvia uma história do cara que cobrou 10 mil reais e ficou um mês consertando um navio.... mas não resolveu o problema!


Depois veio outro cara e cobrou 100 mil pra ficar uma semana mas também não consertou o navio!


Por fim veio um cara e resolveu o problema com uma martelada e cobrou 1 milhão... logo reclamaram:

Como 1 milhão por uma martelada? O outro ficou um mês e cobrou 10 mil

E a resposta foi

Cobro 1 real pela martelada e 999.999 por saber onde dar a martelada

Quando o cliente me falou "cara, a gnt não ia achar o problema, estávamos culpando tudo menos isso" eu lembrei dessa história...

a diferença é que não cobrei 1 milhão hahahah

#consultoria #homeoffice

sábado, 16 de julho de 2016

Monitorar Ambiente/Infra e JBoss/WildFly

Segue uma lista de ferramentas e algumas observações para monitorar ambientes e também servidores de aplicação.

Já usei quase todas essas ferramentas e sempre estão surgindo novas. Fiz estas anotações rápidas para uma consultoria que dei e acredito que pode ser útil para outras pessoas.

Para monitorar o ambiente e JBoss/WildFly:

RHQ
- Para monitoar o JBoss/WildFly
- É da própria Red Hat
- Não é na nuvem, precisa de uma máquina pra ele
- É free
- Não é tão facil de instalar/configurar

Javamelody
- É free
- É fácil de instalar

Datadog
- Free até 5 hosts com 1 day retention
- $15 por host com 13 month retention

NewRelic
- $75USD/month per host


Para monitorar infra, máquinas e sistema operacional, pode-se usar umas dessas duas:
Nagios
Zabbix - Cada vez está sendo mais usado


Para centralizar logs de várias máquinas em um só lugar:

Logentries
- Send up to 5GB/month
- 7 day Retention

Log Stash
- Log stash is an open source tool for collecting, parsing, and storing logs for future use
- Kibana 3 is a web interface that can be used to search and view the logs that Logstash has indexed.
- Both of these tools are based on Elasticsearch.
- Elasticsearch, Logstash, and Kibana, when used together is known as an ELK stack.



Lembrando que se precisar dou consultorias nesse assunto e também em questões como performance, arquitetura, integração contínua, montagem de ambientes com load balancer e cluster, etc... Só entrar em contato: adriano@localhost8080.com.br


Agradeço ao Vinícius Fritzen que já utilizou várias destas ferramentas e me ajudou quando eu estava fazendo essa pesquisa.


Abraço!
Adriano Schmidt
adriano@localhost8080.com.br

sexta-feira, 9 de outubro de 2015

InfoQ - WildFly Avançado

Fala galera... esse ano palestrei no TDC Floripa sobre WildFly... mostrei um ambiente com cluster.. load balancer... entre outras coisas...

Essa semana o vídeo foi publicado na InfoQ, quem quiser dar uma olhadinha tá aí: www.infoq.com/br/presentations/wildfly-avancado




Obrigado a todos do JBug Brasil!!

Abraço!
Adriano Schmidt

domingo, 27 de setembro de 2015

JavaScript no ServerSide com WildFly 10

Fala galera... fiz uns exemplos aqui pra testar a nova funcionalidade do WildFly 10 que permite que a gente escreva código JavaScript no Server Side \o) Criei alguns RESTs, um deles inclusive acessa um banco de dados e retorna o JSON....

Segue abaixo o código (github) e o passo-a-passo pra rodar aí na sua máquina.

Pré-requisitos:
- Java 8 instalado;
- Maven instalado;

Siga esses passos:
- Baixar e descompactar o WildFly 10
- Ir na pasta bin do WildFly e rodar o standalone.bat (no Windows) ou standalone.sh (no linux)
- Baixar esse projeto do github: https://github.com/adrianoschmidt/wildfly-js
- Abrir a pasta do projeto e rodar um "mvn clean install"
- Copiar o war gerado na pasta target do projeto e colar no <WildFly>/standalone/deployments
- Acessar via browser as seguintes URLs:

http://localhost:8080/wildfly-js/hello




http://localhost:8080/wildfly-js/hello/json




https://localhost:8080/wildfly-js/rest/members




Nesse post tem mais detalhes: http://wildfly.org/news/2015/08/10/Javascript-Support-In-Wildfly/

Abraço!!
Adriano Schmidt

Testar acesso JMX no WildFly

Fala pessoal,

Fiz uma classe Java para se comunicar com o JMX Client de um WildFly...

O fonte está no meu github:
https://github.com/adrianoschmidt/wildfly-jmx-client

Você pode usar isso caso precise mesmo acessar um JMX ou caso queira testar se ele está aberto ou não, esse foi meu caso. Em ambientes de produção é sempre interessante que ele não esteja visível.

Para usar a classe é só rodar ela normalmente pela IDE ou por linha de comando.

Repare nessas duas linhas:
String host = "localhost";
// String host = "192.168.0.35";

Com localhost, ao rodar na máquina onde está o WildFly deveria funcionar, pelo IP não deveria funcionar, pois por segurança não deveria estar disponível para acesso externo.

Para bloquear o acesso você pode fazer isso na sua infraestrutura ou no WildFly no stanalone.xml na seção interfaces.

Qualquer dúvida é só avisar!
Adriano Schmidt

domingo, 17 de maio de 2015

Montando um cluster de WildFly em 5 minutos

Olá pessoal, segue meu tutorial para você montar um cluster de WildFly em 5 minutos.

Abaixo está o vídeo e o passo-a-passo detalhado.



Lembrando que como pré-requisito você precisa ter o JDK instalado na máquina (execute "java -version" para validar)

Vamos lá:

- Baixe o WildFly
- Descompacte o zip

- Entre em <Pasta do WildFly>/domain/configuration

- Abra o domain.xml e no final dele na dentro da tag <server-groups> adicione esse código:
 <server-group name="cluster-group" profile="ha">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="ha-sockets"/>
        </server-group>

- Abra o host.xml e dentro da tag <servers> no server-two edite o auto-start="true" para auto-start="false"
- Ainda no host.xml e dentro da tag <servers> adicione esses servers:
 <server name="cluste-one" group="cluster-group" auto-start="true">
            <socket-bindings port-offset="200"/>
        </server>
 <server name="cluste-two" group="cluster-group" auto-start="true">
            <socket-bindings port-offset="300"/>
        </server>

- Pelo terminal/cmd entre em: <Pasta do WildFly>/bin
- Se estiver no windows: Execute o add-user.bat
- Se estiver no linux/mac: Execute o add-user.sh

- Siga o passo-a-passo do add-user
1) aperte enter
2) digite wadmin
3) digite mortadela@1
4) digite mortadela@1
5) aperte enter
6) digite yes
7) digite no
8) aperte enter

- Se estiver no windows: Execute o domain.bat
- Se estiver no linux/mac: Execute o domain.sh

- Agora o ambiente está configurado, você subiu 3 JBoss na sua máquina. Teste pelo browser:
1) Master: http://localhost:8080
2) Slave1: http://localhost:8280
3) Slave2: http://localhost:8380

- Para testar se o cluster está funcionando:
1) Baixe o war: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/cluster-example.war
2) Entre via browser no console admin do WildFly master: http://localhost:9990/
3) Digite usuário wadmin e a senha mortadela@1
4) Acesse o menu Deployments
5) Clique em Add
6) Selecione o cluster-example.war
7) Clique em Next
8) Clique em Save
9) Clique em Assign
10) Selecione cluster-group
11) Clique em Save

- Teste a aplicação
1) Acesse via browser http://localhost:8280/cluster
2) Veja uma contagem acontecendo, esse valor está num EJB Stateful
3) Na mesma aba/janela do browser acesse a URL: http://localhost:8380/cluster
4) A contagem deve continuar, ou seja, o cluster está funcionando pois mesmo acessando em outro JBoss a informação da sessão foi replicada.

É isso aí pessoal, qualquer dúvida é só fazer um post no JBUG Brasil

Abraço!
Adriano Schmidt

sábado, 16 de maio de 2015

TDC Floripa - Palestra WildFly Avançado

Fala galera, ontem apresentei uma palestra sobre WildFly no TDC Floripa. Foi muito bacana, fiquei bem feliz com o resultado!

Assuntos abordados: Introdução; Novidades no WildFly 8; Por dentro; Apache HTTP Server; Cluster; Inimigos do cluster; Mãos na massa; Um pouquinho de tuning; WildFly 9; OpenShift;


O ambiente apresentado de load balancer e cluster está detalhado neste post: Como criar um Load Balancer e Cluster com WildFly 8

O ambiente de cluster local é mais simples e está esse post: Montando um cluster de WildFly em 5 minutos

Muito obrigado a todos do JBUG Brasil!

sexta-feira, 15 de maio de 2015

Como criar um Load Balancer e Cluster com WildFly 8

UPDATE: Fiz um novo tutorial para o WildFly 10: http://localhost8080.blogspot.com.br/2016/09/load-balancer-com-wildfly-10.html


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

sexta-feira, 16 de janeiro de 2015

Minha experiência com Openshift

Olá pessoal...

Hospedei uma aplicação minha no Openshift e tive algumas dificuldades que quero compartilhar com vocês.





No primeiro dia que fui usar a aplicação ela caia do nada e eu precisa dar um "rhc force stop" entre outras coisas para ela voltar a funcionar... Mas isso foi azar meu... pois exatamente neste dia, no dia que eu comecei a usar o Openshift estavam acontecendo alguns problemas de segurança no Openshift e deu problema para todos os usuários do mundo... a própria Red Hat abriu um chamado informando isso... mas nos dias seguintes não aconteceu mais nada sem explicação desse jeito.


O que eu percebia é que eu acessava minha aplicação e ela estava no ar... dois dias depois eu acessava novamente e ela estava fora do ar... acessava 5 minutos depois e ela estava no ar novamente. Isso acontece pois no plano free sua aplicação fica inativa (idle) após 24 horas sem acessos.
Agora eu acesso a aplicação todos os dias e isso evita que ela caia... No futuro penso em talvez fazer algum job que faz isso automaticamente pra mim (não sei se é ilegal fazer isso, mas caso meu cliente vá usar a aplicação ela deve estar no ar, caso contrário ele vai ficar chateado comigo)


O certo para não precisar fazer essa gambiarra de ter um job acessando todos os dias a aplicação seria migrar do plano free para o plano bronze ou silver.
Maaaas esse planos não estão disponíveis no Brasil, apenas em:
- North America (U.S. and Canada)
- Europe (EU member states, Iceland, Israel, Norway, Switzerland, and Russia)
Fonte: https://www.openshift.com/products/pricing#regional_availability

Quem quiser pode responder esse formulário pedindo para colocarem no Brasil também:
https://www.openshift.com/page/geo-request-form

Porém, conforme informado pela Red Hat em um chamado que abri, se você tiver um cartão de crédito com endereço de cobrança em um destes países acima poderá contratar os planos bronze ou silver.

Tive dificuldades para usar naked domain, ou seja, permitir que meu site fosse acessado por meudominio.com.br e não só por www.meudominio.com.br (veja que um tem o www e o outro não)
O problema é que no openshift eu não tenho um IP, então não consigo adicinar no meu provedor DNS um registro do tipo A, tem que ser do tipo CNAME, mas no provedor DNS do registro.br que é o que eu usava não é possível adicionar um CNAME sendo naked domain... Utilizando o www.cloudflare.com como DNS Provider deu certo, pois ele permite adicionar naked domaind para CNAME.

Mas agora minha aplicação está no ar, estou conseguindo fazer tudo que preciso (deploy, configurar domínio/DNS, configurações), por enquanto vou seguir usando o Openshift, está atendendo minhas necessidades, mas como o plano free é um pouco limitado, se minha aplicação chegar a ter muitos usuários vou ter que conseguir um cartão de crédito de algum amigo que mora no exterior ou terei que buscar outra alternativa.


Caso sua aplicação rode com JBoss ou Wildfly e você queira dar uma olhada em outras alternativas para hospedar sua aplicação você pode verificar na Amazon, Digital Ocean ou Integrator.


E você? Qual sua experiência com Openshift? Fique à vontade para deixar comentários sobre o openshift ou sugerir outros serviços de hospedagem ou alguma dúvida.


Abraço!!!
Adriano Schmidt

terça-feira, 17 de junho de 2014

Seminário JBoss/WildFly - Avançado

Nesse sábado (14/06/2014) aconteceu o primeiro Supero TechDay!

Estou muitíssimo feliz pelo evento! Todo mundo muito empolgado trocando conhecimentos e experiências.

Valeu muito à pena! Estou muito orgulhoso e feliz por trabalhar na Supero TI (www.supero.com.br) e muito satisfeito por estar numa equipe com tanta gente bacana!

Neste evento fiz uma apresentação onde explanei sobre o JBoss e sua mais nova versão o WildFly. Abordei a história, arquitetura, funcionamento e dicas sobre o JBoss/WildFly e mostrei em funcionamento um ambiente com um Apache HTTP Server como load balancer e proxy reverso com vários JBoss em cluster.



Não poderia deixar de agradecer ao JBUG Brasil e todos os seus membros, especialmente ao Maurício Magnani (https://jbossdivers.wordpress.com/), que me ajudaram muito a ter o conhecimento que tenho hoje sobre JBoss.