Ambiente WildFly 8

Configurando Um Ambiente WildFly 8 Profissional – Parte 2

Postado em Atualizado em

Olá,

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:

11-blog

Essa arquitetura é realmente um clássico da plataforma JBoss. Digo isso pois a maioria dos ambientes que vejo utilizam essa arquitetura variando apenas as camadas de segurança.

O Clinte HTTP ( Navagador ) acessa ( Faz um request ) a URL que está balanceada entre dois Apaches onde o Mod_Cluster decide utilizando uma métrica inteligente qual WildFly deverá atender ( Response ) a request, simples assim.

Vamos ao que interessa!

Configurando o Domain Controller

Os procedimentos abaixo devem ser executados somente no servidor  server-domain-widfly. O primeiro passo é garantir que o WildFly realmente está sendo inicializado como domain. Edite o arquivo /etc/default/wildfly.conf removendo o comentário ( # ) e deixando as valores das variáveis como 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

Salve o arquivo. Realize o login com o usuário wildfly e reinicie o serviço:

 su wildfly
 sudo service wildfly restart

Observe o log em /var/log/wildfly/console.log e veja se realmente o processo host-controller foi iniciado:

[Host Controller] 18:03:38,805 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 127.0.0.1:9999
[Host Controller] 18:03:42,940 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
[Host Controller] 18:03:42,943 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
[Host Controller] 18:03:42,944 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.Final "WildFly" (Host Controller) started in 7691ms - Started 44 of 44 services (11 services are lazy, passive or on-demand)

O arquivo host-master.xml já preparado para ser “master” domain controller do nosso ambiente. Vamos apenas alterar o nome para que seja mais fácil identifica-lo. Edite o arquivo  /opt/wildfly/domain/configuration/host-master.xml e na linha:

 <host name="master" xmlns="urn:jboss:domain:2.0">

Altere para:

 <host name="server-domain-widfly" xmlns="urn:jboss:domain:2.0">

Agora edite o arquivo /opt/wildfly/bin/domain.conf e abaixo da linha:

 JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"

Adicione a seguinte configuração:

 JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=162.243.172.56"

Reinicie o wildfly e observe novamente o log em /var/log/wildfly/console.log:

 sudo service wildfly restart
 tailf /var/log/wildfly/console.log

Perceba que agora a interface de gerenciamento está “Listening” em 192.241.138.146:9999:

[Host Controller] 18:22:36,839 INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on 162.243.172.56:9999
[Host Controller] 18:22:40,178 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://162.243.172.56:9990/management
[Host Controller] 18:22:40,181 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://162.243.172.56:9990
[Host Controller] 18:22:40,182 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.Final "WildFly" (Host Controller) started in 6104ms - Started 44 of 44 services (11 services are lazy, passive or on-demand)

Um passo muito importante ao configurar um ambiente WildFly é escolher quais tecnologias serão utilizadas. O WildFly 8 possui 4 profiles por padrão: “default”, “full”, “ha”, “full-ha” , mas nada impede de nós copiarmos qualquer um deles e renomeá-los conforme nossos requisitos. No Java EE 6 ( Agora Java EE 7 ) foi introduzido o conceito de Profiles, onde pode-se criar um subconjunto de tecnologias presentes na spec Java EE ou até mesmo adicionar novas definidas pela JCP (Java Community Process).

Nesse tutorial vamos utilizar o full-ha pois no futuro vamos configurar um Cluster.( ha = high availability e full = teóricamente todas as tecnologias Java EE 7 + implementações da Red Hat).

Pare o WildFly:

 sudo service wildfly stop

Edite o arquivo /opt/wildfly/domain/configuration/domain.xml e busque pela tag  <profile name=”full-ha”> e altere para:

 <profile name="arquitetura-full-ha">

Depois de definir o profile o próximo é criar um Grupo de Servidores: Server Group. Um server group nada mais é que um agrupamento de instâncias WildFly. Nessa arquitetura vamos utilizar dois server group. Isso pode ser definido na tag <server-groups> no domain.xml do master (Domain Controller). Ainda no arquivo  /opt/wildfly/domain/configuration/domain.xml remova a tag <server-groups> com seu conteúdo. Insira a configuração abaixo:

<server-groups>
  <server-group name="arquitetura-grupo-1" profile="arquitetura-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-group name="arquitetura-grupo-2" profile="arquitetura-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>

Reinicie o WildFly e verifique se a configuração deu mesmo certo! Para isso basta verificar se o não existem erros no log em  /var/log/wildfly/console.log:

[Host Controller] 18:55:59,776 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 162.243.172.56:9999
[Host Controller] 18:56:03,057 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://162.243.172.56:9990/management
[Host Controller] 18:56:03,060 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://162.243.172.56:9990
[Host Controller] 18:56:03,061 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.Final "WildFly" (Host Controller) started in 6146ms - Started 44 of 44 services (11 services are lazy, passive or on-demand)

Um detalhe sobre a configuração do Server Group é a tag <socket-binding-group ref=”full-ha-sockets”/>, ele deve ser associado ao tipo de profile escolhido ou seja.. se escolher o profile ha, você deverá utilizar o socket-binding ha-sockets.

Crie um usuário para administrar o WildFly ( jbossdivers ) e o usuário que será utilizado no canal de comunicação entre o Domain Controller e Host Controller (jbossdivershost). Execute o script /opt/wildfly/bin/add-user.sh e siga as instruções como abaixo:

Obs: Vou utilizar o password “Wildfly*#2

[wildfly@server-domain-widfly opt]$ sh /opt/wildfly/bin/add-user.sh

What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a): a

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : jbossdivers
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
 - The password should not be one of the following restricted values {root, admin, administrator}
 - The password should contain at least 8 characters, 1 alphanumeric character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
 - The password should be different from the username
Password :
Re-enter Password :
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
About to add user 'jbossdivers' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'jbossdivers' to file '/opt/wildfly-8.0.0.Final/standalone/configuration/mgmt-users.properties'
Added user 'jbossdivers' to file '/opt/wildfly-8.0.0.Final/domain/configuration/mgmt-users.properties'
Added user 'jbossdivers' with groups to file '/opt/wildfly-8.0.0.Final/standalone/configuration/mgmt-groups.properties'
Added user 'jbossdivers' with groups to file '/opt/wildfly-8.0.0.Final/domain/configuration/mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? no

 

[wildfly@server-domain-widfly opt]$ sh /opt/wildfly/bin/add-user.sh

What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a): a

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : jbossdivershost
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
 - The password should not be one of the following restricted values {root, admin, administrator}
 - The password should contain at least 8 characters, 1 alphanumeric character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
 - The password should be different from the username
Password :
Re-enter Password :
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
About to add user 'jbossdivershost' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'jbossdivershost' to file '/opt/wildfly-8.0.0.Final/standalone/configuration/mgmt-users.properties'
Added user 'jbossdivershost' to file '/opt/wildfly-8.0.0.Final/domain/configuration/mgmt-users.properties'
Added user 'jbossdivershost' with groups to file '/opt/wildfly-8.0.0.Final/standalone/configuration/mgmt-groups.properties'
Added user 'jbossdivershost' with groups to file '/opt/wildfly-8.0.0.Final/domain/configuration/mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition <secret value="V2lsZGZseSojMg==" />

No processo de criação do usuário jbossdivershost foi gerado um password com a tag <secret value=”V2lsZGZseSojMg==” />. Guarde pois utilizaremos essa tag na configurações dos Host Controllers.

Para finalizar por enquanto a configuração do Domain Controller, abra o navegador  com a url: http://162.243.172.56:9990. A página de login será exibida e após a validação do usuário jbossdivers o painel de controle será exibido:

12-blog

Configurando Os Hosts Controllers

Os procedimentos abaixo devem ser executados somente no servidor  server-host1-widfly e server-host2-widfly. O primeiro passo é garantir que o WildFly realmente está sendo inicializado como domain. Edite o arquivo /etc/default/wildfly.conf removendo o comentário ( # ) e deixando as valores das variáveis como abaixo:

 JBOSS_MODE=domain
 JBOSS_HOST_CONFIG=host-slave.xml
 STARTUP_WAIT=30
 SHUTDOWN_WAIT=30
 JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log
 JBOSS_USER=wildfly

Salve o arquivo. Realize o login com o usuário wildfly e reinicie o serviço:

su wildfly
sudo service wildfly restart

Observe o log em /var/log/wildfly/console.log e veja se realmente o processo host-controller foi iniciado:

[Host Controller] 20:26:22,325 INFO [org.jboss.as] (MSC service thread 1-1) JBAS015899: WildFly 8.0.0.Final "WildFly" starting
[Host Controller] 20:26:23,226 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("write-remote-domain-controller") failed - address: ([("host" => "unknown-host.unknown-domain")]) - failure description: "JBAS014802: Cannot resolve expression 'expression \"${jboss.domain.master.address}\"' -- java.lang.IllegalStateException: Failed to resolve expression: ${jboss.domain.master.address}"
[Host Controller] 20:26:23,230 FATAL [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010933: Host Controller boot has failed in an unrecoverable manner; exiting. See previous messages for details.
[Host Controller] 20:26:23,252 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015950: WildFly 8.0.0.Final "WildFly" stopped in 8ms
[Host Controller]
20:26:23,574 INFO [org.jboss.as.process.Host Controller.status] (reaper for Host Controller) JBAS012010: Process 'Host Controller' finished with an exit status of 99
20:26:23,576 INFO [org.jboss.as.process] (Thread-8) JBAS012016: Shutting down process controller
20:26:23,577 INFO [org.jboss.as.process] (Thread-8) JBAS012015: All processes finished; exiting
1598 [ OK ]

Perceba que o Host Controller não conseguiu resolver o endereço do Domain Controller (jboss.domain.master.address).

Para resolver esse problema edite o arquivo  /opt/wildfly/bin/domain.conf e abaixo da linha:

 JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"

Adicione a seguinte configuração:

 JAVA_OPTS="$JAVA_OPTS -Djboss.domain.master.address=162.243.172.56"
 JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=162.243.172.52"

Reinicie o wildfly e observe novamente o log em /var/log/wildfly/console.log:

 sudo service wildfly restart
 tailf /var/log/wildfly/console.log

Um novo erro foi apresentado. A autenticação falhou por que nós ainda não configuramos essa parte:

[Host Controller] 22:05:30,678 ERROR [org.jboss.remoting.remote.connection] (Remoting "unknown-host.unknown-domain:MANAGEMENT" I/O-1) JBREM000200: Remote connection failed: javax.security.sasl.SaslException: Authentication failed: the server presented no authentication mechanisms
[Host Controller] 22:05:30,688 WARN [org.jboss.as.host.controller] (Controller Boot Thread) JBAS016535: Could not connect to master. No domain controller discovery options left. Error was: java.lang.IllegalStateException: JBAS010942: Unable to connect due to authentication failure.
[Host Controller] 22:05:30,690 ERROR [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010901: Could not connect to master. Aborting. Error was: java.lang.IllegalStateException: JBAS016519: Tried all domain controller discovery option(s) but unable to connect
[Host Controller] 22:05:30,729 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015950: WildFly 8.0.0.Final "WildFly" stopped in 26ms
[Host Controller]
22:05:31,053 INFO [org.jboss.as.process.Host Controller.status] (reaper for Host Controller) JBAS012010: Process 'Host Controller' finished with an exit status of 99
22:05:31,054 INFO [org.jboss.as.process] (Thread-8) JBAS012016: Shutting down process controller
22:05:31,055 INFO [org.jboss.as.process] (Thread-8) JBAS012015: All processes finished; exiting

Edite o arquivo /opt/wildfly/domain/configuration/host-slave.xml substitua a tag <secret value=”c2xhdmVfdXNlcl9wYXNzd29yZA==”/> pela tag <secret value=”V2lsZGZseSojMg==” /> gerada anteriormente na criação do usuário jbossdivershost.

 <server-identities>
    <!-- Replace this with either a base64 password of your own, or use a vault with a vault expression -->
    <secret value="V2lsZGZseSojMg==" />
 </server-identities>

Edite também o a tag  <remote  …/> e adicione o usuário jbossdivershost:

 <domain-controller>
    <remote host="${jboss.domain.master.address}" username="jbossdivershost" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
 </domain-controller>

Crie as instâncias arquitetura-1 e arquitetura-2. Deixe a tag  <servers> como abaixo:

 <servers>

    <server name="arquitetura-1" group="arquitetura-grupo-1"/>

    <server name="arquitetura-2" group="arquitetura-grupo-2">
       <socket-bindings port-offset="100"/>
    </server>

 </servers>

Adicione também o nome do Host Controller como abaixo:

  <host name="server-host1-widfly"  xmlns="urn:jboss:domain:2.0">

Finalmente as configurações estão finalizadas. Reinicie o wildfly.

 sudo service wildfly restart

Observe novamente o log no servidor server-domain-widfly e veja o server-host1-widfly se conectando:

[Host Controller] 22:32:38,672 INFO  [org.jboss.as.domain] (slave-request-threads - 1) JBAS010918: Registered remote slave host "server-host1-widfly", WildFly 8.0.0.Final "WildFly"

Abra novamente o navegador com a url: http://162.243.172.56:9990. A página de login será exibida e após a validação do usuário jbossdivers o painel de controle será exibido com a estrutura atual dos Hosts e Intâncias:

13-blog

 

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="162.243.172.53:80,192.241.138.146: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 dois Balancers / Apache Web Servers. Acesse o mod cluster manager para visualizar as instancias conectadas nos Balancers.

server-balancer1

15-blog

server-balancer2

14-blog

Apenas para garantirmos o funcionamente dos nossos Balancers. Faça o deploy da aplicação SystemProps no WildFly para o Server Group arquitetura-1.

No Console Web do Wildfly navegue até Manage Deployments e realize o deploy como abaixo:

16-blog

17-blog

18-blog

19-blog

20-blog

21-blog

 

Observe novamente o Mod Cluster Manager  nos Balancers e perceba que a aplicação já está publica e habilitada para acesso:

22-blog

 

 

 

Acesse a aplicação utilizando alguns dos Balancers. A aplicação exibirá algumas informações como abaixo:

24-blog

 

Finalizamos assim a configuração inicial do ambiente. Nas proximas partes vamos instalar os agentes de monitoramento para o RHQ Server e configurar o Cluster no Wildfly. Vamos também criar a infra-estrtura para alta disponibilidade do Apache Web Server.

Abraços e até a proxima.

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.