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.
Nodo proxy
Sección titulada «Nodo proxy»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 checkSegú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.
Nodo master
Sección titulada «Nodo master»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:
$ 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:
$ sudo apt-get install nfs-kernel-serverUna 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):
$ sudo exportfs -raAhora vamos a crear los enlaces simbólicos:
$ 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_templateEn lugar de crear enlaces, puede configurar OpenKM para crear estos directorios en otras ubicaciones:
repository.extraction.home=/mnt/okm_extractionrepository.datastore.home=/mnt/okm_dstorerepository.cache.home=/mnt/okm_cacherepository.ocr.template.home=/mnt/okm_ocr_templatePara habilitar esta configuración, edite TOMCAT_HOME/openkm.properties y descomente esta parte:
# Cluster - Mastercluster.enabled=truecluster.node=masterNodos slave
Sección titulada «Nodos slave»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:
$ 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:
$ sudo apt-get install nfs-commonQueremos que se monten automáticamente, así que edite el fichero /etc/fstab y añada:
# Clustermaster:/mnt/okm_cache /mnt/okm_cache nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intrmaster:/mnt/okm_dstore /mnt/okm_dstore nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intrmaster:/mnt/okm_extraction /mnt/okm_extraction nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intrmaster:/mnt/okm_ocr_template /mnt/okm_ocr_template nfs auto,noatime,rsize=8192,wsize=8192,timeo=14,intrAhora vamos a montarlos:
$ sudo mount -aVamos a crear los enlaces simbólicos:
$ 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_templateEn lugar de crear enlaces, puede configurar OpenKM para crear estos directorios en otras ubicaciones:
repository.extraction.home=/mnt/okm_extractionrepository.datastore.home=/mnt/okm_dstorerepository.cache.home=/mnt/okm_cacherepository.ocr.template.home=/mnt/okm_ocr_templatePara habilitar esta configuración, edite TOMCAT_HOME/openkm.properties y descomente esta parte:
# Cluster - Slavecluster.enabled=truecluster.node=slave