2.4 Agrupación en clúster

Cuando utilice la aplicación de usuario en un entorno de clúster, debe tener en cuenta tres cuestiones:

2.4.1 Agrupación en clúster de JBoss

Un clúster es un conjunto de nodos del servidor de aplicación que proporciona una serie de servicios. El objetivo de un clúster es aumentar el rendimiento y la fiabilidad de las aplicaciones. Por lo general, un clúster aporta tres ventajas clave a las aplicaciones de empresa:

  • Alta disponibilidad
  • Capacidad de ampliación (más capacidad)
  • Balance de la carga

Por alta disponibilidad se entiende que una aplicación es fiable y se puede disponer de ella durante la mayor parte del tiempo que está abierta. Los clústeres aportan una alta disponibilidad ya que la misma aplicación se ejecuta en todos los nodos. Si uno de los nodos falla, la aplicación podrá seguir ejecutándose en los otros nodos. Cuando la aplicación de usuario del Gestor de identidades se ejecuta en un clúster, se beneficia de una mayor disponibilidad. No obstante, no admite la réplica de sesiones HTTP. Esto significa que, si una sesión se está procesando en un nodo y dicho nodo falla, la información de la sesión se perderá.

Por balance de carga se entiende la práctica de distribuir la carga de trabajo entre los miembros de un clúster. Su objetivo es mejorar el rendimiento. El balance de carga se puede conseguir de diferentes maneras (por ejemplo, por carga rotativa de DNS o por balance de carga de hardware). Visite el sitio http://www.onjava.com/pub/a/onjava/2001/09/26/load.html para consultar un estudio de los diferentes métodos de balance de carga. Con independencia del método seleccionado, probablemente deseará incluir el balance de carga en su configuración de clúster.

Grupos de clústeres de JBoss

Los clústeres de JBoss se basan en un módulo de comunicaciones denominado JGroups. JGroups se instala con JBoss (también se puede utilizar sin JBoss). JGroups se encarga de las comunicaciones entre grupos que comparten un mismo nombre, una dirección de multidifusión y un puerto multidifusión.

Cuando se instala un servidor JBoss agrupado en clúster, JBoss define dos grupos JGroups diferentes para utilizarlos en la gestión del clúster. Uno de ellos se denomina DefaultPartition y está definido en /deploy/cluster-service.xml. JBoss utiliza este grupo de clústeres para proporcionar servicios de agrupación en clúster básicos. JBoss también define otro grupo de clústeres denominado Tomcat-Cluster. Este grupo de clústeres está definido en /deploy/tc-cluster-service.xml y proporciona réplicas de sesiones para el servidor Tomcat que se ejecuta dentro de JBoss.

La aplicación de usuario del Gestor de identidades utiliza un tercer grupo de clústeres. Dicho grupo de clústeres utiliza un nombre UUID para minimizar el peligro de conflictos con otros grupos de clústeres que los usuarios puedan añadir a sus servidores. Por defecto, el grupo de clústeres se denomina c373e901aba5e8ee9966444553544200. Este clúster no se configura utilizando un archivo de servicio de JBoss, sino que los valores de configuración se encuentran en el directorio y se pueden configurar utilizando las funciones de administración de la aplicación de usuario. Si está familiarizado con la agrupación en clúster de JGroups y JBoss, podrá ajustar la configuración de clúster de la aplicación de usuario utilizando esta interfaz. Los cambios de la configuración de clúster sólo entran en vigor en los nodos de servidor cuando dichos nodos se reinician.

El grupo de clústeres de la aplicación de usuario sólo se utiliza para coordinar los cachés de la aplicación de usuario en un entorno de clústeres. No depende de los dos grupos de clústeres de JBoss ni interactúa con ellos de ninguna manera. Por defecto, el grupo de clústeres de la aplicación de usuario y los dos grupos JBoss utilizan nombres de grupos, direcciones multidifusión y puertos multidifusión diferentes, para que no sea necesaria una reconfiguración.

Los valores del grupo de clústeres de la aplicación de usuario los comparte cualquier aplicación de Identity Manager 3 que comparte la configuración del directorio. El objetivo de la opción de valores locales en la interfaz de administración de la aplicación de usuario es permitir que el administrador elimine un nodo de un clúster o que cambie la pertenencia de los servidores de un clúster. Por ejemplo, la agrupación en clúster se puede inhabilitar globalmente y, a continuación, habilitarla localmente para un subconjunto de servidores que comparten la configuración del directorio.

Grupo de aplicaciones

JBoss permite realizar implantaciones activas en el clúster copiando una aplicación EAR, WAR o JAR en el directorio de grupo de una instancia de JBoss agrupada en clúster. La implantación activa en una máquina hace que el componente se implante automáticamente en todas las instancias contenidas en el clúster, mientras éste está ejecutándose.

No se recomienda este tipo de implantación de la aplicación con la versión de JBoss Application Server (4.0.2) que se incluía en el programa de instalación de la aplicación de usuario en el momento en que se escribió este documento, ya que sigue habiendo problemas sin solucionar relativos a su uso. No obstante, hemos descrito los pasos básicos que deben llevarse a cabo (consulte Implantación de la aplicación de usuario en un clúster utilizando el grupo de JBoss) para implantar correctamente la aplicación de usuario utilizando la tecnología de grupo de JBoss, ya que se esperan mejoras en esta tecnología tras la publicación de este documento.

Base de datos MySQL

El programa de instalación de la aplicación de usuario instala el gestor de la base de datos MySQL y crea una base de datos para utilizar en la aplicación de usuario, o bien utiliza una base de datos Oracle, Microsoft SQL Server o MySQL ya existente. La base de datos es la encargada de la consolidación de los datos. Todos los nodos del clúster de JBoss deben acceder a la misma instancia de la base de datos. La aplicación de usuario utiliza llamadas JDBC estándar para acceder a la base de datos y actualizarla. La aplicación de usuario utiliza un origen de datos JDBC asociado al árbol JNDI para abrir una conexión con la base de datos. Si crea el clúster de JBoss utilizando el programa de instalación de la aplicación de usuario, el sistema instalará el origen de los datos. Si elige configurar manualmente el clúster de JBoss, necesitará copiar los archivos de origen de datos (IDM-ds.xml) en el directorio de implantación de todos los nodos del clúster. Asimismo, si utiliza MySQL, deberá copiar el controlador JDBC de MySQL (mysql-connector-java-3.1.10-utf8-clob-fix-bin.jar), que se encuentra en el directorio JBoss /server/IDM/lib, en el directorio JBoss server/IDM/lib.

Registro

Para habilitar el registro de los clústeres, deberá editar el archivo de configuración log4j.xml, situado en el directorio \conf de la configuración del servidor de JBoss (por ejemplo, \server\IDM\conf) y eliminar el comentario de la sección situada en la parte inferior y que es parecida a la siguiente:

<!--  Clustering logging --> - <!-- Elimine lo siguiente para redirigir las categorías org.jgroups y org.jboss.a un archivo cluster.log. <appender name="CLUSTER" class="org.jboss.logging.appender.RollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.home.dir}/log cluster.log"/> <param name="Append" value="false"/> <param name="MaxFileSize" value="500KB"/> <param name="MaxBackupIndex" value="1"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> </layout> </appender> <category name="org.jgroups"> <priority value="DEBUG" /> <appender-ref ref="CLUSTER"/> </category> <category name="org.jboss.ha"> <priority value="DEBUG" /> <appender-ref ref="CLUSTER"/> </category> --> 

El archivo cluster.log se encuentra en el directorio log de la configuración del servidor de JBoss (por ejemplo, \server\IDM\log).

2.4.2 Instalación de la aplicación de usuario en un clúster de JBoss

El método recomendado de instalación de la aplicación de usuario consiste en utilizar el programa de instalación de la aplicación de usuario para instalarla en cada uno de los nodos del clúster. Si bien no recomendamos implantar la aplicación de usuario en un clúster mediante el grupo de JBoss, hemos incluido un procedimiento que se puede utilizar como método alternativo.

Utilización del programa de instalación de la aplicación de usuario en cada nodo del clúster

JBoss se entrega con tres configuraciones de servidor listas para utilizar: mínima, por defecto y completa. La agrupación en clúster sólo está habilitada en la configuración completa. El archivo cluster-service.xml, que se encuentra en la carpeta /deploy, describe la configuración de la partición de clúster por defecto. Cuando instale la aplicación de usuario e indique al programa de instalación que desea realizar la instalación en un clúster, dicho programa hará una copia de la configuración completa, la denominará IDM (por defecto, el programa de instalación permite cambiar el nombre) e instalará la aplicación de usuario en dicha configuración.

Para instalar la aplicación de usuario en todos los nodos de un clúster utilizando el programa de instalación de la aplicación de usuario:

  1. Efectúe una instalación completa de la aplicación de usuario (MySQL, JBoss y la aplicación de usuario) en el primer nodo de JBoss. Para obtener información acerca de cómo utilizar el programa de instalación de la aplicación, consulte la publicación Identity Manager 3 Installation Guide (Identity Manager 3: Guía de instalación).

    • Si utiliza MySQL como la base de datos de la aplicación de usuario, el programa de instalación de la aplicación de usuario creará una nueva instalación de MySQL. Anote la contraseña de usuario root de MySQL que especifique; necesitará esta información cuando instale la aplicación de usuario en los nodos restantes del clúster.
    • En la pantalla Configuración del Gestor de identidades del programa de instalación, seleccione la opción “agrupación en clúster (todos) ”.
    • Seleccione las opciones de instalación adecuadas para su entorno.
  2. Si MySQL todavía no está ejecutándose, inicie MySQL utilizando el archivo start-mysql.bat que se encuentra en el directorio /IDM/mysql.

    NOTA:En Linux, el comando shell siguiente será útil para determinar si el daemon de MySQL está ejecutándose:

    
    ps -A | grep mysqld
    

    Si este comando devuelve varias líneas que terminan por mysqld, el daemon está ejecutándose.

  3. Inicie JBoss y la aplicación de usuario utilizando el archivo start-jboss.bat (Windows) o start-jboss.sh (Linux), situado en el directorio IDM.

    Descripción: Descripción: Ilustración
  4. Efectúe una instalación personalizada de la aplicación de usuario en cada nodo adicional del clúster de JBoss.

    • Seleccione sólo la aplicación de usuario para la instalación:
    Descripción: Descripción: Ilustración
    • Especifique la dirección IP o el nombre de host del servidor en el que se instalará la base de datos de la aplicación de usuario.
    • Especifique el nombre de usuario y la contraseña de la base de datos de la aplicación de usuario. Si utiliza MySQL, el nombre de usuario es root y la contraseña será la que haya especificado durante el proceso de instalación en Paso 1.
    • En la pantalla Configuración del Gestor de identidades del programa de instalación, seleccione la opción “agrupación en clúster (todos)”.
    • Seleccione las opciones de instalación adecuadas para su entorno.
  5. Inicie cada uno de los nodos del clúster de JBoss utilizando el archivo start-jboss.bat (Windows) o start-jboss.sh (Linux), que se encuentra en el directorio IDM.

Implantación de la aplicación de usuario en un clúster utilizando el grupo de JBoss

No utilice el grupo de JBoss con JBoss versión 4.0.2 o anterior, ya que puede tener problemas (consulte http://jira.jboss.com/jira/browse/JBAS-1899). Recomendamos que instale la aplicación de usuario con el programa de instalación de dicha aplicación en todos los nodos del clúster (consulte Utilización del programa de instalación de la aplicación de usuario en cada nodo del clúster de este capítulo). No obstante, si desea utilizar el grupo para implantar la aplicación de usuario en un clúster de JBoss utilizando JBoss 4.0.3 o una versión superior, siga los pasos que indicamos a continuación.

NOTA:Estos pasos se indican para aquellos clientes que deseen utilizar JBoss 4.0.3 por su cuenta y riesgo, de forma experimental. La versión admitida oficialmente es la 4.0.2.

Para implantar la aplicación de usuario en un clúster utilizando el grupo de JBoss:

  1. Efectúe una instalación personalizada de la aplicación de usuario en uno de los nodos del clúster de JBoss, seleccionando la aplicación de usuario y MySQL (si utiliza MySQL; de lo contrario, instale sólo la aplicación de usuario) para la instalación. Puede realizar la instalación con todos los clústeres del nodo ejecutándose, aunque el nodo en el que instale la aplicación de usuario deberá ser el primer nodo del clúster en iniciarse.

  2. Copie el archivo del controlador JDBC (por ejemplo, si utiliza MySQL, el controlador JDBC es mysql-connector-java-3.1.10-utf8-clob-fix-bin.jar), que se encuentra en el directorio /server/IDM/lib, en el directorio correspondiente de cada nodo del clúster.

  3. Copie el archivo cacerts del directorio /lib/security de JRE que se instaló con la aplicación de usuario en el directorio JRE /lib//security de todos los nodos del clúster.

  4. Mueva el archivo IDM.war y el archivo de origen de datos IDM-ds.xml del directorio /deploy del directorio de configuración del servidor al directorio /farm del directorio de configuración del servidor. En realidad debe mover los archivos. No deje los originales en el directorio /deploy.

  5. Inicie la base de datos de la aplicación de usuario (si utiliza la base de datos MySQL suministrada, inicie MySQL utilizando el archivo start-mysql.bat situado en el directorio /IDM/mysql).

  6. Inicie JBoss y la aplicación de usuario utilizando el archivo start-jboss.bat (Windows) o start-jboss.sh (Linux), situado en el directorio IDM del nodo en el que ha instalado la aplicación de usuario y la base de datos de la aplicación de usuario.

  7. Inicie los nodos restantes del clúster.

2.4.3 Configuración del caché del grupo de clústeres de la aplicación de usuario

Los usuarios que están familiarizados con la agrupación en clúster de JGroups y JBoss pueden modificar la configuración del caché del grupo de clústeres mediante la interfaz de usuario de administración de la aplicación de usuario (consulte Sección 13.3.5, Valores de caché para los clústeres). Los cambios de la configuración de clúster sólo entran en vigor en los nodos de servidor cuando se reinicia el nodo del servidor.

2.4.4 Configuración de los flujos de trabajo para la agrupación en clúster

El funcionamiento de la agrupación en clúster del motor del flujo de trabajo es independiente de la estructura de caché de la aplicación de usuario. Debe ejecutar varios pasos para asegurarse de que el motor del flujo de trabajo funciona correctamente en un entorno de clúster.

  • Todos los servidores del clúster deben apuntar a la misma base de datos. Si instala la aplicación de usuario en el clúster utilizando el método recomendado (consulte Utilización del programa de instalación de la aplicación de usuario en cada nodo del clúster), esto se consigue especificando, durante el proceso de instalación, la dirección IP o el nombre de host del servidor en el que está instalada la base de datos de la aplicación de usuario. Si utiliza el grupo para implantar la aplicación de usuario en los nodos del clúster (consulte Implantación de la aplicación de usuario en un clúster utilizando el grupo de JBoss), esto se consigue moviendo el archivo de origen de datos (IDM-ds.xml) desde el directorio /deploy al directorio /farm en el nodo en el que se instaló por primera vez la aplicación de usuario. Esto hará que el origen de datos se implante en todos los nodos del clúster.
  • Cada servidor del clúster necesita iniciarse con un ID de motor exclusivo. Para ello, ajuste la propiedad del sistema com.novell.afw.wf.engine-id al iniciarse el servidor. Por ejemplo, si desea iniciar JBoss y asignar el ID de motor ENGINE1 al motor del flujo de trabajo de dicho servidor, utilice el comando siguiente:

    run.sh -Dcom.novell.afw.wf.engine-id=ENGINE1 (Linux)

    run.bat -Dcom.novell.afw.wf.engine-id=ENGINE1 (Windows)

Una instancia de proceso de flujo de trabajo, una vez iniciada por un motor del flujo de trabajo que se ejecuta en un servidor determinado, sólo se puede ejecutar y completar en dicho servidor. Esto permite asegurarse de que el proceso de flujo de trabajo se ejecute con seguridad. No obstante, no proporciona soporte para migración de recursos de la instancia de un proceso. Si un servidor del clúster se detiene, la instancia del proceso no se reiniciará hasta que un motor con el mismo ID se reinicie.

Si el equipo de un servidor no se puede reiniciar debido a un fallo grave del software o del hardware, puede iniciar el servidor de aplicación en otro equipo, utilizando el mismo ID del motor del flujo de trabajo utilizado en la máquina que no se puede recuperar. Dado que el ID del motor es un nombre lógico y no una asignación directa con el equipo físico en el que se ejecutaba el motor, la instancia del proceso interrumpido se completará correctamente en el equipo nuevo.

Las instancias de proceso son propiedad del motor que ha iniciado el proceso; no obstante, un usuario puede entrar en cualquier aplicación de usuario de un clúster para ver detalles del proceso, retraer procesos o completar tareas que se le han asignado. Los procesos retraídos o las tareas completadas en un motor que no es propietario del proceso entran en el estado de pendiente y la ejecución sólo se reanuda cuando son detectados por el motor que es su propietario.