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.

Deixe um comentário