MySQL Cluster , también conocido como MySQL NDB Cluster, es una tecnología que proporciona clustering sin recursos compartidos y auto-fragmentación 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. [ 2 ] MySQL Cluster se implementa a través del motor de almacenamiento NDB o NDBCLUSTER para MySQL ("NDB" significa Network Database ).
Arquitectura
MySQL Cluster está diseñado en torno a una arquitectura distribuida, multi-maestro y compatible con ACID , sin un único punto de fallo . MySQL Cluster utiliza particionamiento automático para escalar las operaciones de lectura y escritura en hardware estándar y se puede acceder a él mediante API SQL y NoSQL .
Replicación
Internamente, MySQL Cluster utiliza la replicación síncrona mediante 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 del número de réplicas y nodos de datos especificados por el usuario. Las actualizaciones se replican síncronamente 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 de Cluster difiere de la "Replicación MySQL", que es asíncrona .
También es posible replicar de forma asíncrona entre clústeres; esto a veces se denomina "replicación de clúster MySQL" o "replicación geográfica". Normalmente se utiliza para replicar clústeres entre centros de datos para la recuperación ante desastres informáticos 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 estándar de MySQL, la replicación geográfica de MySQL Cluster utiliza el control de concurrencia optimista y el concepto de épocas para proporcionar un mecanismo de detección y resolución de conflictos, [ 3 ] lo que permite la agrupación en clústeres activo/activo entre centros de datos.
A partir de MySQL Cluster 7.2, se incorporó la replicación síncrona entre centros de datos con la función de clúster multisitio. [ 4 ]
Particionamiento horizontal de datos (auto-sharding)
MySQL Cluster se implementa como una base de datos multi-maestro totalmente 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 en las tablas de MySQL Cluster (NDB) se particionan automáticamente entre todos los nodos del sistema. Esto se realiza mediante un algoritmo de hash basado en la clave primaria de la tabla , y es transparente para la aplicación final . Los clientes pueden conectarse a cualquier nodo del clúster y acceder automáticamente a las particiones necesarias para resolver una consulta o confirmar una transacción. MySQL Cluster admite consultas y transacciones entre particiones.
Los usuarios pueden definir sus propios esquemas de particionamiento. Esto permite a los desarrolladores incorporar la funcionalidad de distribución a las aplicaciones mediante el particionamiento basado en una subclave común a todas las filas a las que acceden las transacciones de alta frecuencia. De esta forma, se garantiza que los datos utilizados para completar las transacciones se localicen en el mismo fragmento, lo que reduce los saltos de red.
Almacenamiento híbrido
MySQL Cluster permite almacenar y acceder a conjuntos de datos que superan la capacidad de una sola máquina desde varias máquinas.
MySQL Cluster mantiene todas las columnas indexadas en memoria distribuida. Las columnas no indexadas también pueden mantenerse en memoria distribuida o en disco mediante una caché de páginas en memoria . Almacenar las columnas no indexadas en disco permite a MySQL Cluster almacenar conjuntos de datos mayores que la memoria total de las máquinas del clúster.
MySQL Cluster escribe los registros de rehacer en disco para todos los cambios de datos, además de guardar los datos de los punteros de comprobación en disco periódicamente. Esto permite que el clúster se recupere de forma consistente desde el disco tras una interrupción total del servicio. Dado que los registros de rehacer se escriben de forma asíncrona con respecto a la confirmación de las transacciones, se puede perder un pequeño número de transacciones si falla todo el clúster; sin embargo, esto se puede mitigar mediante la replicación geográfica o la configuración de clústeres multisitio, como se mencionó anteriormente. El retardo de escritura asíncrona predeterminado actual es de 2 segundos y es configurable. Los escenarios normales de punto único de fallo no provocan ninguna pérdida de datos debido a la replicación síncrona de datos dentro del clúster.
Cuando una tabla de MySQL Cluster se mantiene en memoria, el clúster solo accede al almacenamiento en disco para escribir registros de rehacer y puntos de control. Dado que estas escrituras son secuenciales y se utilizan patrones de acceso aleatorio limitados, MySQL Cluster puede lograr mayores tasas de escritura con hardware de disco limitado en comparación con un sistema de gestión de bases de datos relacionales (RDBMS) tradicional con caché en disco. Este almacenamiento en disco de los datos de las tablas en memoria se puede deshabilitar (tabla por tabla) si no se requiere persistencia en disco.
No compartimos nada
MySQL Cluster está diseñado para no tener un único punto de fallo . Si el clúster está configurado correctamente, cualquier nodo, sistema o componente 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 SCI .
API SQL y NoSQL
Dado que MySQL Cluster almacena las tablas en los nodos de datos, en lugar de en el servidor MySQL, existen múltiples interfaces disponibles para acceder a la base de datos:
- Acceso SQL a través del servidor MySQL
- Las API NoSQL permiten integrar bibliotecas de MySQL Cluster en una aplicación para proporcionar acceso directo a los nodos de datos sin pasar por una capa SQL. Estas incluyen:
- Memcached
- Node.js / JavaScript
- Java y JPA
- HTTP / REST
- API de NDB (C++)
Administrador de clústeres MySQL
MySQL Cluster Manager, que forma parte del paquete comercial MySQL Cluster CGE, 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 gestión comunes, como el escalado en línea, las actualizaciones, las copias de seguridad/restauración y la reconfiguración. MySQL Cluster Manager también supervisa y recupera automáticamente los nodos de aplicación y de gestión de MySQL Server, así como los nodos de datos de MySQL Cluster.
Operador Ndb de MySQL
El operador MySQL Ndb de código abierto simplifica la implementación y el funcionamiento de MySQL Cluster en un clúster de Kubernetes . Ndb Operator implementa nodos de datos, administración y SQL de MySQL Cluster en contenedores, dentro de varios StatefulSets, con los datos almacenados en volúmenes persistentes. Los mecanismos de Kubernetes amplían las funciones de alta disponibilidad de MySQL Cluster, por ejemplo, restaurando automáticamente la redundancia de alta disponibilidad tras fallos de hardware mediante la migración de pods a nuevo hardware. Al operar MySQL Cluster en Kubernetes, se puede gestionar un conjunto completo de software nativo de la nube de la misma manera, tanto en nubes privadas como públicas.
Clúster NDB
NDB Cluster es el sistema de base de datos distribuida subyacente a MySQL Cluster. Puede utilizarse independientemente de un servidor MySQL , y los usuarios acceden al clúster a través de la API de NDB (C++). "NDB" significa base de datos de red .
Desde la perspectiva del servidor MySQL, el clúster NDB es un motor de almacenamiento para guardar tablas de filas .
Desde la perspectiva del clúster NDB, una instancia de servidor MySQL es un proceso API conectado al clúster. El clúster NDB puede admitir simultáneamente el acceso desde otros tipos de procesos API, como Memcached, JavaScript/Node.js, Java, JPA y HTTP/REST. Todos los procesos API pueden operar sobre las mismas tablas y datos almacenados en el clúster NDB.
MySQL Cluster utiliza el servidor MySQL para proporcionar las siguientes capacidades sobre Ndb Cluster:
- Capacidad de análisis, optimización y ejecución de SQL
- Mecanismo de unión entre tablas
- Autenticación y autorización de usuarios
- Replicación asíncrona de datos a otros sistemas
Todos los procesos de la API, incluido el servidor MySQL, utilizan la biblioteca cliente C++ NDBAPI [ 5 ] para conectarse al clúster NDB y realizar operaciones.
Implementación
MySQL Cluster utiliza tres tipos diferentes de nodos (procesos) :
- Nodo de datos (proceso ndbd/ndbmtd) : Estos nodos almacenan los datos. Las tablas se distribuyen automáticamente entre los nodos de datos, que también gestionan de forma transparente el equilibrio de carga, la replicación, la conmutación por error y la autorreparación.
- Nodo de administración (proceso ndb_mgmd) : Se utiliza para la configuración y el monitoreo del clúster. Solo se requiere para iniciar o reiniciar un nodo del clúster. También se puede configurar como árbitro, pero esto no es obligatorio (en su lugar, se pueden configurar servidores MySQL como árbitros). [ 6 ]
- Nodo de aplicación o nodo SQL (proceso mysqld) : Un servidor MySQL (mysqld) que se conecta a todos los nodos de datos para almacenar y recuperar datos. Este tipo de nodo es opcional; es posible consultar los nodos de datos directamente a través de la API NDB, ya sea de forma nativa mediante la API de C++ o mediante alguna de las API NoSQL adicionales descritas anteriormente.
Por lo general, se espera que cada nodo se ejecute en un host físico, máquina virtual o instancia en la nube independiente (aunque es muy común ubicar los nodos de administración junto con los servidores MySQL). Como buena práctica, se recomienda no ubicar los nodos del mismo grupo en un único host físico (ya que esto representaría un único punto de fallo).
Versiones
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 y lo incluía.
Las versiones superiores de MySQL Cluster incluyen todas las características de las versiones inferiores, además de algunas características nuevas. Versiones disponibles actualmente:
- MySQL Cluster 9.7 LTS basado en la versión MySQL 9.7 LTS
- MySQL Cluster 8.4 LTS basado en la versión MySQL 8.4 LTS
- Agregar compatibilidad con TLS en las conexiones internas del clúster.
- MySQL Cluster 8.0 basado en MySQL 8.0
- Aumento del tamaño máximo de fila a 30 kB, compatibilidad con hasta 144 nodos de datos, filtrado y unión distribuidos mejorados, compatibilidad con uniones externas paralelas y semiuniones, gestión mejorada de esquemas y ACL, cambio de nombre de columna en línea, configuración simplificada, copia de seguridad y restauración paralelas multihilo, mejoras en el rendimiento de los datos en disco, compatibilidad mejorada con configuraciones de 3 y 4 réplicas, compatibilidad con redes de malla de múltiples sockets, compatibilidad con transformaciones de restauración, rendimiento de escritura de blobs mejorado, cifrado de copias de seguridad, compatibilidad con IPv6, autoconfiguración de subprocesos, rendimiento de recuperación mejorado, multihilo de consultas mejorado. [ 7 ]
- MySQL Cluster 7.6 basado en MySQL 5.7
- Tiempos de reinicio y recuperación mejorados, uso de espacio en disco reducido, rendimiento de unión mejorado, nueva herramienta de importación, comunicación de memoria compartida, conocimiento mejorado de la topología para la nube. [ 8 ]
Versiones anteriores (que ya no están en desarrollo):
- MySQL Cluster 8.1 basado en la versión MySQL 8.1 Innovation
- MySQL Cluster 8.2 basado en la versión MySQL 8.2 Innovation
- MySQL Cluster 8.3 basado en la versión MySQL 8.3 Innovation
- MySQL Cluster 7.5 basado en MySQL 5.7
- Incluye soporte para conjuntos de datos más grandes (más de 128 TB por nodo), escalabilidad de lectura mejorada mediante tablas optimizadas para lectura y soporte SQL mejorado. [ 9 ]
- MySQL Cluster 7.4 basado en MySQL 5.6
- Incluye detección y resolución de conflictos mejoradas, tiempos de reinicio de nodos optimizados y una nueva API de eventos. [ 10 ]
- MySQL Cluster 7.3 basado en MySQL 5.6
- Incluye soporte para restricciones de clave externa , API de Node.js / JavaScript y un instalador automático. [ 11 ]
- MySQL Cluster 7.2 basado en MySQL 5.5
- Incluye localización adaptativa de consultas (que traslada las operaciones JOIN a los nodos de datos), API de Memcached, replicación geográfica activa/activa simplificada, agrupación en clústeres multisitio, mejoras en la escalabilidad de los nodos de datos y privilegios de usuario consolidados. [ 12 ]
- MySQL Cluster 7.1 basado en MySQL 5.1.D
- Incluye conectores para ClusterJ y ClusterJPA.
- MySQL Cluster 7.0 basado en MySQL 5.1.C
- Incluye nodos de datos multihilo (ndbmtd), DDL transaccional y compatibilidad con Windows.
- MySQL Cluster 6.3 basado en MySQL 5.1.B
- Incluye copia de seguridad comprimida + LCP, compatibilidad con replicación circular, detección/resolución de conflictos, optimización de tablas, etc.
- MySQL Cluster 6.2 basado en MySQL 5.1.A
- Primera versión "telco" o "edición de grado operador". Admite 255 nodos, modificación de tablas en línea, mejoras en la latencia de replicación y el rendimiento, etc.
- Ndb incluido en el árbol de código fuente de MySQL 5.1.X
Requisitos
Para fines de evaluación, es posible ejecutar MySQL Cluster en un único servidor físico. Para implementaciones en producción, los requisitos mínimos del sistema son para 3 instancias/hosts:
- 2 × Nodos de datos
- 1 × Nodo de aplicación/gestión
o
- 2 × Nodo de datos + Aplicación
- 1 × Nodo de administración
Configuraciones como sigue:
- Sistemas operativos: Linux , Solaris , Windows , macOS (solo para desarrollo).
- CPU: Intel/AMD x86/x86-64, UltraSPARC
- Memoria: 1 GB
- Disco duro: 3 GB
- Red: 1 o más nodos (Ethernet estándar - TCP/IP)
En la Guía de evaluación de clústeres MySQL y en la Guía para optimizar el rendimiento de la base de datos del clúster MySQL encontrará consejos y recomendaciones sobre cómo implementar clústeres de alto rendimiento y aptos para producción .
Historia
MySQL AB adquirió la tecnología detrás de MySQL Cluster de Alzato , una pequeña empresa emergente fundada por Ericsson . NDB fue diseñado originalmente para el mercado de las telecomunicaciones , con sus requisitos de alta disponibilidad y alto rendimiento. [ 13 ]
MySQL Cluster, basado en el motor de almacenamiento NDB, se integró posteriormente en el producto MySQL , siendo su primera versión lanzada en MySQL 4.1.
Libros
MySQL Cluster 7.5 por dentro y por fuera. [ 14 ] Libro escrito por Mikael Ronström, el fundador de la tecnología NDB.
Pro MySQL NDB Cluster. [ 15 ] Libro escrito por Jesper Wisborg Krogh y Mikiya Okuno, ingenieros de soporte de MySQL.
Apoyo
MySQL Cluster se distribuye bajo la licencia GPLv 2. El soporte comercial está disponible como parte de MySQL Cluster CGE, que también incluye complementos no de código abierto como MySQL Cluster Manager, MySQL Enterprise Monitor, además de MySQL Enterprise Security y MySQL Enterprise Audit.
Véase también
- Galera Cluster, [ 16 ] una biblioteca genérica de replicación síncrona multi-maestro para bases de datos transaccionales para MySQL y MariaDB .
- Percona Server para MySQL XtraDB Cluster es una combinación de la biblioteca de replicación Galera y MySQL compatible con múltiples maestros.
- RonDB, [ 17 ] una bifurcación de MySQL Cluster mantenida por Hopsworks.
Referencias
- ↑ "Notas de la versión 9.7 de MySQL NDB Cluster" . mysql.com .
- ↑ Oracle Corporation. "Pruebas de rendimiento de clústeres MySQL: Oracle e Intel alcanzan mil millones de escrituras por minuto" . mysql.com . Consultado el 24 de junio de 2013 .
- ↑ MySQL :: Manual de referencia de MySQL 5.6 :: 17.6.11 Resolución de conflictos de replicación de clúster de MySQL . Dev.mysql.com. Consultado el 18 de septiembre de 2013.
- ↑ Replicación síncrona de bases de datos entre centros de datos: ¿estás loco? (Blog de MySQL de Oracle) . Blogs.oracle.com (3 de octubre de 2011). Consultado el 18 de septiembre de 2013.
- ↑Guía del desarrollador de la API de clúster de MySQL
- ↑ Jon Stephens, Mike Kruckenberg, Roland Bouman (2007): "Guía de estudio para la certificación de administrador de bases de datos en clúster MySQL 5.1" , págs. 86
- ↑ "MySQL :: Manual de referencia de MySQL 8.0 :: 22.1.4 Novedades en NDB Cluster" . dev.mysql.com .
- ↑ MySQL Cluster 7.6 ya está disponible para el público en general , Blog de MySQL de Oracle, 1 de junio de 2018
- ↑ ¡MySQL Cluster 7.5 ya está disponible! , Blog de MySQL de Oracle, 18 de octubre de 2016
- ↑ MySQL Cluster 7.4 GA: 200 millones de consultas por segundo, replicación geográfica activa-activa y más , Resumen de MySQL Cluster 7.4
- ↑ MySQL Cluster 7.3 ya está disponible de forma general: una descripción general , Resumen de MySQL Cluster 7.3
- ↑ Nuevas características de MySQL Cluster 7.2 , Zona de desarrolladores de MySQL
- ↑ Todd R. Weiss (14 de octubre de 2003). "MySQL adquiere al proveedor de sistemas de gestión de datos Alzato" . Computerworld.com . Consultado el 5 de noviembre de 2012 .
- ↑ Mikael Ronström (12 de febrero de 2018). "MySQL Cluster 7.5 por dentro y por fuera" . bod.se. Consultado el 1 de agosto de 2022 .
- ^ Jesper Wisborg Krogh, Mikiya Okuno (2017). Clúster Pro MySQL NDB . apress.com. doi : 10.1007/978-1-4842-2982-8 . ISBN 978-1-4842-2981-1. S2CID 10326666 . Consultado el 1 de agosto de 2022 .
- ↑ Clúster Galera
- ↑ "Anuncio de RonDB" . Consultado el 1 de agosto de 2022 .
Enlaces externos
MySQL
- Documentación oficial de MySQL Cluster
- Guía para desarrolladores de la API de clúster de MySQL
- Demostración de clúster MySQL
- Hoja de datos del clúster MySQL
- Preguntas frecuentes sobre clústeres MySQL
- Tutorial del instalador automático de clústeres MySQL
- Primeros pasos con MySQL Cluster
- Documentos técnicos y guías sobre clústeres MySQL
- Foro de la comunidad de clústeres MySQL
Otro
- Diseño y modelado de un servidor de datos paralelo para aplicaciones de telecomunicaciones (1997). Motivación original del diseño del clúster MySQL.
- MySQL
- computación en clúster