JBoss 7 ampliación dominio (nuevo servidor en máquina externa al controlador)

Esta entrada es la continuación de Instalación Dominio JBoss 7.

Partiendo de la base del anterior artículo, vamos a ampliar el dominio con un nuevo servidor en otra máquina aumentando la disponiblidad del servicio.

La nueva máquina se llamará clu02 (IP 192.168.128.221), se conectará a clu01 (Domain Controller (DC) en IP 192.168.128.220) y la estructura final será:

Pasos seguir:

1- (clu01) creamos usuario (el nombre tiene que coincidir con el nombre del host, en este caso host2):

Source   
[jboss@controller 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.
Realm (ManagementRealm) :
Username : host2
Password :
Re-enter Password :
About to add user 'host2' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'host2' to file '/vol/jboss-as-7.1.1.Final/standalone/configuration/mgmt-users.properties'
Added user 'host2' to file '/vol/jboss-as-7.1.1.Final/domain/configuration/mgmt-users.properties'

Usuario/password definido: host2/host2user

2- (clu01) Obtenemos versión encriptada en base 64 de password con la utilidad Base64Password:

Source   
[jboss@clu01 Base64EncryptPassword]$ ./Base64Password.sh host2user
=========================================================
Your  Clear Text Password is :     host2user
Base64 Encrypted Password is :     aG9zdDJ1c2Vy
=========================================================

3- (clu02) Editar el fichero:

Source   
<JBOSS_HOME>/domain/configuration/host.xml

Asignamos nombre al host (primeras lineas), asignamos host2 que es igual al usuario creado:

Source   
<host name="host2" xmlns="urn:jboss:domain:1.2">

Definimos password de usuario host2:

Source   
<security-realm name="ManagementRealm">
<authentication>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<server-identities>
<!-- Replace this with either a base64 password of your own, or use a vault with a vault expression -->
<secret value="aG9zdDJ1c2Vy"/>
</server-identities>
</security-realm>

Definimos donde está el domain controller:

Source   
<domain-controller>
<!-- <local/> -->
<!-- Alternative remote domain controller configuration with a host and port -->
<!-- <remote host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}"/> -->
<remote host="192.168.128.220" port="9999" security-realm="ManagementRealm"/>
</domain-controller>

Modificamos interfaces de escucha:

Source   
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:192.168.128.221}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:192.168.128.221}"/>
</interface>
<interface name="unsecure">
<!-- Used for IIOP sockets in the standard configuration.
To secure JacORB you need to setup SSL -->
<inet-address value="${jboss.bind.address.unsecure:192.168.128.221}"/>
</interface>
</interfaces>

Definimos el servidor:

Source   
<servers>
<server name="node3" group="ha-server-group" auto-start="true">
<!-- server-two avoids port conflicts by incrementing the ports in
the default socket-group declared in the server-group -->
<socket-bindings port-offset="100"/>
</server>
</servers>

4- (clu02) arrancamos:

Source   
<JBOSS_HOME>/bin/domain.sh

5- (clu01) en el log deberíamos ver algo del estilo:

Source   
[org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-13,null) ISPN000094: Received new cluster view: [host1-controller:node1/web|3] [host1-controller:node1/web, host1-controller:node2/web, host2:node3/web]

Indicando que se ha reconocido el nuevo servidor.

Todas las aplicaciones que estaban desplegadas en el grupo ahora deberían ser servidas por el nuevo servidor, por ejemplo:

http://192.168.128.221:8180/ClusterWebApp/

En esta situación solo nos queda poner un balanceador delante.

10 thoughts on “JBoss 7 ampliación dominio (nuevo servidor en máquina externa al controlador)

  1. Hola Juan carlos gran post. Pero me surge una duda, esto mantendría las sesiones con nodos detenidos?? No tengo muy claro que cuando este detenido el domain controller el clus2 sea capaz de mantener persistencia de sesión…..

    • Hola, no se si te he entendido bien. Por defecto la replicación es sobre todos los nodos del cluster, si paras cualquier nodo la sesión sigue existiendo. Si el domain controler es detenido, las sesiones siguen existiendo en el resto de los nodos.

  2. Hola, me gusto mucho, pero la duda quedo en cual balanceado poner en frente, si por IP o por puerto para el caso de un solo nodo, o ambos para realizar la combinación completa.

    • Hola:

      No me queda muy clara tu duda pero un ejemplo de balanceado con Apache usando el módulo mod_proxy_balancer es:

      ProxyTimeout 1000

      Header add Set-Cookie «ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/» env=BALANCER_ROUTE_CHANGED BalancerMember http://jboss1.test.es:8080 route=1 keepalive=on
      BalancerMember http://jboss2.test.es:8080 route=2 keepalive=on
      ProxySet stickysession=ROUTEID

      ProxyPass /helloworld balancer://mycluster/helloworld
      ProxyPreserveHost On

      Esta configuración balancea sobre 2 jboss (que usan el puerto 8080 los 2) la aplicación «helloworld».

  3. Hola Juan Carlos. Gracias por compartir estos post que son de gran ayuda y me gustaria saber si tienes algun post sobre configurar un apache como frontend de Jboss o si tendrias algun manual para hacer el balanceo con apache.

    Saludos !!!

  4. Saludos lo hice como dice y me gunciona bien menos en la parte del segundo host con el nodo 3 me da el erro MSC00001: Failed to start service jboss.host.controller.client: org.jboss.msc.service.StartException in service jboss.host.controller.client: java.lang.IllegalArgumentException: destination address may not be null , y el servidor no arranca

    • Deberías repasar las IPs que has configurado (siguiendo el ejemplo):
      remote host=»192.168.128.220″ port=»9999″ security-realm=»ManagementRealm»
      y
      inet-address value=»${jboss.bind.address.management:192.168.128.221}»

  5. Buenos días Carlos

    Lo primero gracias por el aporte, es un excelente tutorial.

    He seguido el manual a pie de la letra y todo me funciona pero no me mantiene la sesiones, he instalado la aplicación clusterjsp.war con el atributo distributable, ademas he configurado el mod_jk por delante de los dos servidores. Pero aun así no consigo que las sesiones se repliquen cada vez que actualizo me da una nueva sesión.

    Por favor, podrías ayudarme.

    Muchas gracias.

  6. Buenos días Carlos

    Siguiendo tu excelente tutorial tengo dos jbss en cluster, uno maestro y otro esclavo, pero tengo un problema no consigo que replique la sesiones. Tengo desplegada la aplicación clusterjsp.war configurada con distributate pero no consigo que me mantengan las sesiones.

    Por favor, me podría ayudar.

    Muchas gracias

Deja un comentario