MySQL clúster es una tecnología que permite el clustering de bases de datos en memoria en un ambiente de no compartición. La arquitectura de no compartición permite que el sistema gestor de base de datos (SGBD) funcione utilizando hardware no muy costoso y con requerimientos mínimos tanto de software como de hardware. Como todo sistema de clustering, está diseñado para no tener un sólo punto de falla, cada componente tiene su propia porción de disco y memoria para trabajar. Bajo este esquema no se recomienda el uso de mecanismos de almacenamiento compartido como carpetas compartidas por red, sistemas de archivos de red, etc. Arquitectura básica de un clúster MySQL En su implementación más sencilla, un clúster MySQL integra un servidor MySQL estándar y un motor de almacenamiento en memoria llamado NDB clúster, funcionando en un conjunto de una o más computadoras. Cada una de estas computadoras ejecutando uno o más procesos, que pueden consistir en procesos de MySQL server, nodos de almacenamiento de datos, servidor administrador del clúster, o programas especializados para acceder a los datos. Las tablas de la base de datos se almacenan utilizando el motor NDB en los nodos de almacenamiento. La manera de acceder a los datos almacenados en el clúster es a través de cualquiera de los nodos MySQL. Los nodos de datos funcionan utilizando un esquema de espejado, permitiendo soportar sin impacto la caída de nodos individuales de datos dentro de cluster. La única consecuencia que tendría un suceso como la caída de un nodo de datos, es que un pequeño conjunto de transacciones relacionados al nodo caído serán abortadas. Estas transacciones deben cumplir con el esquema transaccional, tal y como si estuvieran trabajando directamente con un servidor no clusterizado de MySQL. Conceptos principales de un cluster MySQLMotor de almacenamiento NDBEste es un motor de almacenamiento en memoria que ofrece alta disponibilidad y persistencia de datos. Es altamente configurable ofreciendo un gran número de opciones para manejar el balanceo de cargas y la tolerancia a fallas. Nodo de administración (Nodo MGM)Este tipo de nodo cumple con la función de manejar, controlar y
coordinar los otros nodos dentro del clúster. Implementa funciones de
configuración de datos, Iniciar o detener otros nodos dentro del
clúster, ejecutar respaldos, u otras tareas administrativas. Debido a
que controla y configura el resto de los nodos, debe iniciarse antes
que cualquier otro tipo de nodos utilizando el comando Nodo de datosEste tipo de nodo almacena los datos. La cantidad de nodos de
este tipo dentro del cluster es igual a a la cantidad de replicas por
la cantidad de fragmentos. Es decir, si se manejan 4 replicas de los
datos con 2 fragmentos, se necesitarían 8 nodos de datos. No es
necesario manejar más de una réplica. Este tipo de nodo se levanta
utilizando el comando Nodo SQL (MySQL server)A través de este tipo de nodos se accede a los datos clusterizados. Básicamente, consiste en un servidor MySQL Server que utiliza el motor de almacenamiento NDB. Se inicia utilizando el comando Clientes MySQLPara conectarse a un cluster MySQL remotamente, se debe utilizar el mismo cliente utilizado para conectarse a un servidor MySQL no clusterizado. El clúster es transparente para los clientes. Grupos de nodos, Replicación y ParticionesUn clúster MySQL
permite generar grupos de nodos de datos. Esto significa que uno o más
nodos de datos funcionan como uno gran nodo y aislado de otros grupos.
Cada nodo individual debería estar localizado en computadoras
separadas, es decir en cada computadora dentro del clúster solo debería
ejecutar un proceso Las particiones de datos que son asignadas a los grupos de nodos consisten simplemente en porciones de los datos almacenados en el clúster. Generalmente se mantiene dentro del grupo una copia primaria de la partición de datos y una o más copias de respaldo, por si el nodo conteniendo la partición primaria llegara a fallar. La cantidad copias de una partición de datos está dada por la cantidad de nodos contenidos en el grupo. Las copias se denominan replicas. Ejemplo explicativoA continuación presentamos un ejemplo con cuatro nodos de datos contenidos en dos grupos de nodos y cuatro particiones distribuidas entre estos dos grupos. Cada nodo de datos almacenará dos replicas de los datos, una primaria de una partición de datos y otra la réplica de otra de las particiones. En el esquema anterior tendríamos la siguiente situación. Una base de datos cuyos datos se encuentran distribuidos en cuatro particiones, I, II, III, IV.
Procesos PrincipalesMySQLDEl proceso de servidor de bases de datos tradicional que puede ser utilizado en ambientes de clúster o aislado. Para que este proceso sea utilizado dentro de un clúster MySQL, necesita ser construido especialmente para soportar el motor de almacenamiento NDB, los binarios compilados disponibles en el sitio de MySQL ya integran esta funcionalidad al proceso. Una manera fácil de asegurase que se dispone de la versión correcta para un clúster MySQL es invocando el comando SHOW ENGINES dentro del ambiente desde el servidor buscando la existencia del motor NDB. Este comando muestra la totalidad de los motores soportados por el proceso actualmente instalado. Para poder unir un servidor MySQL a un cluster, es necesario poder interactuar con el nodo de administración de dicho cluster. Para esto en el archivo de configuración de MySQL ( NDBDEl proceso El conjunto de procesos distribuido Cuándo un proceso El proceso de ejecución utiliza un hilo para leer, escribir, escanear datos y realizar otras actividades. Este hilo está implementado de manera asíncrona con el objetivo de poder realizar fácilmente múltiples actividades concurrentes. Se utiliza otro hilo para supervisar que la ejecución no se detenga o genere un deadlock. El acceso a los archivos en el disco se realiza a través de múltiples hilos, manejando cada uno un archivo de datos en particular. De esta forma el proceso ndbd es capaz de hacer uso exhaustivo de arquitecturas con múltiples procesadores de una manera óptima. NDB_MGMDEs el proceso que controla el servidor de administración, siendo responsable de conocer y mantener la configuración del clúster y distribuir dicha información a todos los nodos que la soliciten al unirse al cluster. Mantiene también el log de las actividades del clúster y reporta su estado a los clientes que se conectan a él. En un esquema con un único servidor de administración, no es necesario especificar un string de conexión al nodod de administración dado que es el mismo el propio servidor. Si se está trabajando en un esquema donde existe más de un nodo de administración se debe especificar identificar cada uno con un ID específico e indicar las cadenas de conexión a cada uno de ellos. Junto con el proceso NDB_MDMd se encuentra ndb_mgm, que es responsable de manejar el cliente de administración que interactúa con el nodo de administración. El cliente de administración se comunica con el nodo de administración utilizando una API en C. Esta API se puede utilizar para desarrollar aplicaciones dedicadas a controlar y administrar el clúster de una manera personalizada. |