Configurando Um Ambiente WildFly 8 Profissional – Parte 1

Postado em Atualizado em

Olá meus amigos,

A muito tempo eu não escrevo pois a vida anda muito corrida. Com o lançamento do WildFly 8 surgiram algumas novidades no nosso servidor de aplicação preferido 🙂  Java EE 7, Segurança baseada em RBCA, Novo servidor Web são algumas das novidades mas o objetivo aqui hoje é ser bem prático. Para conhecer as novas funcionalidades aconselho a leitura do link: http://wildfly.org/about/ .

Vou separar esse tutorial por partes para ficar melhor organizado.

O que vamos utilizar?

  • WildFly 8.0.0.Final
  • Oracle JDK 1.7.x
  • CentOS 6.5 ( 6 Servidores )
  • Postgres 9.x
  • Apache 2.2.x
  • RHQ 4.10.0

Para deixar bem claro a estrutura que vamos criar ou associar os softwares ao servidores:

  1. server-balancer1 –> CentOS 6.5, Apache 2.2.x
  2. server-balancer2 –> CentOS 6.5, Apache 2.2.x
  3. server-domain-widfly –> CentOS 6.5, WildFly 8.0.0.Final, Oracle JDK 1.7.x
  4. server-host1-widfly –> CentOS 6.5, WildFly 8.0.0.Final, Oracle JDK 1.7.x
  5. server-host2-widfly –> CentOS 6.5, WildFly 8.0.0.Final, Oracle JDK 1.7.x
  6. server-rhq –> CentOS 6.5, Oracle JDK 1.7.x,Postgres 9.x

Apenas por curiosidade para esse tutorial utilizei os servidores da Digital Ocean  pois os valores são bem em conta e meu ThinkPad  não suportaria virtualizar essa quantidade de máquinas.

Instalando JDK

Navegue até o site da Oracle  e realize o download do jdk-7u51-linux-x64.rpm:

Link: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html?ssSourceSiteId=otnpt

01-Blog

A instalação é bem simples. Utilizando o terminal execute os procedimentos abaixo nos servidores server-domain-widfly, server-host1-widfly, server-host2-widfly e server-rhq:

rpm -Uvh jdk-7u51-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

Para verificar se foi instalado corretamente execute: java -version

03-blog

Instalando WildFly 8

Faça o download do arquivo wildfly-8.0.0.Final.zip:

Link: http://download.jboss.org/wildfly/8.0.0.Final/wildfly-8.0.0.Final.zip

04-blog

A instalação do WildFly 8 é bem simples, basta descompactar. Claro que existem outras fatores envolvidores como boas práticas, script de serviço, criação de grupos entre outras coisas. Sendo assim execute os procedimentos abaixo nos servidores server-domain-widfly, server-host1-widfly, server-host2-widfly:

unzip wildfly-8.0.0.Final.zip -d /opt/
ln -s /opt/wildfly-8.0.0.Final /opt/wildfly
groupadd wildfly
useradd -s /bin/bash -d /home/wildfly -m -g wildfly wildfly
chown -R wildfly:wildfly /opt/wildfly-8.0.0.Final
chown -h wildfly:wildfly /opt/wildfly

Edite o arquivo /etc/sudoers e adicione a seguinte permissão para o usuário wildfly. Lembrando que a policita de sudoers pode variar conforme a politica de segurança de cada sysadmin. Nesse caso estou adicionando total permissão:

wildfly ALL=(ALL) NOPASSWD:ALL

Agore altere o password o usuário wildfly e realize o login. A partir desse momentos vamos utilziar a permissão de sudo para realizar qualquer tarefa que exija permissão administrativa:

passwd wildfly
su wildfly

O proximo passo é configurar o script de serviço. Felizmente o wildfly já nos fornece um exemplo. Execute os comandos abaixo:

sudo cp /opt/wildfly/bin/init.d/wildfly-init-redhat.sh /etc/init.d/wildfly
sudo chkconfig --add /etc/init.d/wildfly
sudo chkconfig --level 3 /etc/init.d/wildfly
sudo cp /opt/wildfly/bin/init.d/wildfly.conf /etc/default/

Realize o teste no script de serviço, execute:

sudo service wildfly start

O seguinte erro ocorrerá:

Starting wildfly: chown: missing operand after `/var/run/wildfly'
Try `chown --help' for more information.

Isso aconteceu por que o script /etc/wildfly utiliza um parâmetro chamado JBOSS_USER que está comentado no arquivo padrão em /etc/default/wildfly.conf. Edite-o e remova o comentário ( # ) da linha JBOSS_USER=wildfly, deixando essa linha configurada.

Execute novamente:

sudo service wildfly start

Observe o log /opt/wildfly/standalone/log/server.log. o WildFly foi iniciado corretamente:  WildFly 8.0.0.Final “WildFly” started in 10717ms

05-blog

Instalando Apache Web Server e Mod Cluster

Instalar o Apache Web Server no CentOS 6.5 é uma tarefa bem simples pois vamos utilizar o gerenciador de pacotes yum. Sendo assim execute os procedimentos abaixo nos servidores server-balancer1 e server-balancer2:

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

Vamos verificar se o Apache Web Server está funcionando. Execute:

service httpd start

Abra seu navegador preferido e digite o IP do servidor em que o Apache foi instalado. A seguinte página de sucesso será exibida:

06-blog

Durante a inicialização o erro abaixo foi exibido:

Starting httpd: httpd: apr_sockaddr_info_get() failed for server-balancer1
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Ou seja ele não conseguiu resolver o nome do servidor. Você pode adicionar o IP / Nome  do servidor em /etc/hosts ou editar o arquivo /etc/httpd/conf/httpd.conf e alterar o valor do parâmetro ServerName para localhost ( remova também o comentário ‘#’). Reinicie o Apache e perceba que o problema foi resolvido.

O proximo passo é realizar o download do Mod_Cluster. Para quem desconhece, o Mod_Cluster é um componente de balanceamento de carga inteligente desenvolvido pelo Red Hat. A configuração do Mod_Cluster é realizada em duas frentes: Apache Web Server e WildFly. Nessa parte vamos configurar a parte do Web Server.

Faça o download o Mod Cluster 1.2.6.Final.

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

07-blog

Descompacte e copie os módulos do Mod_Cluster para o diretório modules do Apache Web Server:

wget http://downloads.jboss.org/mod_cluster//1.2.6.Final/linux-x86_64/mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz
tar -zxvf mod_cluster-1.2.6.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_slotmem.so /etc/httpd/modules/

Agora edite o arquivo /etc/httpd/conf/httpd.conf e comente a linha LoadModule proxy_balancer_module modules/mod_proxy_balancer.so , para não ocorrer um conflito com mod_proxy_cluster.so:

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Em /etc/httpd/conf.d/ crie o arquivo mod_cluster.conf e adicione as configurações abaixo:

######################################################################################
#Configurações Adicionadas por Mauricio Magnani - mmagnani@redhat.com - 22/03/2014

LoadModule slotmem_module modules/mod_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>

O arquivo de configuração acima atende basicamente um ambiente onde estamos utilizando UNICAST.

Os  parâmetros  Maxcontext, Maxnode e Maxhost foram adicionados por segurança para que nós possamos ter mais contextos / aplicações disponiveis em nosso ambiente já que por padrão é limitado a 20.

Observe também os parâmetros AuthType, AuthName  e AuthUserFile, eles foram adicionados visando estabelecer o minimo de segurança para o painel mod_cluster_manager em que contextos podem ser habilitados e desabilitados além de fornecer outras métricas. É muito importante nunca deixar esse painel aberto. Sendo assim o passo final é criar o usuário “admin” e password para esse painel.

Execute:

htpasswd -c /etc/modclusterpassword admin

Reinicie o Apache Web Server a abra o contexto mod_cluster_manager utilizando o navegador e se tudo estiver correto a página abaixo será exibida:

08-blog

Lembrando que os procedimentos realizados nessa parte deverão ser feito nos Dois servidores pois nessa arquitetura serão utilizado Dois Apaches.

Instalando Postgresql e  RHQ Server

Estamos instalando o Postgresql para armazenar as tabelas e métricas dos nossos servidores WildFly atrávés do RHQ Server. Os procedimentos abaixo devem ser realizados no servidor server-rhq.

Link: http://yum.postgresql.org/9.2/redhat/rhel-6.5-x86_64/

rpm -Uvh http://yum.postgresql.org/9.2/redhat/rhel-6.5-x86_64/pgdg-redhat92-9.2-7.noarch.rpm
yum install postgresql92 postgresql92-server postgresql92-contrib -y
su - postgres -c /usr/pgsql-9.2/bin/initdb

Edite o arquivo /var/lib/pgsql/9.2/data/postgresql.conf e altere o parâmetro listen_addresses e port como abaixo:

# - Connection Settings -
listen_addresses = '162.243.172.56' # what IP address(es) to listen on;
port = 5432 # (change requires restart)

Edite também o arquivo /var/lib/pgsql/9.2/data/pg_hba.conf adicionando o parâmetro abaixo:

# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0 0.0.0.0 md5

Reinicie o Postgresql para validar as alterações:

service postgresql-9.2 restart

Agora realize o login e crie o usuário e database para armazenar as métricas:

su postgres
createdb rhq
psql rhq
CREATE ROLE rhq WITH SUPERUSER LOGIN PASSWORD 'rhq';

Faça um pequeno teste para garantir que o usuário jon realmente tem acesso ao db rhq:

psql -h 162.243.172.56 -U rhq rhq

Finalizamos assim a configuração do Postgresql. Um ajuste mais fino das configurações pode ser vista no link abaixo:

Link: https://access.redhat.com/site/documentation/en-US/Red_Hat_JBoss_Operations_Network/3.2/html/Installation_Guide/setting-up-dbs.html#setting-postgres-settings

O proximo passo é realizar a instalação do RHQ Server. O servidor de monitoramente RHQ Server ( JON – versão enterprise ) é muito mais que um servidor para monitorar instâncias JBoss / WildFly, é uma plataforma completa de monitoramente que engloda desde file system, interfaces de rede, até envio SNMP traps para outras plataformas.

Faça o download do RHQ Server rhq-server-4.10.0.zip.

Link: http://sourceforge.net/projects/rhq/files/rhq/rhq-4.10/rhq-server-4.10.0.zip/download

09-blog

Execute os procedimentos abaixo:

unzip rhq-server-4.10.0.zip -d /opt/
ln -s /opt/rhq-server-4.10.0 /opt/rhq
groupadd rhq
useradd -s /bin/bash -d /home/rhq -m -g rhq rhq
chown -R rhq:rhq /opt/rhq-server-4.10.0
chown -h rhq:rhq /opt/rhq

O RHQ Server 4.10 oferece um script chamado rhqctl que é a maneiro mais simples de realizar a configuração inicial da instalação. Execute:

./rhq/bin/rhqctl install

O seguinte erro ocorrerá:

There is no JVM available.
Please set RHQ_JAVA_HOME or RHQ_JAVA_EXE_FILE_PATH appropriately.

Devemos definir o valor da variável RHQ_JAVA_HOME. Apenas para realizarmos a instalação na linha de comando execute:

export RHQ_JAVA_HOME=/usr/java/latest

Execute novamente o script rhqctl e siga as instruçãoes como abaixo:

[root@server-rhq opt]# ./rhq/bin/rhqctl install
22:39:10,459 INFO [org.jboss.modules] JBoss Modules version 1.2.0.CR1
The [jboss.bind.address] property is required but not set in [rhq-server.properties].
Do you want to set [jboss.bind.address] value now?
yes|no: yes
jboss.bind.address: 0.0.0.0
Is [0.0.0.0] correct?
yes|no: yes

Um novo erro ocorreu. Edito o arquivo /etc/hosts e adicione a configuração com o IP / Hostname:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain
162.243.172.56 server-rhq

Para evitar mais problemas remova o arquivo /opt/rhq-data.

Edite também o arquivo /opt/rhq/bin/rhq-server.properties deixando a configuração da postgresql como abaixo:

# PostgreSQL database
rhq.server.database.connection-url=jdbc:postgresql://162.243.172.56:5432/rhq
rhq.server.database.user-name=rhq
rhq.server.database.password=34dd4e5bd20222b8
rhq.server.database.type-mapping=PostgreSQL
rhq.server.database.server-name=162.243.172.56
rhq.server.database.port=5432
rhq.server.database.db-name=rhq
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
rhq.server.quartz.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

O password pode deve ser encriptado utilizando o script /opt/rhq/bin/rhq-encode-password.sh.

[root@server-rhq opt]# ./rhq/bin/rhq-encode-password.sh
22:50:57,172 INFO [org.jboss.modules] JBoss Modules version 1.2.0.CR1
Password: rhq
22:51:01,240 INFO [org.rhq.enterprise.server.installer.Installer] *** Encoded password for rhq-server.properties:
22:51:01,241 INFO [org.rhq.enterprise.server.installer.Installer] *** rhq.server.database.password=34dd4e5bd20222b8
[root@server-rhq opt]# vim /opt/rhq/bin/rhq-server.properties

Execute novamente o script ./rhq/bin/rhqctl install e observe que o RHQ Server foi instalado corretamente:

[install] [echo] DONE! Agent version 4.10.0 (build number=fe32169) has been installed to /opt
22:59:37,854 INFO [org.rhq.server.control.command.Install] The agent installer finished running with exit value 0
22:59:37,854 INFO [org.rhq.server.control.command.Install] Configuring the RHQ agent with default configuration file: /opt/rhq-agent/conf/agent-configuration.xml
22:59:37,928 INFO [org.rhq.server.control.command.Install] Finished configuring the agent
Trying to stop the RHQ Server...
RHQ Server (pid=4188) is stopping..e

Crie o script de serviço para o RHQ Server:

cp /opt/rhq/bin/rhqctl /etc/init.d/rhq

Adicione a variável RHQ_SERVER_HOME:

RHQ_SERVER_HOME=/opt/rhq

No topo do arquivo /etc/init.d/rhq abaixo de #!/bin/sh adicione as seguintes linhas:

#chkconfig: 2345 95 20
#description: RHQ Server 4.10
#processname: standalone.sh

Abaixo de das linhas acima configure um usuário “non-root” para iniciar o processo que em nosso caso é o rhq:

su - rhq -c "/etc/init.d/rhq $*" &amp;

Salve o arquivo e execute os comandos abaixo para terminar a configuração do serviço:

chkconfig --add rhq
chkconfig rhq --list
chkconfig --level 5 rhq on

Edite o arquivo /etc/sudoers e adicione a seguinte permissão para o usuário rhq.

rhq ALL=(ALL) NOPASSWD:ALL

Agore altere o password o usuário rhq e realize o login. A partir desse momentos vamos utilziar a permissão de sudo para realizar qualquer tarefa que exija permissão administrativa:

passwd rhq
su rhq

Alter as permissões dos arquivos rhq:

sudo chown -R rhq:rhq /opt/rhq*

Inicie o serviço:

sudo service rhq start
Trying to start the RHQ Server...
RHQ Server (pid 6307 ) is starting
Starting RHQ Agent...
RHQ Agent (pid 6474 ) is ✔running

Abra seu navegador com a url: IP DO SERVIDOR:7080. Se conseguir ver a página abaixo é por que a instalação foi realizada com sucesso:

10-blog

Terminamos a parte de instalação dos nossos servidores. Na proxima parte vamos iniciar a configuração de todos esses softwares para que eles trabalhem em conjunto.

Um grande abraço

— Mauricio Magnani Jr

Obs: Se encontrarem erros de pt BR me avisem pois fiz meio que na madruga rs.

3 comentários em “Configurando Um Ambiente WildFly 8 Profissional – Parte 1

    Marcelo Daniel Sales disse:
    23 de março de 2014 às 11:46

    Caramba Mauricio. Parabéns cara. Seus artigos como sempre dignos de um capitulo de livro. Uma ou outra correção boba como você pediu mas que não diminui absolutamente em nada seu brilhante trabalho.

    Com exceção do balanceamento do Apache (vc pretende usar heartbit?) o ambiente que estou finalizando é bem similar, só que com EAP 6.2.

    Você tem visto o WildFly entrar no mercado em produção? Qual teu sentimento de segurança e estabilidade.

    Como você sabe algumas pessoas recorreram ao EAP 6 justamente pelas várias correções que ele tinha sobre o AS 7.1.1.

    Um grande abraço e que Deus continue te abençoando.

      Mauricio Magnani Jr respondido:
      23 de março de 2014 às 14:17

      Fala Mestre… suas sugestões são sempre bem vindas por aqui!

      Em relaação ao balanceamento de carga para o Apache estava pensando em utilizar o Red Hat Cluster Suite mas ainda não decidi… essa será a parte 3. Na parte 2 agora pretendo deixar toda a parte JBoss + Cluster + Balanceamento e Métricas do JON pronta.. e depois ir melhorando.

      Em relação ao WildFly em produção ainda acho um pouco cedo.. o ideal é esperar o primeiro release e então sim colocar em produção mas nada que possa impedir o desenvolvimento de aplicações para o Java EE 7 e quando sair o primeiro a release 8.1 colocar em prod.

      O WildFly parece ser bem estável e seguro mas por enquando ainda estou realizando alguns testes vamos aguardar rs

      Abraços

    […] Na primeira parte nós instalamos e criamos todos os ambientes que vamos utilizar em nossa arquitetura. Durante os ultimos anos sempre faço um desenho do ambiente que quero configurar antes de iniciar. Isso me ajuda a visualizar melhor o objetivo. Veja abaixo o desenho do ambiente inicial: […]

Deixe um comentário