Feb 1, 2009

Cluster para base de datos (I)

MySQL Cluster es una tecnología que permite clusterizar distintas bases de datos en memoria y en un área de trabajo no compartida. En el Sistema de Alta Disponibilidad y Balanceo de Carga que estamos configurando (el último punto que tratamos fue el servicio FTP mediante vsftpd), se configurará una base de datos en cluster utilizando para ellos los cuatro nodos del sistema.

La arquitectura de no compartición permite que el sistema global funcione sin ningún requerimiento especial hardware y software, y el riesgo de fallo de la infraestructura sea mínimo debido a que se empleará la memoria y el disco de cada una de las máquinas involucradas, y en caso de caída de alguna de ellas, el sistema seguiría funcionando correctamente con los elementos restantes.

MySQL Cluster integra el servidor MySQL estándar junto con un motor de almacenamiento clusterizado en memoria denominado NDB. Se denomina MySQL Cluster a la solución resultante de combinar MySQL y dicho motor de almacenamiento.

En un esquema MySQL Cluster mínimo, existen tres tipos de nodos diferentes:

  • Nodo de administración (MGM): tiene la función de administrar el resto de nodos del cluster (configuraciones, iniciar y detener nodos, realizar copias de seguridad, etc). Los servicios utilizados por este tipo de nodo son ndb_mgmd (Management Server) y ndb_mgm (Management Client).
  • Nodo SQL: tiene la función de acceder a los datos del cluster y ofrecer dicha información a las aplicaciones solicitantes. El servicio utilizado por este tipo de nodo es mysqld (MySQL Server).
  • Nodo de datos: almacena los datos del cluster. El servicio utilizado por este tipo de nodo es ndbd (NDB Server).

En la figura anterior puede observarse que el sistema está formado por dos elementos principales: el cluster de MySQL y las aplicaciones clientes que interactúan con él, como por ejemplo un cliente MySQL.

Dentro del cluster, se distinguen tres componentes. La aplicación que hace de interfaz real entre los clientes y el cluster en sí, es MySQL Server (mysqld). Pueden existir tantos demonios de MySQL Server como sean necesarios. Como se ha comentado anteriormente, la tarea de este tipo de nodo será la de ofrecer la información a los clientes, proveniente ésta de los nodos de almacenamiento, y la de copiar los datos que estos mismos clientes deseen almacenar en el cluster.

Cuando se produzca una operación de escritura, MySQL Server accederá a uno de los nodos de almacenamiento (ndbd) y escribirá la información en él. A su vez, este mismo nodo replicará la información al resto de nodos de almacenamiento.

Y por último, el nodo de administración (ndb_mgmd) tendrá la misión de dirigir toda esta infraestructura (controlar qué nodos están funcionando, iniciar o detener servicios, realizar copias de seguridad, etc). Este demonio será controlado por una aplicación cliente (ndb_mgm).

Como puede observarse en el esquema anterior, si uno de los nodos de almacenamiento se cae, el sistema seguirá funcionando correctamente. Cuando se vuelva a recuperar, actualizará la información a la que contengan el resto de nodos de datos. Si se cae alguno de los nodos MySQL Server, tampoco ocurrirá nada, ya que las aplicaciones clientes seguirán comunicándose con el nodo o nodos restantes.

En el siguiente artículo trasladaré este tipo de infraestructura al Sistema de Alta Disponibilidad y Balanceo de Carga que estoy desarrollando.

No comments:

Post a Comment