Pruebas con Alfresco 3 en cluster

Con motivo del último curso de administración de Alfresco que hemos impartido, preparamos un taller relativo a la puesta en marcha de cluster de Alfresco, con dos nodos. El esquema es similar al expuesto en la wiki de Alfresco, con dos instancias de Alfresco balanceadas por un Apache via mod-balancer y mod_jk. Las dos instancias estaban en la misma máquina, lo cual dificultó la configuración debido a que hubo que cambiar numerosos puertos para el nodo 2, desde los puertos de los conectores http, ajp y demás hasta los del rmi. Esta parte hubiese sido más sencilla con dos máquinas virtuales, una con cada nodo, por ejemplo.

En la prueba de concepto se recogían las principales problemáticas:

  • Utilizamos un almacén físico común para el repositorio. Además probamos la característica de replicación del almacén de contenido de los nodos en local: En nuestra prueba la simulamos con una replicación a dos almacenes locales de contenidos.
  • En el esquema, utilizamos una base de datos común a ambas instancias, es decir, no se protege contra errores de la base de datos.
  • El balanceador por su parte reduce la carga de los contenedores de servlets (tomcat) y proporciona redundancia en caso de fallos. Antes de poner el balancer, probamos con dos navegadores sobre los nodos correspondientes subiendo contenidos en un nodo y refrescando en el otro y buscando en el otro.
  • Replicamos la sesión del cliente y las cachés con ehcache y jgroups: Es necesario activar ehcache-custom.xml en el directorio de extensiones, y jgroups en alfresco-global.properties.
  • Sincronizamos los índices de Lucene: El almacén de índices local de cada nodo y el cron de sincronización se definen en alfresco-global.properties.


 

Os dejo la estructura de directorios de nuestro esquema:

cesar@baco /opt/cluster $ tree -d -L 2
.
|-- alfresco1
|   |-- bin
|   |-- index
|   |-- index-backup
|   |-- licenses
|   `-- tomcat
|-- alfresco2
|   |-- bin
|   |-- index
|   |-- index-backup
|   |-- licenses
|   `-- tomcat
`-- store
    |-- audit.contentstore
    |-- contentstore
    |-- contentstore.deleted
    `-- oouser

A continuación, un ejemplo del archivo de configuración global de Alfresco, para el nodo 1. Para el resto de los nodos se necesita una config similar y si están en la misma máquina hay que cambiar los puertos.

dir.root=/opt/cluster/store
dir.indexes=/opt/cluster/alfresco1/index
dir.indexes.backup=/opt/cluster/alfresco1/index-backup

# Cluster
alfresco.cluster.name=testcluster
index.recovery.mode=AUTO

# Jgroups
alfresco.jgroups.defaultProtocol=TCP
alfresco.tcp.initial_hosts=baco.zylk.net[7800],baco.zylk.net[7810]

# Hibernate cache
hibernate.cache.use_second_level_cache=false

# Lucene
index.tracking.cronExpression=0/5 * * * * ?
index.recovery.mode=AUTO
index.tracking.reindexLagMs=10000
index.tracking.maxTxnDurationMinutes=10
index.recovery.maximumPoolSize=5
index.tracking.maxTransactionsPerLuceneCommit=100

#
# Sample database connection properties
#-------------
db.name=alfresco32ee
db.username=alfresco
db.password=alfresco
db.host=localhost
db.port=3306

#
# External locations
#-------------
ooo.exe=/usr/bin/soffice
img.root=/usr
img.exe=/usr/bin/convert
swf.exe=/usr/bin/pdf2swf

#
# MySQL connection
#-------------
db.driver=org.gjt.mm.mysql.Driver
db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}

#
# Disable CIFS and FTP
#
cifs.enabled=false
ftp.enabled=false


Las pruebas son Alfresco Enterprise 3.2, ya que la característica de jgroups no esta presente para la Community.

Es útil en la preparación trazar con log4j para ehcache y jgroups.

log4j.logger.org.alfresco.repo.jgroups=DEBUG
log4j.logger.org.alfresco.enterprise.repo.cache.jgroups=DEBUG

log4j.logger.net.sf.ehcache.distribution=DEBUG
log4j.logger.org.alfresco.repo.node.index.IndexTransactionTracker=DEBUG
log4j.logger.org.alfresco.repo.node.index.AVMRemoteSnapshotTracker=DEBUG


Enlaces:

La imagen pertenece a:

00

More Blog Entries

0 Comments