« Atrás

Alta disponibilidad y tolerancia a fallos en Alfresco Enterprise 3.4 con Oracle RAC 10g

Uno de los requisitos más importantes en una configuración de producción de Alfresco es que la información esté alojada en un sistema con alta disponibilidad y tolerancia a fallos. En este post presentaremos una configuración sobre Oracle RAC 10g para garantizar que Alfresco siempre tendrá disponible una fuente de datos.

[Los impacientes pueden ir directamente a la sección Configuración de Oracle RAC en Alfresco Enterprise 3.4]

- Para poder montar este entorno es importante que conozcas los prerequisitos:
+ Una instancia de Alfresco Enterprise 3.4 funcionando o limpia (primer arranque).
+ Oracle RAC 10g funcionando con un servicio configurado y dos host. En el stack soportado de Alfresco Enterprise 3.4 se recomienda la versión Oracle 10g v10.2.0.4, yo también te la recomiendo ;-).

Primero las definiciones : Alta disponibilidad y tolerancia a fallos

Cuando hablamos de alta disponibilidad nos estamos refiriendo al grado en el que el sistema está accesible para los usuarios. Coloquialmente, un sistema en alta disponibilidad es el que "no se cae nunca". La disponibilidad de un sistema puede ser cuantificada tomando como base la disponibilidad total conocida como 24x7.

La tolerancia a fallos se refiere a la capacidad de un sistema para recuperarse de errores hardware, desastres inesperados y otras condiciones anormales.

Alta disponibilidad y tolerancia a fallos en Alfresco Enterprise 3.4

Alfresco tiene capacidad para trabajar en Cluster, tanto la versión Community (la gratuita) como la Enterprise (de pago). Alfresco se despliegua normalmente en distintos niveles hardware (varias máquinas físicas o virtuales), normalmente, contamos al menos con un nivel de aplicación (las máquinas donde están desplegadas las instancias de Alfresco) y un nivel de datos o integración donde se encuentran las máquinas con las instancias de nuestro gestor de base de datos (Oracle, MySQL, PostgreSQL...) y los dispositivos de almacenamiento (discos duros, NAS, SAN ...).

Para conseguir un despliegue completo en alta disponibilidad y tolerancia a fallos es necesario que cada uno de los niveles esté desplegado de esa forma. Sería necesario montar una replicación de contenido sobre varios dispositivos de almacenamiento, configurar Alfresco en Cluster y disponer de una fuente de datos con alta disponibilidad y tolerancia a fallos. En este post sólo nos vamos a centrar en lo último, en concreto, en la configuración de una fuente de datos óptima para producción sobre Oracle.

En el siguiente diagrama se ilustra el despliegue que vamos a intentar configurar.

Diagrama de despliegue Alfresco Enterprise con Oracle RAC

 

Alta disponibilidad en el SGBD con Alfresco

Alfresco guarda la información en dos espacios de almacenamiento de distinta naturaleza: el gestor de base de datos y el espacio de almacenamiento o filesystem. Como sabes, los metadatos del nodo se guardan en la base de datos mientras que el contenido se guarda directamente en el espacio de almacenamiento (un disco duro, por ejemplo), al igual que los índices de búsquedas. Alfresco utiliza internamente una fuente de datos (DataSource de Java) para almacenar la información que acompaña al contenido. Esta fuente de datos puede estar mapeada contra cualquiera de los gestores de base de datos más frecuentes en el mercado: Oracle, MySQL, PostgreSQL, ... Desde la versión 3, Oracle sólo está soportado en la versión Enterprise.

La alta disponibilidad y la tolerancia a fallos a nivel de SGBD no es manejada por Alfresco sino por el driver JDBC de Oracle, el conocido como ojdbc14.jar . Lo puedes descargar de la web oficial de Oracle, pero ¡recuerda elegir el adecuado para tu versión de Oracle! (http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html). Es decir, Alfresco tan sólo le solicita una conexión al driver JDBC y este la obtiene del RAC de Oracle. El Driver JDBC tiene la capacidad de recuperarse ante fallos, es decir, si uno de los host de nuestro Oracle RAC se cae, las conexiones que tenía este host pasarán a ser gestionadas por otro host que esté disponible. Por tanto, para Alfresco, la alta disponibilidad y tolerancia a fallos del Datasource es transparente.

Configuración de Oracle RAC en Alfresco Enterprise 3.4

1.) Descarga el driver JDBC de Oracle (ojdbc14.jar) de la web oficial de Oracle y copialo a la carpeta de librerías compartidas de tu servidor. En las instalaciones sobre Tomcat (v.5 y v.6) la carpeta suele tener esta ruta: /shared/lib. Recuerda que esta ruta es configurable en Tomcat, puedes verla en el fichero /conf/catalina.properties en la clave de configuración shared.loader, generalmente para Alfresco debe tener el valor shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar

2.) Editar el fichero alfresco-global.properties para configurar nuestra fuente de datos. ¡Esta configuración sólo es válida para Alfresco Enterprise, la versión Community puede no funcionar sobre Oracle!.

Debemos establecer las siguientes claves:

  • db.driver: Nombre de la clase que implementa el driver Oracle. No modificar. Siempre es oracle.jdbc.OracleDriver.
  • db.url: URL de la fuente de datos. Aquí es donde entra en juego Oracle RAC, la alta disponibilidad y la tolerancia a fallos. Para que el driver JDBC nos gestione estas características debemos especificar una URL de Oracle RAC válida. La construcción de esta cadena es sencilla y está documentada en la web oficial de Oracle (por ejemplo, para la versión 10g puedes verlo aquí: http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames... . En nuestro ejemplo voy a usar una cadena de conexión que trabaja contra 2 máquinas (192.168.1.10 y 192.168.1.11) donde se han instalado instancias de Oracle y que están escuchando en el puerto 21. Mi servicio se llama ALFRESCO (debes configurarlo en el tnsnames.ora). La URL que pongo está construida para que se gestionen los fallos (en la parte de FAILOVER_MODE) y para que en condiciones normales se haga balanceo de carga entre las dos instancias.
  • db.pool.validate.query: Consulta que se va a utilizar para verificar que la conexión está funcionando. Para Oracle no hay que modificar la que os pongo.

Ejemplo de configuración [alfresco-global.properties] (sólo debes modificar lo que está en rojo)

db.driver=oracle.jdbc.OracleDriver
db.url=jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT
= 1521))(LOAD_BALANCE = yes)(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME =
ALFRESCO)(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 20)(DELAY =
1))))
db.pool.validate.query=SELECT 1 FROM DUAL

3.) Sólo si tienes varias instancias distintas de Alfresco trabajando sobre una misma base de datos Oracle (cada instancia persiste los datos en un esquema distinto), deberás además añadir en cada instancia la siguiente clave para forzar a las consultas sobre metadatos a trabajar con el esquema con el que cada instancia de Alfresco está trabajando:

hibernate.default_schema=ALFRESCO

4.) Si tu Alfresco ya tenía datos (no es la primera vez que arrancas) asegúrate que todos los host de Oracle que has apuntado desde la cadena JDBC tienen los datos (impórtalos con un script SQL si ya lo tenías en otra instancia de Oracle).

5.) Comprueba con una herramienta como TOAD que la cadena de conexión es correcta.

6.) Arranca Alfresco y disfruta o pon un comentario si falla con tu log!

Sobre Oracle RAC y las licencias de Alfresco Enterprise

Para utilizar Oracle RAC contra Alfresco no es necesario adquirir licencias de clustering de la versión enterprise. Se puede utilizar Oracle en cluster independientemente de la configuración en cluster o no de Alfresco. Con la licencia más barata de Alfresco Enterprise, la conocida como "1CPU" es suficiente. No obstante, recuerda que el licenciamiento de Oracle RAC va aparte y no está incluido en la licencia básica de Oracle Database.

TODO

Dejo para otro post y para vosotros las pruebas para ver que está funcionando correctamente (cortar comunicación con uno de los host desde el nivel de aplicación para ver si Alfresco se reconecta a otro host, por ejemplo).

¡Espero vuestras contribuciones!... más cadenas de configuración JDBC, comentarios útiles, etc.

Comentarios
URL de Trackback:

comments powered by Disqus