Ir al contenido

Configuración de clúster

Esta arquitectura proporciona balanceo de carga además de alta disponibilidad. Veamos la arquitectura propuesta. Varios servidores OpenKM y uno (o varios) servidores HAProxy distribuirán las peticiones de los usuarios entre estos servidores OpenKM. HAProxy también puede configurarse para detectar qué servidor OpenKM está caído y evitar enviarle peticiones hasta que vuelva a estar disponible.

Opcionalmente puede configurar varios servidores de base de datos replicados (también gestionados por otro HAProxy), lo que evita que el servicio se interrumpa si un nodo de base de datos cae. Por defecto, OpenKM almacena los documentos en disco para maximizar el rendimiento, por lo que necesita que estos ficheros estén replicados entre sus servidores OpenKM. Una opción es GlusterFS, una solución software para crear sistemas de ficheros distribuidos, pero NFS funciona bastante bien en la mayoría de las situaciones y es más fácil de configurar en servidores Linux.

Recuerde que esto es solo una propuesta, y es libre de implementar la infraestructura que quiera para lograr los mismos resultados. Para evitar una configuración excesiva y compleja, describiremos una arquitectura simplificada que ofrecerá el mismo objetivo: el nodo master, la base de datos y el servidor NFS están en la misma máquina.

Si observa el directorio TOMCAT_HOME/repository, verá lo siguiente:

  • cache: son ficheros generados usados principalmente para la vista previa. Si se eliminan, se regenerarán.
  • Datastore: estos ficheros son el contenido binario de los documentos almacenados en OpenKM. Debe cuidarlos, y siempre se recomienda una copia de seguridad.
  • Index: aquí es donde Lucene almacena los índices usados para la búsqueda de documentos y metadatos. Si se elimina, puede reindexar el repositorio desde Administration > Utilities.

Puede colocar las carpetas cache y datastore en otro servidor como recursos compartidos, según esta información. De media, el 80% de las acciones de los usuarios son lecturas de documentos, y solo el 20% son escrituras (crear o actualizar documentos). La carpeta problemática es la carpeta index porque los índices de Lucene no pueden compartirse entre varias instancias de OpenKM. Entonces, ¿qué podemos hacer? La solución es que cada instancia de OpenKM tenga su propio índice, y se envíen mensajes entre ellas para mantener su índice local actualizado. Si un nodo necesita actualizar el índice, también envía un mensaje a los demás nodos, que procesarán la modificación localmente.

Este es el único nodo que debería ser accesible para los usuarios y despachará las peticiones entre los nodos slave. La parte más importante es la configuración de HAProxy. Este formato de configuración funciona con HAProxy v1.5

frontend LB
bind 192.168.0.220:80
reqadd X-Forwarded-Proto:\ http
default_backend LB
backend LB 192.168.0.220:80
mode http
stats enable
stats hide-version
stats uri /stats
stats realm HAProxy\ Statistics
stats auth admin:admin
balance roundrobin
option httpchk
option httpclose
option forwardfor
cookie LB insert
server node1 192.168.0.222:8080 cookie node1 check
server node2 192.168.0.223:8080 cookie node2 check

Según esta configuración, las peticiones de los usuarios se balancearán usando el algoritmo round-robin entre los dos servidores OpenKM. Si algún servidor OpenKM falla, las peticiones solo se reenviarán al servidor que funcione. En http://proxy/stats (usuario por defecto: admin, contraseña: admin), podrá ver el estado de los nodos y otras estadísticas. Hay un manual completo de HAProxy disponible en http://cbonte.github.io/haproxy-dconv/configuration-1.5.html. Si usa otra versión de HAProxy, algunas opciones pueden haber cambiado.

Este tipo de nodo no es muy distinto de los slave, y la única diferencia real es que puede ejecutar tareas crontab, entre otras acciones administrativas. Como dijimos antes, para simplificar la configuración, este nodo master también almacenará los ficheros cache y datastore.

Creemos estos directorios:

Ventana de terminal
$ sudo mkdir /mnt/okm_cache
$ sudo mkdir /mnt/okm_dstore
$ sudo mkdir /mnt/okm_extraction
$ sudo mkdir /mnt/okm_ocr_template
$ sudo chown openkm:openkm /mnt/okm_*

Vamos a exponer estos directorios vía NFS, así que necesitamos instalar el soporte:

Ventana de terminal
$ sudo apt-get install nfs-kernel-server

Una vez instalado, edite el fichero /etc/exports y añada estas líneas:

/mnt/okm_cache *(rw,sync,no_root_squash,no_subtree_check)
/mnt/okm_dstore *(rw,sync,no_root_squash,no_subtree_check)
/mnt/okm_extraction *(rw,sync,no_root_squash,no_subtree_check)
/mnt/okm_ocr_template *(rw,sync,no_root_squash,no_subtree_check)

Tras guardarlo, debe ejecutar este comando (debe ejecutarlo cada vez que modifique este fichero):

Ventana de terminal
$ sudo exportfs -ra

Ahora vamos a crear los enlaces simbólicos:

Ventana de terminal
$ sudo ln -s /mnt/okm_cache TOMCAT_HOME/repository/cache
$ sudo ln -s /mnt/okm_dstore TOMCAT_HOME/repository/datastore
$ sudo ln -s /mnt/okm_extraction TOMCAT_HOME/repository/extraction
$ sudo ln -s /mnt/okm_ocr_template TOMCAT_HOME/repository/ocr_template
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/cache
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/datastore
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/extraction
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/ocr_template

En lugar de crear enlaces, puede configurar OpenKM para crear estos directorios en otras ubicaciones:

repository.extraction.home=/mnt/okm_extraction
repository.datastore.home=/mnt/okm_dstore
repository.cache.home=/mnt/okm_cache
repository.ocr.template.home=/mnt/okm_ocr_template

Para habilitar esta configuración, edite TOMCAT_HOME/openkm.properties y descomente esta parte:

# Cluster - Mastercluster.enabled=true
cluster.node=master

Estos nodos pueden escribir en las carpetas cache y datastore. Aquí también necesitamos crear los directorios compartidos que se usarán como puntos de montaje:

Ventana de terminal
$ sudo mkdir /mnt/okm_cache
$ sudo mkdir /mnt/okm_dstore
$ sudo mkdir /mnt/okm_extraction
$ sudo mkdir /mnt/okm_ocr_template
$ sudo chown openkm:openkm /mnt/okm_*

Instale el soporte de cliente NFS:

Ventana de terminal
$ sudo apt-get install nfs-common

Queremos que se monten automáticamente, así que edite el fichero /etc/fstab y añada:

# Cluster
master:/mnt/okm_cache /mnt/okm_cache nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intr
master:/mnt/okm_dstore /mnt/okm_dstore nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intr
master:/mnt/okm_extraction /mnt/okm_extraction nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intr
master:/mnt/okm_ocr_template /mnt/okm_ocr_template nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intr

Ahora vamos a montarlos:

Ventana de terminal
$ sudo mount -a

Vamos a crear los enlaces simbólicos:

Ventana de terminal
$ sudo ln -s /mnt/okm_cache TOMCAT_HOME/repository/cache
$ sudo ln -s /mnt/okm_dstore TOMCAT_HOME/repository/datastore
$ sudo ln -s /mnt/okm_extraction TOMCAT_HOME/repository/extraction
$ sudo ln -s /mnt/ocr_template TOMCAT_HOME/repository/ocr_template
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/cache
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/datastore
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/extraction
$ sudo chown -h openkm:openkm TOMCAT_HOME/repository/ocr_template

En lugar de crear enlaces, puede configurar OpenKM para crear estos directorios en otras ubicaciones:

repository.extraction.home=/mnt/okm_extraction
repository.datastore.home=/mnt/okm_dstore
repository.cache.home=/mnt/okm_cache
repository.ocr.template.home=/mnt/okm_ocr_template

Para habilitar esta configuración, edite TOMCAT_HOME/openkm.properties y descomente esta parte:

# Cluster - Slavecluster.enabled=true
cluster.node=slave