Instalación Dominio JBoss 7 (varios servers en la misma máquina)

Aunque tengo bastante experiencia en servidores de aplicaciones (Weblogic sobretodo y Apache Tomcat), este es la primera entrada que voy a hacer sobre esto.

La versión 7 de JBoss podemos decir que es impresionante (http://www.jboss.org/jbossas), respecto a la versión 6. Todo está mucho más organizado y permite la creación de dominios y grupos de servidores donde desplegar/mantener de forma centralizada las aplicaciones.

En este caso vamos a montar un dominio en JBoss 7, preparado para alta disponiblidad y replicación de sesiones (más adelante configuraremos un balanceador para probar todo esto).

La documentación oficial se encuentra en:

https://docs.jboss.org/author/display/AS71/Documentation

Aunque la verdad es que no explica demasiado bien (o yo no he sabido comprenderla) como configurar un dominio.

Antes de comenzar algunos conceptos sobre los procesos implicados en un dominio:

  • Host Controller, este proceso se encarga de gestionar el dominio (en caso de ser la máquina controladora del dominio), o conectarse al controlador del dominio (resto de máquinas). Uno por máquina,
  • Process Controller, encargado de arrancar y parar procesos de servidor a petición del Host Controller. Uno por máquina.
  • Server:server_name, uno proceso por cada uno de los servidores arrancados en la máquina.

Vamos a configurar un dominio que se llamará «ha-server-group» con 2 servidores en la misma máquina con nombres: node1 y node2.

Gŕaficamente:

Para crear esto se ha usado CentOs 6 x32, aunque la instalación se puede hacer sobre cualquier sistema operativo.

Pasos a seguir (la IP de la máquina es 192.168.128.220):

1- Creamos entorno (usuario directorio, etc…):

Source   
[root@clu01 ~]# useradd -m jboss
[root@clu01 ~]# passwd jboss
Changing password for user jboss.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@clu01 ~]# mkdir /vol
[root@clu01 ~]# chown jboss: /vol/ -R
[root@clu01 ~]# su - jboss
[jboss@clu01 ~]$ cd /vol

2-Descargamos el software necesario en /vol:

Java JDK 7: http://www.oracle.com/technetwork/java/javase/downloads/jdk7u7-downloads-1836413.html

JBoss 7.1.1.final: http://www.jboss.org/jbossas/downloads

3- Descomprimimos y configuramos variables de entorno:

Source   
[jboss@clu01 vol]$ pwd
/vol
[jboss@clu01 vol]$ tar xfz jdk-7u7-linux-i586.tar.gz
[jboss@clu01 vol]$ tar xfz jboss-as-7.1.1.Final.tar.gz

Añadimos al .bash_profile:

Source   
export JAVA_HOME=/vol/jdk1.7.0_07
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin

4- Definimos grupo para el dominio, editamos el fichero (por JBOSS_HOME se entiende /vol/jboss-as-7.1.1.Final) :

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

Añadir el grupo (al final del archivo):

Source   
<server-groups>
<server-group name="ha-server-group" profile="ha">
<jvm name="default">
<heap size="64m" max-size="512m"/>
</jvm>
<socket-binding-group ref="ha-sockets"/>
</server-group>
</server-groups>

Si hay más grupos los eliminamos (que los habrá porque vienen preconfigurados), no los necesitamos para nada.

5- Definir el host, como domain controller, los servidores y los interfaces añadiéndolos en el grupo, editar el fichero:

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

Nombre host en (principio archivo):

Source   
<?xml version='1.0' encoding='UTF-8'?>
<host name="host1-controller" xmlns="urn:jboss:domain:1.2">

Definir como domain controller (esto es por defecto en la configuración pero mejor asegurar), tiene que buscar el domain controller en local:

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}"/> -->
</domain-controller>

Definir interfaces de escucha (la IP de la máquina si queremos acceder desde fuera de ella):

Source   
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:192.168.128.220}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:192.168.128.220}"/>
</interface>
<interface name="unsecure">
<inet-address value="${jboss.bind.address.unsecure:192.168.128.220}"/>
</interface>
</interfaces>

Creamos 2 servidores (node1 y node2 en el grupo ha-server-group):

Source   
<servers>
<server name="node1" group="ha-server-group" auto-start="true">
<socket-bindings port-offset="100"/>
</server>
<server name="node2" group="ha-server-group" auto-start="true">
<socket-bindings port-offset="200"/>
</server>
</servers>

Atención al detalle del parámetro port-offset, muy útil para desplazar todos los puertos de un servidor mediante un solo parámetro.

Eliminar el resto de los servidores porque son de ejemplo.

6- Creación de usuario/password de administración para acceder a la consola:

Source   
[jboss@clu01 bin]$ pwd
/vol/jboss-as-7.1.1.Final/bin
[jboss@clu01 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 : admin
Password :
Re-enter Password :
The username 'admin' is easy to guess
Are you sure you want to add user 'admin' yes/no? yes
About to add user 'admin' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'admin' to file '/vol/jboss-as-7.1.1.Final/standalone/configuration/mgmt-users.properties'
Added user 'admin' to file '/vol/jboss-as-7.1.1.Final/domain/configuration/mgmt-users.properties'

7- Arrancamos el dominio, que arrancará los 2 servidores al mismo tiempo:

Source   
[jboss@clu01 bin]$ pwd
/vol/jboss-as-7.1.1.Final/bin
[jboss@clu01 bin]$ ./domain.sh

Esto generará una salida donde podemos ver el estado del arranque, si cerramos la consola se cierra el servidor, habrá que crear un script de arranque si esto va a ponerse en producción.

8 – Accedemos a la consola (con el usuario y contraseña que hemos creado):

http://192.168.128.220:9990

En la consola ya deberíamos ver los dos servidores.

Y desplegamos la aplicación de ejemplo ClusterWebApp.

Ya podemos desplegar en el grupo creado la aplicación ClusterWebApp.war (botón «Add to groups»), y podemos testear que funciona, si accedemos a:

http://192.168.128.220:8180/ClusterWebApp/
http://192.168.128.220:8280/ClusterWebApp/

Con esto hemos terminado. En la siguiente entrada crearemos un nuevo nodo en una máquina adicional, gestionada por el mismo controlador de dominio.

20 thoughts on “Instalación Dominio JBoss 7 (varios servers en la misma máquina)

  1. Pingback: Ampliación Dominio JBoss 7 (nuevo servidor en máquina externa al controlador) « Administrando sistemas

    • Bueno lo que tenemos que hacer es instalar el driver como módulo.

      Si la instalación se ha hecho en $JBOSS_HOME, los pasos son:
      1-Crear los directorios:
      mkdir -p $JBOSS_HOME/modules/com/oracle/main
      2-Copiar el driver jdbc de Oracle en $JBOSS_HOME/modules/com/oracle/main, supongamos que usamos ojdbc6.jar (la última versión)
      3-Creamos un fichero de descriptor $JBOSS_HOME/modules/com/oracle/main/module.xml, con el contenido:

      Source    
      <?xml version="1.0" encoding="UTF-8"?>
      <module xmlns="urn:jboss:module:1.0" name="com.oracle">
          <resources>
              <resource-root path="ojdbc6.jar"/>
          </resources>
          <dependencies>
              <module name="javax.api"/>
              <module name="javax.transaction.api"/>
          </dependencies>
      </module>

      4-Reiniciamos JBoss
      5-Desde la consola de administración ya podemos crear un datasource Oracle, en el profile que queramos.

      Espero que te sea de utilidad.

  2. Muy bien explicado y gran aporte. Pero no he conseguido entender que configuración he de dar al nodo1 y al nodo2. Ya que siguiendo los pasos escrupulosamente, no me funciona.

    • Realmente la configuración es muy sencilla.

      Yo verificaría en el fichero $JBOSS_HOME/domain/configuration/domain.xml;

      1-La existencia del grupo:

      Source    
      <server-groups>
          <server-group name="ha-server-group" profile="ha">
              <jvm name="default">
                 <heap size="64m" max-size="512m"/>
              </jvm>
              <socket-binding-group ref="ha-sockets"/>
          </server-group>
      </server-groups>

      Y en el fichero $JBOSS_HOME/domain/configuration/host.xml:

      1-La entrada en host:

      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}"/> -->
      </domain-controller>

      2-La definición de interfaces:

      Source    
      <interfaces>
              <interface name="management">
                  <inet-address value="${jboss.bind.address.management:192.168.128.220}"/>
              </interface>
              <interface name="public">
                  <inet-address value="${jboss.bind.address:192.168.128.220}"/>
              </interface>
              <interface name="unsecure">
                  <inet-address value="${jboss.bind.address.unsecure:192.168.128.220}"/>
              </interface>
          </interfaces>

      Sustituyendo la IP por la de tu máquina.

      3-Creamos los servers

      Source    
      <servers>
            <server name="node1" group="ha-server-group" auto-start="true">
                  <socket-bindings port-offset="100"/>
              </server>
              <server name="node2" group="ha-server-group" auto-start="true">
                  <socket-bindings port-offset="200"/>
              </server>
      </servers>

      Luego queda el detalle de la creación del usuario y poco más.

      Si me das alguna pista más quizás pueda ayudarte.

      • Lo acabo de comprobar y esta todo correcto, el problema es que los nodos no se inician, cuando doy la orden de «Start» de alguno de los dos nodos, jboss responde «Your request timed out.»

        • Has visto más detalles en los logs?

          El log de cada uno de los nodos debería estar en:
          $JBOSS_HOME/domain/servers/node1/log
          $JBOSS_HOME/domain/servers/node2/log

          Y el del dominio en:
          $JBOSS_HOME/domain/log

          Seguro que se puede obtener más información, es posible que simplemente los puertos estén en uso.

  3. Hola juan, a mi también se me presenta la misma situación te anexo el mensaje que me genera el log.

    [usuario@localhost log]$ cat boot.log
    11:49:03,571 INFO [org.jboss.modules] (main) JBoss Modules version 1.1.1.GA
    11:49:04,930 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.2.GA
    11:49:05,194 INFO [org.jboss.as] (MSC service thread 1-4) JBAS015899: JBoss AS 7.1.1.Final «Brontes» starting
    11:49:25,523 INFO [org.xnio] (MSC service thread 1-1) XNIO Version 3.0.3.GA
    11:49:25,582 INFO [org.xnio.nio] (MSC service thread 1-1) XNIO NIO Implementation Version 3.0.3.GA
    11:49:25,631 INFO [org.jboss.remoting] (MSC service thread 1-1) JBoss Remoting version 3.2.3.GA
    11:49:42,434 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.host.controller.client: org.jboss.msc.service.StartException in service jboss.host.controller.client: java.net.ConnectException: JBAS012144: Could not connect to remote://192.168.0.118:9999. The connection timed out
    at org.jboss.as.server.mgmt.domain.HostControllerServerClient.start(HostControllerServerClient.java:161) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60]
    Caused by: java.net.ConnectException: JBAS012144: Could not connect to remote://192.168.0.118:9999. The connection timed out
    at org.jboss.as.protocol.ProtocolChannelClient.connectSync(ProtocolChannelClient.java:155) [jboss-as-protocol-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.server.mgmt.domain.HostControllerServerConnection.openChannel(HostControllerServerConnection.java:158) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.server.mgmt.domain.HostControllerServerConnection.connect(HostControllerServerConnection.java:86) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.server.mgmt.domain.HostControllerServerClient.start(HostControllerServerClient.java:135) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    … 5 more

    Si nos puedes ayudar te agradeceria

    • Parece que no puede conectar a 192.168.0.118:9999 (algo evidente :)), puedes hacer ifconfig y pasarme la configuración de los 2 nodos de JBoss a ver que puede estar ocurriendo?

  4. Buenos días.

    Me pueden decir por favor a que se debe este ERROR ?

    [jboss@centos bin]$ ./domain.sh

    [Host Controller] 11:34:46,014 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] 11:34:46,108 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015950: JBoss AS 7.1.1.Final «Brontes» stopped in 43ms
    11:34:46,445 INFO [org.jboss.as.process.Host Controller.status] (reaper for Host Controller) JBAS012010: Process ‘Host Controller’ finished with an exit status of 99
    11:34:46,453 INFO [org.jboss.as.process] (Thread-8) JBAS012016: Shutting down process controller
    11:34:46,454 INFO [org.jboss.as.process] (Thread-8) JBAS012015: All processes finished; exiting

    Gracias de antemano
    Saludos

    • Hola:

      La verdad es que no hay información suficiente en lo que has pegado, si adjuntas más lineas de log quizá podamos avanzar algo.

      Un saludo.

  5. Hola Juan y gracias por reponder…
    Sigo con el mismo problema
    [Host Controller] 20:27:00,310 FATAL [org.jboss.as.host.controller] (Controller Boot Thread) JBAS01 0933: Host Controller boot has failed in an unrecoverable manner; exiting. See previous messages fo r details.

    La arquitectura de mi servidor es

    CentOS7 64 bIT

    [jboss@centos8 vol]$ arch
    x86_64

    Los paquetes que descargue son estos

    -rw-r–r–. 1 jboss jboss 132775715 oct 26 23:36 jboss-as-7.1.1.Final.tar.gz
    -rw-r–r–. 1 jboss jboss 181260798 oct 26 23:34 jdk-8u65-linux-x64.gz

    Si gustas te puedo pasar los archivos de configuracion que se movio..?
    Saludos cordiales

  6. Maestro buenos días..
    Me puedes mandar tus archivos de configuración por favor de acuerdo a la conf del manual que indicas…?
    Quiero ver donde me esta faltando poner algo….
    Gracias de antemano…
    Saludos cordiales

  7. Hola.
    Tengo un jboss7 vulnerable a atques DDOS. Las conexiones vienen desde un frontal de forma que siempre es la misma IP origen.. ¿que puedo modificar para que no caiga el servicio frente a dos?

  8. Buenas tardes

    Me gustaría recibir vuestra ayuda, os expongo mi problema.

    Tengo dos servidores redhat cada uno de ellos tiene instalado wildfly 11, indicar que tengo los firewall y las iptables desactivadas ya que se trata de un entrono de pruebas. He configurado uno de los servidores como maestro y el otro como esclavo, el esclavo conecta correctamente con el maestro según veo en los logs.
    En el servidor maestro he configurado apache con mod_cluster para balancear la carga entre los dos servidores (Maestro y esclavo).

    He procedido a desplegar una aplicación concretamente clusterjsp, esta tiene la opción en en su código. Compruebo que el balanceo funciona perfectamente, lo único que no consigo es que me mantenga la sesión, por mas que he mirado por foros no consigo que la sesión se replique entre ambos servidores. Si paro un servidor wildfly apache me pasa al otro pero se pierde la sessión.

    Por favor, cualquier ayuda seria muy agradecida.

    Muchas gracias por todo

    Un saludo

Deja un comentario