Desarrollador(es) | Oráculo |
---|---|
Lanzamiento inicial | Noviembre de 2004 |
Versión estable | 8.4.3 / 16 de octubre de 2024 ( 16/10/2024 ) [1] |
Sistema operativo | Multiplataforma [ ¿cuál? ] |
Disponible en | Inglés |
Tipo | Sistema de gestión de bases de datos relacionales (RDBMS) |
Licencia | Licencia pública general GNU (versión 2, con excepción de enlaces ) o EULA comercial |
Sitio web | [2] |
MySQL Cluster , también conocido como MySQL Ndb Cluster, es una tecnología que proporciona agrupación en clústeres sin recursos compartidos y fragmentación automática para el sistema de gestión de bases de datos MySQL . Está diseñado para proporcionar alta disponibilidad y alto rendimiento con baja latencia, al tiempo que permite una escalabilidad casi lineal. [3] MySQL Cluster se implementa a través del motor de almacenamiento NDB o NDBCLUSTER para MySQL ("NDB" significa Network Data B ase ) .
MySQL Cluster está diseñado en torno a una arquitectura distribuida, compatible con ACID y multimaster sin un único punto de falla . MySQL Cluster utiliza particionamiento automático para escalar las operaciones de lectura y escritura en hardware básico y se puede acceder a él a través de API SQL y No SQL (NoSQL) .
MySQL Cluster utiliza internamente una replicación sincrónica a través de un mecanismo de confirmación en dos fases para garantizar que los datos se escriban en varios nodos al confirmarlos. Se requieren dos copias (conocidas como réplicas ) de los datos para garantizar la disponibilidad. MySQL Cluster crea automáticamente "grupos de nodos" a partir de la cantidad de réplicas y nodos de datos especificados por el usuario. Las actualizaciones se replican de forma sincrónica entre los miembros del grupo de nodos para proteger contra la pérdida de datos y admitir una conmutación por error rápida entre nodos. La replicación en clúster se diferencia de la "replicación MySQL", que, en cambio, es asincrónica.
También es posible replicar de forma asincrónica entre clústeres; esto a veces se denomina "replicación de clúster MySQL" o "replicación geográfica". Esto se utiliza normalmente para replicar clústeres entre centros de datos para la recuperación ante desastres de TI o para reducir los efectos de la latencia de la red al ubicar los datos físicamente más cerca de un conjunto de usuarios. A diferencia de la replicación MySQL estándar, la replicación geográfica de MySQL Cluster utiliza un control de concurrencia optimista y el concepto de épocas para proporcionar un mecanismo de detección y resolución de conflictos, [4] lo que permite la agrupación activa/activa entre centros de datos.
A partir de MySQL Cluster 7.2, se incorporó la compatibilidad con la replicación sincrónica entre centros de datos con la función de agrupamiento en múltiples sitios. [5]
MySQL Cluster se implementa como una base de datos multimaestro completamente distribuida, lo que garantiza que las actualizaciones realizadas por cualquier aplicación o nodo SQL estén disponibles instantáneamente para todos los demás nodos que acceden al clúster, y cada nodo de datos puede aceptar operaciones de escritura.
Los datos dentro de las tablas de MySQL Cluster (NDB) se particionan automáticamente en todos los nodos de datos del sistema. Esto se hace en función de un algoritmo de hash basado en la clave principal de la tabla y es transparente para la aplicación final . Los clientes pueden conectarse a cualquier nodo del clúster y hacer que las consultas accedan automáticamente a los fragmentos correctos necesarios para satisfacer una consulta o confirmar una transacción. MySQL Cluster puede admitir consultas y transacciones entre fragmentos.
Los usuarios pueden definir sus propios esquemas de particionamiento. Esto permite a los desarrolladores agregar “conocimiento de la distribución” a las aplicaciones al realizar particiones en función de una subclave que es común a todas las filas a las que acceden las transacciones de alto nivel. Esto garantiza que los datos utilizados para completar las transacciones se localicen en el mismo fragmento, lo que reduce los saltos de red.
MySQL Cluster permite almacenar conjuntos de datos más grandes que la capacidad de una sola máquina y acceder a ellos en varias máquinas.
MySQL Cluster mantiene todas las columnas indexadas en la memoria distribuida. Las columnas no indexadas también se pueden mantener en la memoria distribuida o en el disco con un caché de páginas en memoria . El almacenamiento de columnas no indexadas en el disco permite a MySQL Cluster almacenar conjuntos de datos más grandes que la memoria agregada de las máquinas agrupadas.
MySQL Cluster escribe registros Redo en el disco para todos los cambios de datos, así como también verifica los datos en el disco con regularidad. Esto permite que el clúster se recupere de manera constante desde el disco después de una interrupción total del clúster. Como los registros Redo se escriben de manera asincrónica con respecto a la confirmación de transacciones, se puede perder una pequeña cantidad de transacciones si falla todo el clúster; sin embargo, esto se puede mitigar mediante el uso de la replicación geográfica o el clúster de varios sitios, como se mencionó anteriormente. El retraso de escritura asincrónica predeterminado actual es de 2 segundos y se puede configurar. Los escenarios normales de un solo punto de falla no dan como resultado ninguna pérdida de datos debido a la replicación de datos sincrónica dentro del clúster.
Cuando una tabla de MySQL Cluster se mantiene en la memoria, el clúster solo accederá al almacenamiento en disco para escribir registros Redo y puntos de control. Como estas escrituras son secuenciales y se involucran patrones de acceso aleatorio limitados, MySQL Cluster puede lograr tasas de rendimiento de escritura más altas con hardware de disco limitado en comparación con un RDBMS de almacenamiento en caché basado en disco tradicional. Este punto de control al disco de los datos de la tabla en memoria se puede deshabilitar (por tabla) si no se necesita la persistencia basada en disco.
MySQL Cluster está diseñado para que no haya un único punto de fallo . Siempre que el clúster esté configurado correctamente, cualquier nodo, sistema o pieza de hardware puede fallar sin que falle todo el clúster. No se requiere disco compartido ( SAN ). Las interconexiones entre nodos pueden ser Ethernet estándar , Gigabit Ethernet , InfiniBand o interconexiones SCI .
Como MySQL Cluster almacena tablas en nodos de datos, en lugar de en el servidor MySQL, hay varias interfaces disponibles para acceder a la base de datos:
MySQL Cluster Manager, parte del MySQL Cluster CGE comercial, es una herramienta diseñada para simplificar la creación y administración de la base de datos MySQL Cluster CGE mediante la automatización de tareas de administración comunes, que incluyen escalado en línea, actualizaciones, copias de seguridad/restauración y reconfiguración. MySQL Cluster Manager también monitorea y recupera automáticamente los nodos de aplicación y administración de MySQL Server, así como los nodos de datos de MySQL Cluster.
El operador Ndb de MySQL de código abierto simplifica la implementación y el funcionamiento de MySQL Cluster en un clúster de Kubernetes . El operador Ndb implementa nodos de SQL, administración y datos de MySQL Cluster en contenedores en una serie de StatefulSets con datos almacenados en volúmenes persistentes. Los mecanismos de Kubernetes amplían las características de alta disponibilidad de MySQL Cluster, por ejemplo, restaurando automáticamente la redundancia de alta disponibilidad después de fallas de hardware mediante la migración de pods a un nuevo hardware. El funcionamiento de MySQL Cluster en Kubernetes permite que una pila completa de software nativo de la nube funcione de la misma manera en nubes privadas o públicas.
NDB Cluster es el sistema de base de datos distribuida que subyace a MySQL Cluster. Se puede utilizar independientemente de un servidor MySQL y los usuarios pueden acceder al clúster a través de la API NDB (C++). "NDB" significa Network Data B ase ( base de datos de red) .
Desde la perspectiva del servidor MySQL, el clúster NDB es un motor de almacenamiento para almacenar tablas de filas .
Desde la perspectiva de NDB Cluster, una instancia de MySQL Server es un proceso API conectado al clúster. NDB Cluster puede admitir simultáneamente el acceso desde otros tipos de procesos API, incluidos Memcached, JavaScript/Node.JS, Java, JPA y HTTP/REST. Todos los procesos API pueden operar en las mismas tablas y datos almacenados en NDB Cluster.
MySQL Cluster utiliza MySQL Server para proporcionar las siguientes capacidades además de Ndb Cluster:
Todos los procesos de API, incluido el servidor MySQL, utilizan la biblioteca de cliente C++ NDBAPI [6] para conectarse al clúster NDB y realizar operaciones.
MySQL Cluster utiliza tres tipos diferentes de nodos (procesos):
En general, se espera que cada nodo se ejecute en un host físico, una máquina virtual o una instancia de nube independientes (aunque es muy común ubicar nodos de administración junto con servidores MySQL). Para una mejor práctica, se recomienda no ubicar nodos dentro del mismo grupo de nodos en un solo host físico (ya que eso representaría un único punto de falla).
A partir de la versión 8.0, MySQL Cluster se basa directamente en las versiones correspondientes de MySQL Server. Anteriormente, los números de versión de MySQL Cluster estaban desvinculados de los de MySQL Server; por ejemplo, MySQL Cluster 7.6 se basaba en el componente de servidor de MySQL 5.7 o lo contenía.
Las versiones superiores de MySQL Cluster incluyen todas las funciones de las versiones anteriores, además de algunas nuevas. Versiones disponibles actualmente:
Versiones anteriores (ya no están en desarrollo):
Para fines de evaluación, es posible ejecutar MySQL Cluster en un solo servidor físico. Para implementaciones de producción, los requisitos mínimos del sistema son 3 instancias/hosts:
o
Configuraciones como sigue:
Se pueden encontrar sugerencias y recomendaciones sobre la implementación de clústeres de alto rendimiento y nivel de producción en la Guía de evaluación de clústeres MySQL y la Guía para optimizar el rendimiento de la base de datos de clústeres MySQL.
MySQL AB adquirió la tecnología detrás de MySQL Cluster de Alzato, una pequeña empresa fundada por Ericsson . NDB fue diseñado originalmente para el mercado de telecomunicaciones , con sus requisitos de alta disponibilidad y alto rendimiento. [14]
Desde entonces, MySQL Cluster, basado en el motor de almacenamiento NDB, se ha integrado en el producto MySQL , y su primer lanzamiento fue MySQL 4.1.
MySQL Cluster 7.5 de dentro a fuera. [15] Libro escrito por Mikael Ronström, el fundador de la tecnología NDB.
Pro MySQL NDB Cluster. [16] Libro escrito por Jesper Wisborg Krogh y Mikiya Okuno, ingenieros de soporte de MySQL.
MySQL Cluster tiene licencia GPLv 2. El soporte comercial está disponible como parte de MySQL Cluster CGE, que también incluye complementos que no son de código abierto, como MySQL Cluster Manager, MySQL Enterprise Monitor, además de MySQL Enterprise Security y MySQL Enterprise Audit.