SafeChildren Banner

Havoc Oracle Solaris Experts
Mostrando entradas con la etiqueta activemq. Mostrar todas las entradas
Mostrando entradas con la etiqueta activemq. Mostrar todas las entradas

jueves, 16 de septiembre de 2010

Problemas ActiveMQ 5.4 en Solaris 10

Introducción
Mientras hablábamos de Cómo Instalar Apache ActiveMQ 5.x en Solaris 10, desde Apache han liberado una nueva versión, la 5.4. En esta han introducido algunos cambios, principalmente en los scripts de arranque. Esto hace que las definiciones de los method para ActiveMQ que habíamos creado, ya no funcionen correctamente.

Nuevo formato Script ActiveMQ
El nuevo formato de script acepta más parámetros, y ahora podemos utilizar para iniciar, detener, verificar mensajes, eliminar mensajes, entre otros

El formato es el siguiente
$ACTIVEMQ_HOME/bin/activemq [tarea] [opciones-tarea] [datos-tarea]
Y las tareas disponibles son las siguientes:
  •     start. Crea he inicia el broker
  •     create. Crea una instancia en el path especificado
  •     stop. Detiene el broker
  •     list. Muestra los brokes que hay disponibles
  •     query. Consulta una propiedad de un broker
  •     browse. Muestra los mensajes de un broker
  •     journal-audit. Muestra los mensaje almacenados en el storage area
  •     purge. Borra los destinos seleccionados
Problemas con el script y nuestro method
El principal problema de nuestro method para ActiveMQ 5.3.x viene por el nuevo formato, que ahora es necesario introducir un nuevo parámetro <task>, como hemos visto antes, que nos permitirá realizar diferentes acciones.

Cuando diseñe el method, el script <activemq> no tenía estos parámetros, y por lo tanto, no funcionaba. Para ello, he creado una nueva versión de Solaris SMF Method para ActiveMQ 5.4.x que, simplemente modifica los parámetros de inicio. Así mismo, el manifest para ActiveMQ 5.4 también lo he modificado para que pueda adaptarse a estas nuevas funcionalidades.

Para evitar, tener problemas con mi instalación de ActiveMQ 5.3.x, hemos definido un nuevo ACTIVEMQ_HOME para la instalación ActiveMQ 5.4 que corresponde a </opt/www/activemq5.4> pero puedes asignar la que quieras.

Aplicar el parche de <$ACTIVEMQ/bin/activemq>
He creado un pequeño parche que soluciona los problemas para poder ejecutarlo dentro de nuestra instalación de Solaris.

Básicamente, el problema viene por el uso del comando <whoami> que, como recordáis durante la Instalación de Hadoop en Solaris 10, también nos sucedía, y por el uso de la opción <-q> -quiet- del comando <grep> que en SRV no está definida.
 
Para aplicarlo, simplemente deberemos descargarnos el parche para Solaris 10 de ActiveMQ 5.4 y ejecutar el comando <patch> de la siguiente forma:
# cd $ACTIVEMQ_HOME
# cd bin
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/activemq/5.4/activemq.patch
# patch activemq-test < activemq.patch
  Parece un diff normal.
terminado
Para aquellos que no os apetezca parchear os he dejado una versión Parcheada para Solaris 10 del script que simplemente deberéis remplazar la que viene con la distribución de Apache por esta.

Conclusiones
A veces, los cambios pueden ocasionarnos problemas, por eso, es muy recomendable utilizar un entorno de pruebas donde hagamos todos los cambios, y una vez validados, poderlos pasar a producción.

Además, como no son muy complejos, podemos continuar con nuestra serie de Instalación y Configuración de ActiveMQ 5.x en Solaris 10

Referencias

martes, 31 de agosto de 2010

Instalar ActiveMQ 5 en Solaris 10 - Parte 2

Introducción
En la primera parte de Instalar ActiveMQ en Solaris, vimos como realizar una instalación por defecto sin mayores complicaciones, sin embargo, en esta ocasión veremos como podemos configurar nuestro ActiveMQ para iniciarlo utilizando un sistema de configuración personalizada.

Además, haremos un pequeño repaso a las opciones más importantes y hablaremos de algunos temas de funcionamiento de JMS, como por ejemplo persistencia.

Configuración ActiveMQ
La configuración de ActiveMQ se puede realizar de varias formas, aunque la más customizable es la que utiliza un archivo xml para ello. El formato de ejecución de ActiveMQ es el siguiente:
$ACTIVEMQ_HOME/bin/activemq {opciones} {config_file}
Si no asignamos ningún valor a config_file ActiveMQ utilizará la configuración por defecto -como hemos utilizado en la primera parte- donde nos crean diferentes transportes y activa la consola de administración

Los TransportConnector
Un transportConnector es la definición del servicio donde queremos que nuestro ActiveMQ escuche, es decir, las uri en los cuales hará binding. Su formato es el siguiente:
<transportconnector name="_nombre_" uri="_protocolo_://_hostname_:_port_" />
Existen diferentes tipos de transportConnector, aunque hoy sólo vamos a hablar de dos tipos TCP y NIO podéis encontrar toda la información en Apache ActiveMQ Transport Connectors.

Nos hemos centrado en estos dos tipos, puesto que son sencillos y nos permiten ver la forma de configuración y algún tipo de optimización al utilizar NIO -recordar que hablábamos de Java NIO en Cómo activar Java NIO en Tomcat 6-

La diferencia principal entre tcp y nio reside en que el formato tcp es bloqueante single thread y que nio es no bloqueante multi threard. Cuando hablamos de bloqueante y no bloqueante hacemos referencia a las peticiones -y a su proceso de dispatcher- que en el caso de utilizar tcp procesará cada petición una detrás de la otra.

Esto supone una penalización cuando utilizamos aplicativos web ya que si una petición se cuelga las demás esperarán hasta que se produzca un TimeOut -o se cancele-, para evitar esto utilizaremos el formato nio que, si una petición -mensaje- se cuelga el dispatcher continuará ejecutando las demás.

Todo esto es una forma resumida de explicar el funcionamiento de ActiveMQ, aunque debemos saber que también depende de si tenemos persistencia o no en nuestro sistema de mensajes. Tienes más información sobre persistencia en la página oficial de ActiveMQ Persistence

Qué es eso de Persistencia
En el universo JMS existen opciones para tratar a los mensajes de forma transaccional -al igual que en una base de datos- y por lo tanto, estos mensajes han de ser salvados a disco de forma atómica. Esto supone que si un mensaje JMS con la opción de persistencia activa se almacenará en un lugar hasta que el cliente -o clientes- han devuelto un ack informándo que lo han procesado correctamente.

Además, esto nos permite que ante una caída de nuestro servidor JMS, los mensajes que no se habían enviado, se vuelvan a enviar a aquellos clientes que no los han obtenido.

Toda esta lógica de control es configurable a nivel de cliente pero en el servidor debemos dotar de los mecanismos para que el cliente los pueda utilizar, me explico. Si nosotros no facilitamos soporte de persistencia, aunque nuestro cliente lo configure no funcionará.

Hay que diferenciar la persistencia de la operatividad del servidor, es decir, mientras esté activo utilizará memoria RAM para procesar y almacenar los mensajes, pero si se cae no sabrá dónde estaba y por lo tanto no volverá a reenviar los mensajes pendientes a menos que tengamos el soporte de persistencia activo

Rendimiento vs Tolerancia a Fallos
Debemos tener en cuenta que a mayor tolerancia, menor rendimiento esto es debido a que al aumentar la tolerancia, estamos habilitando un sistema de persistencia en base de datos, o replicación, y por lo tanto, cada mensaje debe pasar por más etapas para completarlo. En la web de Apache ActiveMQ puedes encontrar diferentes configuraciones y explicaciones sobre estas opciones.

Configuración de Nuestro ActiveMQ
Después de un poco de introducción, veámos como podemos configurar nuestro Apache ActiveMQ para tener una configuración personalizada. Para ello, he recreado los archivo de Solaris SMF Manifest ActiveMQ y Solaris SMF Method ActiveMQ ya que he incluido soporte para cargar un archivo de configuración personalizado.

Recordar que deberemos eliminar y volver a importar el archivo de definición (manifest) para que sea efectivo. Además revisar la configuración de nuestro ACTIVEMQ_HOME para que haga referencia a nuestra ubicación.

El contenido de nuestro archivo de ejemplo de configuración de ActiveMQ es la siguiente:
        <transportConnectors>
            <transportConnector name="open" uri="tcp://0.0.0.0:61616"/>
            <transportConnector name="master" uri="nio://0.0.0.0:61816"/>
            <transportConnector name="slave" uri="nio://0.0.0.0:61916"/>
        </transportConnectors>
        <import resource="activemq-admin-console.xml"/>
Y para activar sólo la consola de administración de Apache ActiveMQ incluiremos el resource en nuestro archivo de configuración.

Con todo esto, ya podemos hacer  empezar con nuestras configuraciones, y hacer las diferentes pruebas para ver cuales nos proporcionan el mejor rendimiento.

Conclusiones
Siguiendo con el post anterior, hemos visto como Apache ActiveMQ nos proporciona numerosas opciones de configuración, y que unido a Solaris SMF podemos tener un servidor estable y potente.

En la siguiente parte, hablaremos de Cómo configurar un Transport SSL y las diferentes formas de conexión en modo FailOver para aumentar la disponibilidad de nuestro servicio.



<< Instalación de Apache ActiveMQ - Parte 1


Referencias

miércoles, 28 de julio de 2010

Instalar Apache ActiveMQ en Solaris

Introducción
ActiveMQ es el servidor JMS de Apache. La instalación requiere de la versión Java 1.5, como mínimo, e incorpora un administrador Web <Admin Console> que nos permitirá monitorizar nuestro servidor y realizar algunas tareas sencillas.

Realmente este no es el sitio para <programar en Java utilizando JMS>, pero si que haremos una instalación y configuración del servicio utilizando SMF.


Instalación de Apache ActiveMQ
Lo primero que debemos hacer es comprobar que tenemos los requisitos principales, es decir, JDK 1.5 o superior, si fuese así aquí tenéis Cómo Instalar Java 6 en Solaris 10 en 64bits.
$ which java
/opt/www/jdk1.6.0/bin/java
$ which javac
/opt/www/jdk1.6.0/bin/javac
$ javac -fullversion
javac full version "1.6.0_11-b03"
$ java -fullversion
java full version "1.6.0_11-b03"
$ java -d64 -fullversion
java full version "1.6.0_11-b03"
Recordar que la opción <-d64> es para ejecutar la máquina en 64bits, además la opción <-version> también nos proporcionará los datos necesarios
$ java -d64 -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b16, mixed mode)
Una vez verificado que tenemos una versión superior a la 1.5, procederemos a descargar el tar.gz y descomprimirlo en un directorio, por ejemplo en mi caso MQ_HOME será </opt/www/activemq5>

Descarga del Binario de ActiveMQ
Desde la página de Apache podemos descargar la versión que deseemos, pero en mi caso vamos a utilizar la 5.3.2 -que es la última stable-, podeís utilizar el link Página de Descarga ActiveMQ y seleccionar la que prefirais.

UPDATED: Si quieres utilizar la nueva versión 5.4.x, revisa el post de Problemas con ActiveMQ 5.4 en Solaris 10

Creación Usuario, Group y Project
Como siempre vamos a crear un grupo y usuario para poder ejecutar ActiveMQ de forma controlada y utilizaremos un project para gestionar sus recursos.
En nuestro ejemplo, utilizaremos activemq para usuario y group y como project group.activemq, además, como hemos dicho antes, nuestro $MQ_HOME será </opt/www/activemq>
# groupadd activemq
# useradd -g activemq -s /bin/bash -d /export/home/activemq -m -c 'ActiveMQ User' activemq
64 bloques
# projadd -c 'Active MQ JMS Server' -U activemq group.activemq
# cd /opt/www/
# /usr/sfw/bin/wget http://www.eu.apache.org/dist/activemq/apache-activemq/5.3.2/apache-activemq-5.3.2-bin.tar.gz
.. omitimos los mensajes ...
# ls -l apache-activemq-5.3.2-bin.tar.gz
-rw-r--r--   1 root     root     33091364 abr 27 00:25 apache-activemq-5.3.2-bin.tar.gz
# /usr/sfw/bin/gtar zxpf apache-activemq-5.3.2-bin.tar.gz
# mv apache-activemq-5.3.2 activemq5
# chown -R activemq:activemq activemq5
# chmod 750 activemq5

Configuración de Resource Control
Vamos a crear una configuración un poco generalista para nuestro servidor, aunque es recomendable que monitoriceis y la adapteis a vuestras necesidades. 
# projmod -sK 'process.max-file-descriptor=(priv,4096,deny)' group.activemq
# projmod -sK 'task.max-lwps=(priv,100,none),(priv,250,deny)' group.activemq
# projmod -sK 'project.max-tasks=(priv,10,none),(priv,25,deny)' group.activemq
# projmod -sK 'project.cpu-shares=(privileged,175,none)' group.activemq
# projects -l group.activemq
group.activemq
        projid : 110
        comment: "Active MQ JMS Server"
        users  : activemq
        groups : (none)
        attribs: process.max-file-descriptor=(priv,4096,deny)
                 project.cpu-shares=(privileged,175,none)
                 project.max-tasks=(priv,10,none),(priv,25,deny)
                 task.max-lwps=(priv,100,none),(priv,250,deny)
Configuración del servicio mediante Solaris SMF
He creado los archivos manifest y method para Apache ActiveMQ 5.x que podéis descargaros -si no os apetece crearos unos- desde aquí: Manifest Solaris SMF para Apache Active MQ 5.x y Method Solaris SMF para Apache Active MQ 5.x.

Como siempre, he creado dos instancias <default_32bits> y <default_64bits> para que podáis decidir cual ejecutar.

Recordar, que no se pueden ejecutar ambas simultáneamente a menos que asignemos diferentes archivos de configuración.
# cd /var/svc/manifest/application/web
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/activemq/solaris-svc/activemq_5.xml
# svccfg
svc:> validate activemq_5.xml
svc:> import activemq_5.xml
svc:> quit
# cd /lib/svc/method
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/activemq/solaris-svc/activemq5
# svcs activemq_5
STATE          STIME    FMRI
disabled       18:11:57 svc:/application/web/activemq_5:default32bits
disabled       22:16:50 svc:/application/web/activemq_5:default64bits
# svcadm enable activemq_5:default64bits
# svcs activemq_5
STATE          STIME    FMRI
disabled       18:11:57 svc:/application/web/activemq_5:default32bits
online         22:17:21 svc:/application/web/activemq_5:default64bits




Conclusiones
Hemos visto como podemos instalar de forma sencilla el servidor Apache Active MQ, a partir de ahora, podemos configurar nuestro servidor para adaptarlos a nuestras necesidades.



Referencias