Liferay Cluster con Jboss
Por Javier Turégano

Liferay se ha convertido en pieza clave dentro de los desarrollos de Andago gracias a su gran potencial cómo marco común para integrar otras aplicaciones web en un solo portal. Por otro lado Jboss se asienta cómo servidor de aplicaciones corporativo capaz de contener cualquier de las soluciones de Andago. Si unimos estos dos casos con las necesidades de alta disponibilidad de cualquier proyecto serio llegamos a la importancia de crear un cluster de Liferay dentro de Jboss, que vamos a presentar en las siguientes lineas.
A la hora de poner LIferay en Cluster debemos tener en cuenta 4 puntos fundamentales:
- Poner las cachés en cluster
- Poner los Repositorio de ficheros en cluster
- Índices de búsqueda en cluster
- Activar la replicación de sesiones
Con ello seríamos capaces de desplegar varios nodos de Jboss que trabajen de forma colaborativa. Hay varias formas de llevar a cabo cada uno de estos puntos, así que aquí va una aproximación, en la que se requiere tener ya configurado el cluster de jboss y disponer de algún medio de almacenamiento compartido, dos temas para los que hay abundante documentación en internet. Manos a la obra:
Cachés en cluster
Liferay disponde de distintas cachés que deben ser clusterizadas para su correcto funcionamiento:
* Persistence Cache
* Multi VM Cache
Para poder usarlas en cluster haremos uso de EHCache que configuramos de la siguiente forma:
Debemos extraer (copiar fuera, sin borrar) del portal-impl.jar de Liferay los siguientes ficheros:
* liferay-multi-vm-clustered.xml
* hibernate-clustered.xml
Y los copiamos en un directorio que crearemos para ello en:
liferay.war/WEB-INF/classes/myehcache/
Añadimos a portal-ext.properties estas líneas de configuración:
# Hibernate Cache en Cluster
net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml
# MultiVM Cache en Cluster
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml
Con objetivo de depurar el cluster podemos añadir estas líneas a log4j.properties del servidor: (NO DEJAR EN PRODUCCIÓN)
log4j.logger.net.sf.ehcache=INFO
log4j.logger.net.sf.ehcache.config=DEBUG
log4j.logger.net.sf.ehcache.distribution=DEBUG
Repositorio de ficheros en Cluster
Para que las aplicaciones de Liferay que hacen uso del repositorio de ficheros puedan operar correctamente en cluster necesitamos tener en el sistema de ficheros compartido el directorio:
liferay/data
Índices de lucene en Cluster
De los 4 métodos existentes para mantener los índices de Lucene en Cluster usaremos el basado en sistema de ficheros compartido siempre que este permita bloquear el acceso a los ficheros. En nuestro caso usaremos NFS por lo que garantiza esta situación. Cómo en el paso anterior requerimos que esté en el sistema de ficheros compartido el directorio:
liferay/data
Replicación de sesiones
Para el mantenimiento de sesión utilizaremos el cluster de Jboss con sesiones sticky, también debería funcionar con non-sticky pero hemos detectado algunos casos en los que se produce perdida de sesión. Una vez configurado el cluster de jboss lo único que necesitamos es marcar el war de liferay cómo distributable mediante su configuración, así que modificamos el siguiente fichero entre los tags xml de web-app:
liferay.war/WEB-INF/web.xml
...
<distributable/>
...
Otras consideraciones
* Despliegue de plugins y temas
Se ha de tener en cuenta que el despliegue de plugins y temas se debe de llevar a cabo en todos los nodos del cluster por lo que se recomienda se realice a través de la línea de comandos y del directorio deploy de liferay:
liferay/deploy
* Integración con CAS
Al parecer hay un problema con la integración con CAS y para que funcione se debe de realizar el siguiente cambio de librería:
liferay.war/WEB-INF/lib/casclient.jar
por:
liferay.war/WEB-INF/lib/casclient-2.2.0-M3.jar
Javier Turégano