Clúster MySQL

Tecnología de fragmentación automática para bases de datos MySQL

Clúster MySQL
Desarrollador(es)Oráculo
Lanzamiento inicialNoviembre de 2004
Versión estable
8.4.3 / 16 de octubre de 2024 ; hace 9 días [1] ( 16/10/2024 )
Sistema operativoMultiplataforma [ ¿cuál? ]
Disponible enInglés
TipoSistema de gestión de bases de datos relacionales (RDBMS)
LicenciaLicencia 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 ) .

Arquitectura

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) .

Replicación

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]

Partición horizontal de datos (fragmentación automática)

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.

Almacenamiento híbrido

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.

No compartí nada

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 .

API de SQL y NoSQL

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:

  • Acceso a SQL a través del servidor MySQL
  • API NoSQL en las que las bibliotecas de MySQL Cluster se pueden incorporar a 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 / DESCANSO
    • API de NDB (C++)

Administrador de clústeres MySQL

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.

Operador Ndb de MySQL

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.

Clúster NDB

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:

  • Capacidad de análisis, optimización y ejecución de SQL
    • Conectores a aplicaciones a través de JDBC , ODBC , etc.
  • Mecanismo de unión entre tablas
  • Autenticación y autorización de usuarios
  • Replicación asincrónica de datos a otros sistemas

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.

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 dividen 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 la supervisión del clúster. Solo se requiere para iniciar o reiniciar un nodo del clúster. También se pueden configurar como árbitros, pero esto no es obligatorio (los servidores MySQL se pueden configurar como árbitros en su lugar). [7]
  • 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 utilizando la API C++ o una de las API NoSQL adicionales descritas anteriormente.

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).

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 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:

  • Serie de lanzamientos innovadores de MySQL Cluster 9.X
  • MySQL Cluster 8.4 LTS basado en la versión MySQL 8.4 LTS
Agregar soporte para TLS en 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, manejo mejorado de esquemas y ACL, cambio de nombre de columna en línea, configuración simplificada, copia de seguridad y restauración paralelas multiproceso, mejoras en el rendimiento de los datos del disco, compatibilidad mejorada para configuraciones de 3 y 4 réplicas, compatibilidad con redes en malla de múltiples sockets, compatibilidad con transformaciones de restauración, rendimiento de escritura de blobs mejorado, cifrado de copia de seguridad, compatibilidad con IPv6, configuración automática de subprocesos, rendimiento de recuperación mejorado, subprocesos múltiples de consultas mejorados. [8]
  • MySQL Cluster 7.6 basado en MySQL 5.7
Tiempos de reinicio y recuperación mejorados, uso reducido del espacio en disco, rendimiento mejorado de la unión, nueva herramienta de importación, comunicación de memoria compartida, conocimiento mejorado de la topología para la nube. [9]

Versiones anteriores (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 a través de tablas optimizadas de lectura y soporte SQL mejorado. [10]
  • MySQL Cluster 7.4 basado en MySQL 5.6
Incluye detección y resolución de conflictos mejorada, tiempos de reinicio de nodos mejorados y nueva API de eventos. [11]
  • MySQL Cluster 7.3 basado en MySQL 5.6
Incluye soporte para restricciones de clave externa , API Node.js / JavaScript y un instalador automático. [12]
  • MySQL Cluster 7.2 basado en MySQL 5.5
Incluye localización de consultas adaptativas (envía operaciones JOIN a los nodos de datos), API Memcached, replicación geográfica activa/activa simplificada, agrupamiento en múltiples sitios, mejoras de escalabilidad de nodos de datos y privilegios de usuario consolidados. [13]
  • MySQL Cluster 7.1 basado en MySQL 5.1.D
Incluye conectores ClusterJ y ClusterJPA
  • MySQL Cluster 7.0 basado en MySQL 5.1.C
Incluye nodos de datos multiproceso (ndbmtd), DDL transaccional y compatibilidad con Windows.
  • MySQL Cluster 6.3 basado en MySQL 5.1.B
Incluye copia de seguridad comprimida + LCP, soporte de 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 "carrier grade edition". Admite 255 nodos, modificación de tablas en línea, latencia de replicación y mejoras de 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 solo servidor físico. Para implementaciones de producción, los requisitos mínimos del sistema son 3 instancias/hosts:

  • 2 × Nodos de datos
  • 1 × Nodo de aplicación/gestión

o

  • 2 × Nodo de datos + Aplicación
  • 1 × Nodo de gestión

Configuraciones como sigue:

  • Sistema operativo: Linux , Solaris , Windows y macOS (solo para desarrollo)
  • Procesador: Intel/AMD x86/x86-64, UltraSPARC
  • Memoria: 1 GB
  • Disco duro: 3 GB
  • Red: 1+ nodos (Ethernet estándar - TCP/IP)

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.

Historia

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.

Libros

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.

Apoyo

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.

Véase también

  • Galera Cluster, una biblioteca genérica de replicación multimaestro sincrónica para bases de datos transaccionales, para MySQL y MariaDB. [2]
  • Percona XtraDB Cluster también es una combinación de la biblioteca de replicación Galera y MySQL que admite múltiples maestros.
  • RonDB Una bifurcación de MySQL Cluster mantenida por Hopsworks. [17]

Referencias

  1. ^ "Notas de la versión de MySQL NDB Cluster 8.4". mysql.com .
  2. ^ Cluster CGE. MySQL. Consultado el 18 de septiembre de 2013.
  3. ^ Oracle Corporation. "MySQL Cluster Benchmarks: Oracle e Intel alcanzan 1.000 millones de escrituras por minuto". mysql.com . Consultado el 24 de junio de 2013 .
  4. ^ MySQL :: Manual de referencia de MySQL 5.6 :: 17.6.11 Resolución de conflictos de replicación de clústeres MySQL. Dev.mysql.com. Consultado el 18 de septiembre de 2013.
  5. ^ Replicación sincrónica de bases de datos en distintos centros de datos: ¿está loco? (blog MySQL de Oracle). Blogs.oracle.com (3 de octubre de 2011). Recuperado el 18 de septiembre de 2013.
  6. ^ [1] Guía para desarrolladores de MySQL Cluster API
  7. ^ Jon Stephens, Mike Kruckenberg, Roland Bouman (2007): "Guía de estudio para la certificación MySQL 5.1 Cluster DBA", págs. 86
  8. ^ "MySQL :: Manual de referencia de MySQL 8.0 :: 22.1.4 Novedades en NDB Cluster". dev.mysql.com .
  9. ^ MySQL Cluster 7.6 ya está disponible de forma general, Blog MySQL de Oracle, 1 de junio de 2018
  10. ^ MySQL Cluster 7.5 ya está disponible, Blog MySQL de Oracle, 18 de octubre de 2016
  11. ^ MySQL Cluster 7.4 GA: 200 millones de QPS, replicación geográfica activa-activa y más, resumen de MySQL Cluster 7.4
  12. ^ MySQL Cluster 7.3 ya está disponible de forma general: descripción general, resumen de MySQL Cluster 7.3
  13. ^ Nuevas características de MySQL Cluster 7.2, Zona para desarrolladores de MySQL
  14. ^ Todd R. Weiss (14 de octubre de 2003). "MySQL adquiere el proveedor de sistemas de gestión de datos Alzato". Computerworld.com . Consultado el 5 de noviembre de 2012 .
  15. ^ 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 .
  16. ^ 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 .
  17. ^ "Anuncio de RonDB" . Consultado el 1 de agosto de 2022 .

MySQL

  • Documentación oficial de MySQL Cluster
  • Guía para desarrolladores de MySQL Cluster API
  • Demostración de MySQL Cluster
  • Ficha técnica del clúster MySQL
  • Preguntas frecuentes sobre MySQL Cluster
  • Tutorial de instalación automática de MySQL Cluster
  • Introducción a MySQL Cluster
  • Guías y documentos técnicos sobre MySQL Cluster
  • Foro de la comunidad de MySQL Cluster

Otro

  • Diseño y modelado de un servidor de datos paralelo para aplicaciones de telecomunicaciones (1997) Motivación original del diseño del MySQL Cluster.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Cluster_MySQL&oldid=1253316106"