Get it on Google Play

Montando un cluster Liferay con Docker y JBoss

22-08-2015
 

Montar un cluster Liferay sobre Docker no difiere mucho de hacerlo usando otra tecnología de virtualización como VMWare o VirtualBox o montándolo sobre máquinas(A la antigua 😀 ). En este post vamos ha hacer un repaso de como hacerlo en Docker y el servidor de aplicación web Jboss, básicamente queremos hacer lo siguiente(No se si el dibujo me ha quedado muy bien):

Cluster Docker Liferay JBoss

Cluster Docker Liferay JBoss

Preparando el contenedor docker

Lo primero es crear el contenedor, usaremos una imagen Ubuntu:

	sudo docker run -i -t ubuntu /bin/bash

Después le instalamos al contenedor Docker el software que necesitaremos:

apt-get update

# Java 6
apt-get install openjdk-6-jre

# Para descargar liferay de Internet
apt-get install wget

# Para descomprimir ficheros zip
apt-get install unzip

# Gestor de ficheros Midnight Comander
apt-get install mc

Nos ponemos en la carpeta /opt, nos descargamos Liferay de Sourceforge y lo descomprimirmos:

cd /opt

wget http://downloads.sourceforge.net/project/lportal/Liferay%20Portal/6.2.3%20GA4/liferay-portal-jboss-6.2-ce-ga4-20150416163831865.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flportal%2Ffiles%2FLiferay%2520Portal%2F6.2.3%2520GA4%2F&ts=1439834646&use_mirror=freefr

unzip liferay-portal-jboss-6.2-ce-ga4-20150416163831865.zip

Configuramos Liferay para trabajar en Cluster

Lo primero será crear el fichero ‘portal-ext.properties’ con la configuración de la base de datos y del cluster:

[email protected]
admin.email.from.name=Test Test

jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://192.168.0.102/lportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=root
liferay.home=/opt/liferay-portal-6.2-ce-ga4
setup.wizard.enabled=false

org.quartz.jobStore.isClustered=true
net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml

multicast.group.address["cluster-link-control"]=239.255.120.100
multicast.group.port["cluster-link-control"]=23300
multicast.group.address["cluster-link-udp"]=239.255.120.101
multicast.group.port["cluster-link-udp"]=23301
multicast.group.address["cluster-link-mping"]=239.255.120.102
multicast.group.port["cluster-link-mping"]=23302
multicast.group.address["hibernate"]=239.255.120.103
multicast.group.port["hibernate"]=23303
multicast.group.address["multi-vm"]=239.255.120.104
multicast.group.port["multi-vm"]=23304

dl.store.impl=com.liferay.portlet.documentlibrary.store.DBStore

cluster.link.enabled=true
lucene.replicate.write=true

En mi caso le he configurado que guarde los ficheros en base de datos, así lo hacemos un poco mas fácil.

Configurando Liferay en cloud sobre JBoss

Cuando nos descargamos Liferay solamente viene configurado para que Liferay funcione sin las funcionalidades de clustering. Para esto deberemos configurar el fichero ‘<jboss_home>/standalone/configuration/standalone-ha.xml’:

Deberemos configurar varias cosas del fichero. La primera, le configuramos un timeout al ‘deploy-scanner’:


<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
<deployment-scanner path="deployments" relative-to="jboss.server.base.dir"
scan-interval="5000" deployment-timeout="240"/>
</subsystem>

Añadimos el ‘security-domain’ para el login de Liferay:


<security-domain name="PortalRealm">
<authentication>
<login-module code="com.liferay.portal.security.jaas.PortalLoginModule"
flag="required"/>
</authentication>
</security-domain>

Le configuramos el ‘enable-welcome-root’ a false:


<virtual-server name="default-host" enable-welcome-root="false">

Para que el servidor escuche todos los hosts, debemos configurar los cuatro sitios donde aparece el ‘bind’ de la interface:


${jboss.bind.address:0.0.0.0}

Finalmente, para que se compartan las sesiones entre los servidor le añadiremos al fichero ‘<jboss_home>/standalone/deployments/ROOT/WEB-INF/web.xml>’

	<distributable />

Y una vez ya tenemos esto ya podemos arrancar el JBoss en modo cluster(Le pasamos como parámetro la IP del servidor, la IP de multicast y un nombre que debe ser único para cada nodo del cluster):

./standalone.sh -c standalone-ha.xml -b 172.17.0.2 -u 230.0.0.4 -Djboss.node.name=node1

Por cierto, la IP la podemos sacar simplemente haciendo ‘ifconfig’.

Creando el segundo Nodo del Cluster

Ahora que ya tenemos el primer nodo del cluster creado y funcionando, vamos ha hacer un commit de la actual imagen y arrancaremos una segunda imagen(Esto lo hacemos en un terminal del amfitrion, NO en el container Docker):

	#creamos la imagen llamada jbosscluster con el tag latest
	sudo docker commit <ID_IMAGEN> jbosscluster:latest

	#arrancamos el segundo contenedores
	sudo docker run -i -t jbosscluster:latest /bin/bash

Arrancamos el nuevo nodo del Cluster(Antes deberemos borrar la carpeta ‘<jboss_home>/standalone/configuration/standalone_xml_history/’ porque sinó no aranca)

./standalone.sh -c standalone-ha.xml -b 172.17.0.3 -u 230.0.0.4 -Djboss.node.name=node2 

Configuración del Balanceador Apache

Ahora que ya tenemos los dos nodos del cluster queda lo ams fácil. Coger a nuestro apache y configurarle en el fichero ‘httpd.conf'(En mi caso me he creado un dominio testbalancer.com):

<VirtualHost www.testbalancer.com:80>
	ServerName www.testbalancer.com

	#Panel para gestionar el balanceador
	<Location /balancer-manager>
	    SetHandler balancer-manager
	</Location> 

	ProxyPass /balancer-manager !

	#Balanceador
	<Proxy balancer://mybalancer>
	    BalancerMember ajp://172.17.0.3:8009 route=s1
	    BalancerMember ajp://172.17.0.2:8009 route=s2
	</Proxy>
	ProxyPass / balancer://mybalancer/ stickysession=JSESSIONID|jsessionid
	ProxyPassReverse / balancer://mybalancer/
 

	# Forward Proxy
	ProxyRequests Off

	<Proxy *>
	    Order deny,allow
	    Deny from none
	    Allow from all
	</Proxy>

</VirtualHost>

Conclusiones

En este post no he podido explicar exactamente las ventajas de utilizar un servidor como JBoss, muy potente para determinados trabajos.

Docker a resultado ser simplemente genial. Docker es muy ligero y te permite tener varios contenedores funcionando en la misma máquina casi sin enterarte y ha demostrado ser muy versátil a la hora de crear, copiar y trabajar con imágenes.

Interesado en formación Liferay?

 

Leave a Reply

© Albert Coronado Calzada