jueves, 21 de abril de 2011

Soluciones de backup y restore para Alfresco

Uno de los requisitos habituales que piden las organizaciones cuando están estudiando implantar una herramienta de gestión documental, como Alfresco, es que la gestión de los backups de los contenidos sea lo más sencilla posible.

La gestión de los bakups tiene dos vertientes de interés:
  • La definición de una política de backup y restore de todo el repositorio de contenidos. Normalmente vinculada a la estrategia de Disaster Recovery del sistema.
  • La definición de una estrategia para la recuperación de contenidos individuales "perdidos" durante la operativa habitual del sistema.
En el caso particular de Alfresco, no hay herramientas concretas proporcionadas por el fabricante para ninguna de estas dos tareas. Lo máximo de lo que se dispone es de un conjunto de recomendaciones o best practices para conseguir estos objetivos.

Full backups

Un backup completo de Alfresco implica tres elementos: el repositorio de contenidos, la base de datos y los índices de Lucene.

De los tres elementos mencionados los más importantes son el repositorio de contenidos y la base de datos. Estos dos elementos se han de guardar conjuntamente y recuperar también juntos. Restaurar un elemento sin estar sincronizado con el otro implica acabar con un repositorio corrupto. Los índices no son tan importantes porque siempre se pueden recuperar a partir de la información de la base de datos y el repositorio.

La mejor estrategia de backup consiste en detener el Alfresco y hacer el backup de cada componente usando las herramientas proporcionadas por los fabricantes de cada sistema. Llamaremos a esta estrategia cold bakcup.

En el caso de que no se pueda detener el servicio de Alfresco para hacer la copia se tendrá que proceder a una copia en caliente del sistema. Llamaremos a esta estrategia hot backup. Esta solución es más delicada y depende sobre todo de la capacidad del sistema de base de datos de realizar copias seguras (respetando la transaccionalidad del sistema). En esta solución el orden en el que se guardan los elementos es fundamental y se debe respetar para garantizar una copia consistente de los datos. El orden es el siguiente:
  1. Asegurarse de que el backup automático de los índices se ha completado. Ha de existir la carpeta backup-lucene-indexes en el directorio apuntado por dir.root.
  2. Hacer la copia de seguridad de la base de datos utilizando las herramientas proporcionadas por el fabricante del RDBMS.
  3. Inmediatemente después de guardar la base de datos, hay que copiar los subdirectorios del directorio dir.root. Esta operación se puede hacer con rsync, xcopy, robocopy o cualquier otra herramienta de copia.
La razón de este orden es que los elementos de base de datos que se hayan añadido después de guardar los índices, se pueden regenerar mediante una reindexación (AUTO o FULL) de los índices de Lucene. Los contenidos que se hayan añadido al repositorio después de que se haya guardado la base de datos se consideraran fuera del backup y podrán entrar en el siguiente (si se guardara antes el repositorio que la base de datos, podrían aparecer elementos huérfanos que son más difíciles de recuperar).

La operación de restore consiste en detener el Alfresco y restaurar la copia de la base de datos y la copia del sistema de ficheros. Al arrancar de nuevo el Alfresco, puede ser necesario modificar el parámetro index.recovery.mode y ponerlo a FULL o a AUTO para que regenere los índices que falten.

Restore de ficheros únicos

Cuando un contenido de Alfresco se pierde por el motivo que sea (aunque lo más seguro sea por negligencia del usuario) se puede recuperar de diversas formas:
  • Si el documento tiene activado el versionado, se puede recuperar la versión anterior del historial de versiones y guardarla como la versión actual. Esta es una buena práctica para documentos de trabajo con actualizaciones frecuentes.
  • Si el documento ha sido borrado accidentalmente, se puede recuperar de la papelera de reciclaje de Alfresco. Esta papelera sólo es accesible desde Alfresco Explorer. Los usuarios o administradores pueden acceder a ella en su Profile.
  • Si el documento no está versionado y no está en la papelera (porque se ha borrado de ahí) hay que recurrir a los back ups de base de datos y file system.
Alfresco no proporciona ninguna herramienta para recuperar un archivo único de una copia de backup. La única opción "oficial" es restaurar las copias en un entorno independiente/nuevo de Alfresco y recuperar el fichero de dicho entorno. Esta solución es poco práctica cuando el volumen del repositorio es muy grande porque no siempre se dispondrá del espacio y tiempo necesarios para recuperar el file system completo en un nuevo entorno.

La solución al problema consiste en explorar directamente la base de datos de Alfresco y obtener la referencia al documento buscado para poder recuperar el archivo directamente del dispositivo de backup donde esté almacenado. Para ello, el único elemento que se ha de recuperar es la base de datos de Alfresco. Este elemento es más fácil de restaurar porque ocupa mucho menos espacio que el file system.

A partir de la información de un contenido almacenada en la base de datos se puede reconstruir el path del archivo conrrespondiente a dicho contenido. Los datos que se necesitan para hacer esta recuperación son el nombre del fichero y la última fecha en la que el contenido estaba correctamente almacenado en el repositorio. La consulta* que se ha de ejecutar para recuperar la ubicación de un fichero llamado 'demo.txt' sería:

select a.node_id, db.content_url
from

alfresco.ALF_NODE_PROPERTIES a,

alfresco.ALF_QNAME b,

alfresco.ALF_NAMESPACE c,

alfresco.ALF_NODE_PROPERTIES ab,

alfresco.ALF_QNAME bb,

alfresco.ALF_NAMESPACE cb,

alfresco.ALF_CONTENT_URL db

where
a.STRING_VALUE='demo.txt'

and
a.QNAME_ID = b.ID

and
b.NS_ID = c.ID

and
a.NODE_ID = ab.NODE_ID

and
ab.QNAME_ID = bb.ID

and
bb.NS_ID= cb.ID

and
ab.LONG_VALUE = db.ID

and
b.LOCAL_NAME = 'name'

and
c.URI = 'http://www.alfresco.org/model/content/1.0'

and
bb.LOCAL_NAME = 'content'

and
cb.URI = 'http://www.alfresco.org/model/content/1.0'



Esta consulta devuelve el identificador interno del nodo correspondiente al contenido y la url de la ubicación del fichero en el sistema de ficheros.

La estructura de la url de la ubicación del fichero del ejemplo es la siguiente:

store://2011/2/22/16/21/e7067340-9ca6-4e5b-b53b-b17dfaecf1b7.bin
  • store:/ hace referencia al almacén del fichero.
  • /2011/2/22/16/21 es el path donde está el fichero a partir del directorio raíz del alf_data contentstore.
  • e7067340-9ca6-4e5b-b53b-b17dfaecf1b7.bin es el nombre del fichero en el disco. Este nombre se puede substituir por el nombre original (p.e. demo.txt) y así se recuperaría el archivo perdido.
En el caso de que la consulta devuelva más de un registro, correspondientes a las diferentes versiones del documento, se puede utilizar el valor de la columna NODE_ID para recuperar la entrada adecuada a la versión buscada. La siguiente columna es un ejemplo de como recuperar la etiqueta de la versión:

select a.string_value
from
alfresco.ALF_NODE_PROPERTIES a,

alfresco.ALF_QNAME b,

alfresco.ALF_NAMESPACE c

where
a.NODE_ID = 540

and
a.QNAME_ID = b.ID

and
b.NS_ID = c.ID

and
b.LOCAL_NAME = 'versionLabel'

and
c.URI = 'http://www.alfresco.org/model/content/1.0'



A partir de la versión se puede recuperar el fichero correcto.

*Las consultas de este artículo están probadas en una versión 3.4.1 Enterprise.

11 comentarios:

Morgalad dijo...

Hola Alejandro,
En el caso de que vayan a hacer una copia de seguridad manual del directorio del repositorio en windows por favor no recomendaria nunca xcopy, a falta de una solucion comercial de backup, te recomiendo que eches un vistazo a ROBOCOPY (viene en casi todos los resource kits desde windows 2000)

http://es.wikipedia.org/wiki/Robocopy

Esto ahora muchisimo tiempo en los backups ya que no copia los ficheros que no hayan cambiado desde el anterior backup (size, date... o lo que sea, es programable)

Alejandro Ugartondo dijo...

Gracias Morgalad, ya he incluido tu sugerencia en el post

Raúl dijo...

Hola Alejandro,
pegale un repaso a la consulta SQL, creo que falta una tabla por importar (alf_content_data) y alguna condición. El valor que devuelve no es el correcto.

Alejandro Ugartondo dijo...

Hola Raul

La query funciona bien si el contenido no está versionado. En el caso de trabajar con versiones hay que hacer la query quitando la parte correspondiente a ALF_CONTENT_URL y usar la segunda query para recuperar el fichero correspondiente a la versión

Raúl dijo...

la query devuelve un nodo pero el nodo que devuelve no es el que se busca, hice la prueba con copy paste y cuando miré el archivo no era el correcto. En el foro de alfresco encontré la clave

la clave alf_node_properties.string_value coincide con alf_content_data.id y no con alf_content_url.id como tiene la consulta

He creado una entrada en mi blog con esto corregido:

http://alfrescoadmin.blogspot.com/2011/05/backup-en-alfresco.html

Clari dijo...

no se mucho de informática pero realice un backup y algunos programas se me desinstalaron.. como el antivirus gratis y algunos otros. solo guarda datos cuando uno realiza este tipo de acciones?

Alejandro Ugartondo dijo...

Hola Clari, qué clase de backup has realizado? Has utilizado alguna de las herramientas sugeridas en el post? Normalmente un backup no altera la información que guarda por lo que tu problema debe estar provocado por alguna otra causa

problemas con su ordenador dijo...

Hola. Actualmente tengo el Alfresco Instalado en una particion diferente a la tipica de Windows por lo cual el unico backup que tengo es la imagen completa del disco. Leyendo incluso la documentacion oficial no he dado con el restore de la BBDD. Es decir exporto el archivo .backup en el posgrade admin pero al restaurarlo en un equipo con una instalacion limpia del Alfresco (los mismos puertos, rutas de BBDD del Tomcat) me da error de salida 1.
Agradeceria que me dijeran como es el procedimiento completo para restaurar el alfresco a un equipo diferente y me quedase igual que el original.
Muchas gracias.

yurelvis denis dijo...

Hola: necesito ayuda por favor, tengo el alfresco community 4.2e, y recientemente he adquirido un modulo para la creación de expedientes, necesito cambiar el logo y algunas cosas en este modulo, pero la persona que me lo dió me dice que debo entrar a la ruta siguiente:Data Dictionary -> Presentation templates (en castellano Diccionario de datos -> Plantillas de presentación, para encontrar el fichero: expedient_preview.ftl y para mi sorpresa esa ruta ni ese fichero aparecen en mi instalación de alfresco.Como encontrar estas carpetas, que debo hacer? Su gentil ayuda por favor con este tema.

Alejandro Ugartondo dijo...

yurelvis: para acceder a esa ruta te has de conectar a Alfresco y la encontrarás en el Company home . Si no la ves, intenta conectarte con un usuario administrador de Alfresco

yurelvis denis dijo...

Gracias mi estimado Alejandro,ya he encontrado lo que buscaba y le he asignado el logo correspondiente, de veras mil gracias...