jueves, 1 de julio de 2010

Configuración de Load Balacer para Liferay Portal

Configuración de Load Balacer para Liferay Portal

Tabla de Contenidos
Configuración de Load Balacer para Liferay Portal
0. Definir las máquinas o IPs que harán el balanceo
1. Activar los módulos de apache necesarios
2. Crear un archivo de configuración para el load balancer
3. Configurar los dos Tomcat incluidos como servicios del JBoss donde corre Liferay para que acepten conexiones desde el proxy vía AJP
4. Reiniciar los dos liferay y apache y listo !
5. Administrar el balanceador

Aplica para:

Apache 2.2.x
Liferay Portal 5.2.3
Jboss 4.2 / Jboss 5 / Tomcat 5
Linux / Windows


Esta configuración es útil cuando se quiere balancear cargas entre varios liferay para atender más clientes, para usar mejor la infraestructura disponible, para aumentar la disponibilidad de un servicio, para sobrepasar limitaciones de la plataforma (como en el caso de windows con < style="font-weight:bold;">0. Definir las máquinas o IPs que harán el balanceo

Ej, se usará una misma máquina para balancear dos Liferay, cada uno usando un set de puertos diferente con la misma IP.

Puertos AJP (el estándar es el 8009).

nodo01- localhost: 8109
nodo02 localhost: 8209


1. Activar los módulos de apache necesarios

sudo a2enmod proxy
sudo a2enmod proxy_ajp
sudo a2enmod proxy_balancer


2. Crear un archivo de configuración para el load balancer


/etc/apache2/conf.d/httpd-ajp.conf

con la siguiente información:

# inicio archivo
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

<Proxy balancer://ajpCluster>
BalancerMember ajp://localhost:8109 route=s1
BalancerMember ajp://localhost:8209 route=s2
</Proxy>

<Location />
ProxyPass balancer://ajpCluster/ stickysession=JSESSIONID
</Location>

<Location /balancer-manager>
SetHandler balancer-manager
</Location>

## fin archivo

3. Configurar los dos Tomcat incluidos como servicios del JBoss donde corre Liferay para que acepten conexiones desde el proxy vía AJP


- Verificar que el conector AJP en server/default/deploy/jbossweb*/server.xml esté sin comentarios

- Configurar el conector HTTP así:

(jvmRoute debe coincidir con los valores puestos en el archivo http-ajp.conf)

Es necesario además configurar los scripts de inicio para que el conector ajp escuche en los puertos configurados:

Para el caso de jboss 5x se envía el parámetro en el arranque así:

./run.sh -b 0.0.0.0 -Djboss.service.binding.set=ports-01 -Djboss.messaging.ServerPeerID=

Para el caso de jboss 4.2 es necesario ajustar el archivo jboss-service.xml y seleccionar el pool de puertos que se quiere usar. (Este bloque está con comentario por defecto )

<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>

Para tomcat 5 / 6 es necesario editar directamente el conector en el archivo server.xml y configurar allí el puerto deseado.


4. Reiniciar los dos liferay y apache y listo !


5. Administrar el balanceador

El balanceador se puede administrar desde el browser usando la URL http://localhost/balancer-manager

lunes, 6 de julio de 2009

Configuración de Liferay y Jackrabbit con PostgreSQL

Este artículo da un vistazo rápido a la configuración de la biblioteca documental de Liferay Portal con Jackrabbit con persistencia en una base de datos PostgreSQL.

Se asume que se parte de una configuración limpia, es decir, que no se hará migración de datos
de una configuración previa.


0. Detener liferay portal

1. Limpiar la configuración de jackrabbit -
Mover el repositorio a un directorio nuevo

$ mv ~/liferay/jackrabbit ~/liferay/jackrabbit.0

2. Configuración inicial de la base de datos
Se creará una base de datos llamada jcr con usuario jcr.

Nota. Es necesario descargar una versión actualizada del driver jdbc para postgres desde http://jdbc.postgresql.org y ubicar el jar ~/server/default/lib/ext

su - postgres
createuser jcr -P
createdb -E utf8 -O jcr jcr

3. Configurar el repositorio de jackrabbit y documentLibrary

En ~/deploy/ROOT.war/WEB-INF/classes/portal-ext.properties
poner las siguientes líneas:

#
# JCR
#
jcr.jackrabbit.repository.root=/home/username/liferay/jcr

#
# DocLibrary
#
dl.hook.impl=com.liferay.documentlibrary.util.JCRHook


4. Iniciar Liferay para que se cree el nuevo repositorio en ~/liferay/jcr

./run.sh

5. Configuración del repositorio

Editar el archivo ~liferay/jcr/repository.xml para que contenga.
Nota. Revisar la configuración de claves de la base de datos.

<!--repository.xml -->
<?xml version="1.0"?>

<Repository>
<!-- Configuracion para PostgreSQL REPOSITORY-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="org.postgresql.Driver"/>
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql"/>
<param name="schemaObjectPrefix" value="J_R_FS_"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="org.postgresql.Driver" />
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql" />
<param name="schemaObjectPrefix" value="J_R_PM_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>

<Security appName="Jackrabbit">
<AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" />
<LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
<param name="anonymousId" value="anonymous" />
</LoginModule>
</Security>
<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="liferay" />
<Workspace name="liferay">
<!-- Configuracion para PostgreSQL PM-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="org.postgresql.Driver"/>
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql"/>
<param name="schemaObjectPrefix" value="J_FS_"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="org.postgresql.Driver" />
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql" />
<param name="schemaObjectPrefix" value="J_PM_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>

</Workspace>
<Versioning rootPath="${rep.home}/version">
<!-- Configuracion para PostgreSQL VERSIONING-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="org.postgresql.Driver"/>
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql"/>
<param name="schemaObjectPrefix" value="J_V_FS_"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="org.postgresql.Driver" />
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql" />
<param name="schemaObjectPrefix" value="J_V_PM_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>
</Versioning>
<DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore">
<param name="url" value="jdbc:postgresql:jcr"/>
<param name="user" value="jcr"/>
<param name="password" value="***"/>
<param name="databaseType" value="postgresql"/>
<param name="driver" value="org.postgresql.Driver"/>
<param name="minRecordLength" value="1024"/>
<param name="maxConnections" value="3"/>
<param name="copyWhenReading" value="true"/>
<param name="tablePrefix" value=""/>
<param name="schemaObjectPrefix" value="JCR_"/>
</DataStore>
</Repository>

6. Reiniciar liferay.

7. Verificar que los objetos se crearon correctamente en la base y que no hay errores en consola, haciendo una prueba de upload de archivo a la DocumentLibrary

8. Eso es todo !


Referencias

http://jackrabbit.apache.org/getting-started-with-apache-jackrabbit.html

http://www.onjava.com/pub/a/onjava/2006/10/04/what-is-java-content-repository.html?page=1

http://www.ibm.com/developerworks/java/library/j-jcr/

viernes, 27 de junio de 2008

Liferay Portal en JBoss AS 4.2.2 GA

Liferay Portal es distribuido por defecto como un paquete pre-armado(bundle) que incluye la configuración completa de un servidor de aplicaciones dado (Jboss, BEA, Glassfish etc). No obstante, en un entorno de producción es probable que sea necesario utilizar el portal, pero solo como una aplicación más que comparte los recursos con otras aplicaciones y servicios. Otra razón para usar Liferay Portal como una aplicación más dentro de un servidor de aplicaciones existente, es si existe, por ejemplo, la necesidad de utilizar EJBs, pues esta no está disponible en el paquete prearmado distribuido por Liferay.

A continuación se presentan los pasos para llevar a cabo la configuración y el despliegue de Liferay en JBoss 4.2.2 GA.

Nota. Este procedimiento presume que se está usando alguna distribución de Linux / Solaris y que se está usando el JDK 1.5

1. Descargar los paquetes necesarios

+ Liferay-portal
+ Liferay-portal-dependencies
+ JBoss 4.2.2GA


2. Crear directorios de trabajo

mkdir -p ~/apps/tmp

3. Configurar variables de entorno

export JAVA_HOME=<ruta al jdk instalado >
export PATH=$JAVA_HOME/bin:$PATH

4. Instalar y configurar JBoss AS 4.2.2GA

a. Descomprimir e instalar paquete

unzip jboss-4.2.2.GA.zip -d ~/apps
cd ~/apps
ln -s jboss-4.2.2.GA jboss


b. Configurar opciones de memoria para JBoss

cd jboss/bin
vi run.conf

Modificar la línea de JAVA_OPTS que está sin comentar así:

JAVA_OPTS="-Xms512m -Xmx1204m -XX:MaxPermSize=256m -Dsun.rmi.dgc.client.gcInterval=3600000 \ -Dsun.rmi.dgc.server.gcInterval=3600000"

5. Probar la instalación de JBoss

cd ~apps/jboss/bin
./run.sh -c default

Una vez haya iniciado probar la conexión desde un browser a la dirección de la máquina, puerto 8080, ej http://192.168.0.2:8080

Detener luego el proceso usando CTRL+C en la consola donde fue lanzado el script run.sh.

6. Configurar una base de datos para Liferay
En este caso el ejemplo está con hypersonic, no obstante aplica para cualquier otra base de datos.

a. Configurar un datasource en JBoss para Liferay

cd ~/apps/jboss/server/default/deploy
vi liferay-ds.xml

Pegar el texto a continuación:

<datasources>
<local-tx-datasource>
<jndi-name>jdbc/LiferayPool</jndi-name>
<connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}liferayDB</connection-url>
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<user-name>sa</user-name>
<password></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>0</idle-timeout-minutes>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<metadata>
<type-mapping>Hypersonic SQL</type-mapping>
</metadata>
<depends>jboss:service=Hypersonic,database=liferayDB</depends>
</local-tx-datasource>

<!-- For hsqldb accessed from jboss only, in-process (standalone) mode -->
<mbean code="org.jboss.jdbc.HypersonicDatabase"
name="jboss:service=Hypersonic,database=liferayDB">
<attribute name="Database">liferayDB</attribute>
<attribute name="InProcessMode">true</attribute>
</mbean>
</datasources>


b. Iniciar y detener JBoss para que cree los archivos correspondientes a la nueva base en hypersonic.

7. Configurar e Instalar Liferay Portal 5

a. Descomprimir el paquete de Liferay en el directorio temporal


cp liferay-portal-5.0.1.war ~/apps/tmp
cd ~/apps/tmp
mkdir tmp-war
jar xvf liferay-portal-5.0.1.war -C tmp-war

b. Liferay por defecto trata de correr en la raiz del servidor de aplicaciones, pero en este caso queremos que responda a una URL diferente, por ejemplo /portal. Para ello debemos modificar algunos archivos de configuración así:

cd tmp-war
cd WEB-INF

+ web.xml
Editar web.xml y agregar después del primer elemento lo siguiente:

<context-param>
<param-name>root_path</param-name>
<param-value>/portal</param-value>
</context-param>


+ jboss-web.xml
Editar jboss-web.xml y cambiar el context-root a /portal

<context-root>/portal</context-root>


+ portal-ext.properties
Crear el archivo portal-ext.properties en ~/apps/tmp/tmp-war/WEB-INF/classes
y digitar los siguientes datos:

#portal-ext.properties
portal.ctx=/portal
auto.deploy.dest.dir=../server/default/deploy
company.security.strangers=false
locales=es_ES,en_US
auto.deploy.deploy.dir=../liferay/deploy
# fin -portal-ext.properties.

c. Instalar las dependencias adicionales
Es necesario copiar las algunas librerías adicionales al lib de JBoss para que el portal pueda iniciar sin problemas.

unzip -j liferay-portal-dependencies-5.0.1.zip -d ~/apps/jboss/server/default/lib

d. Copiar Liferay Portal como WAR expandido en JBoss

mv ~/apps/tmp/tmp-war ~/apps/jboss/server/default/portal.war


8. Eso es todo!
Ahora basta con iniciar el servidor de aplicaciones para tener Liferay operando en JBoss y con la posibilidad de usar todas las herramientas adicionales proveídas por el servidor de aplicaciones como por ejemplo los EJB.


Referencias

1. http://www.liferay.com/web/guest/community/forums/-/message_boards/message/769405;jsessionid=1B48FB7B19DE2F6669A4CB44C5500AC6

2. http://wiki.liferay.com/index.php/Liferay_with_EJB3_and_JBoss%2C

Marcas y derechos


Liferay ®, Liferay Portal son marcas registradas de Liferay Inc.
JBoss ®es una marca registrada de Red Hat Inc.
Java ®es una marca registrada de Sun Microsystems
Linux ®es una marca registrada de Linus Torvalds.