Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
MySQL Cluster
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
'''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 [[punto único de fallo]], cada componente tiene su propia porción de [[disco duro|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 == [[Archivo:Arquitectura-MySQLCluster.png|right|thumb|300px|Arquitectura de MySQL Cluster.]] En su implementación más sencilla, un [[Clúster (informática)|clúster]] [[MySQL]] integra un servidor [[MySQL]] estándar y un [[Mecanismos de almacenamiento (MySQL)|motor de almacenamiento]] en memoria llamado NDB [[clúster]], funcionando en un conjunto de una o más [[Computadora electrónica|computador]]as. Cada una de estas [[Computadora electrónica|computador]]as ejecutando uno o más procesos, que pueden consistir en procesos de [[MySQL]] server, nodos de almacenamiento de [[base de datos|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 clúster MySQL == === Mecanismo de almacenamiento NDB === Utiliza un mecanismo 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 equilibrado de carga y la tolerancia a fallos. === 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 <code>ndb_mgmd</code>. === Nodo de datos === Este tipo de nodo '''almacena los datos'''. La cantidad de nodos de este tipo dentro del clúster es igual a la cantidad de réplicas por la cantidad de fragmentos. Es decir, si se manejan 4 réplicas 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 <code>ndbd</code>. ==== 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 <code>ndbcluster</code>, especificando el archivo de configuración necesario para este [[servidor]] . === Clientes MySQL === Para 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. === Clientes administrativos === Existen otro tipo de clientes que se comunican con el servidor de administración y proveen las mismas funcionalidades que un nodo de este tipo. A diferencia de los nodos administrativos, los clientes permiten ejecutar las tareas de administración remotamente. Algunas tareas que pueden realizarse con estos clientes incluyen iniciar o detener nodos, administrar el seguimiento de mensajes de depuración, mostrar el estado de otros nodos y sus respectivas versiones, realizar respaldos, etc. == Grupos de nodos, Replicación y Particiones == Un 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 <code>'''ndbd'''</code>, conteniendo una réplica de la partición de los datos asignada a ese grupo de nodos. Todos los grupos dentro del clúster deben tener la misma cantidad de nodos de datos. 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 réplicas. == Ejemplo explicativo == A 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 réplicas 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. * '''''Grupo 1''''': Contiene los nodos A y B, su vez tendría asignado las particiones de datos I, III de la siguiente manera ** '''Nodo A''' *** Réplica primaria de la partición I. *** Réplica de respaldo de la partición III. ** '''Nodo B''' *** Réplica primaria de la partición III. *** Réplica respaldo de la partición I. * '''''Grupo 2''''': Contiene los nodos C y D, y tendría asignadas las particiones II y IV de la siguiente manera: ** '''Nodo C''' *** Réplica primaria de la partición II. *** Réplica respaldo de la partición IV. ** '''Nodo D''' *** Réplica primaria de la partición IV. *** Réplica respaldo de la partición II. Siguiendo con este ejemplo, para poder disponer siempre de una réplica de los datos de la base de datos, lo único que es necesario es que al menos uno de los nodos del grupo siga en funcionamiento. Con esto se logra un entorno con un alto grado de tolerancia a fallos. Para ofrecer un mejor nivel de tolerancia es necesario aumentar el número de nodos de datos de manera simétrica dentro de los grupos, así como aumentar de manera proporcional la cantidad de grupos de nodos en el clúster, lo que hace necesario generar más particiones de datos. Si se quisiera aumentar el nivel de tolerancia a fallos del esquema anterior, deberíamos agregar al menos dos nodos debido a la necesidad de crecer de forma simétrica. Se presentan dos opciones: * Una de ellas es agregar un nodo a cada grupo. Esto resulta en tener un total de seis nodos de datos que se refleja en un total de seis particiones. De esta manera seguiríamos contando con dos grupos y los datos distribuidos entre estos dos grupos en particiones más pequeñas. Con este esquema, si todos los nodos de un grupo llegaran a fallar al mismo tiempo, se dejaría de tener disponible el cincuenta por ciento de los datos. * Si en cambio, se agregaran dos nodos más pero a un nuevo grupo de datos, se mantiene la simetría entre grupos, cada uno con dos nodos, pero en este caso cada grupo contaría con un tercio de los datos, lo que se puede ver como una ventaja frente al esquema anterior. Siguiendo este razonamiento, se puede observar otra característica importante de un [[clúster]] [[MySQL]]. El hecho de tener un número mayor de grupos de datos, resulta en disponer de porciones más pequeñas distribuidas de la o las [[bases de datos]] almacenadas en él. Esto hace que si bien siempre existe la posibilidad de que uno o más nodos fallen, porciones más grandes de los datos estarán disponibles todo el tiempo, aumentando la tolerancia a falla de la manera que se considere necesaria. == Procesos Principales == === MySQLD === El 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 (<code>my.cfg</code>) se debe especificar el string de conexión a dicho servidor. La comunicación entre servidores se realiza mediante el protocolo [[TCP/IP]] por lo cual es necesario indicar en el string de conexión la dirección [[Dirección IP|IP]] del nodo administrativo y el puerto en el cual se publica el servicio de administración. === NDBD === El proceso <code>ndbd</code> es el encargado de manejar todos los datos de las tablas utilizando el motor ndbd clúster. Este proceso soporta la funcionalidad de manejo de transacciones distribuidas entre los nodos, recuperación de nodos defectuosos o fuera de línea, ''checkpoint to disk'' (el momento en el que los datos son escritos efectivamente a disco), respaldo en línea, y otras tareas relativas a la distribución del [[clúster]]. El conjunto de procesos distribuido <code>ndbd</code> cooperan colectivamente en la tarea de manejo de datos. Cada uno de estos procesos genera un conjunto de archivos de log independientes que es almacenado en el directorio DataDir especificado en el archivo de configuración de cada nodo de datos (<code>config.ini</code>). Para poder conectar un nodo de datos es necesario proveer al proceso ndbd con la información necesaria acerca del nodo administrativo. Análogamente a como se realiza con el nodo [[MySQL]] [[servidor|server]], se debe especificar dirección [[Dirección IP|IP]] y puerto del mismo en el archivo de configuración. Cuándo un proceso <code>ndbd</code> comienza su ejecución, se levantan dos procesos, uno de ellos es llamado '''angel'''. El proceso angel supervisa la ejecución del proceso de almacenamiento, y en caso de falla, vuelve a iniciarlo. Por esto, si se intenta detener el proceso <code>ndbd</code> utilizando el comando <code>[[kill]]</code> de [[Unix]], es necesario acabar con los dos procesos, comenzando con el ''proceso angel'', dado que sino este volverá a iniciar el proceso de datos. La mejor manera de acabar con un proceso <code>ndbd</code> de un nodo es utilizando los comandos apropiados en el nodo de administración o utilizando un cliente de administración externo. 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 [[Bloqueo mutuo|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_MGMD === Es 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 [[Interfaz de programación de aplicaciones|API]] en [[C (lenguaje de programación)|C]]. Esta [[Interfaz de programación de aplicaciones|API]] se puede utilizar para desarrollar aplicaciones dedicadas a controlar y administrar el clúster de una manera personalizada. == Replicación de clusters == A partir de la versión 5.1.6 (febrero de 2006), [[MySQL]] soporta escenarios de alta disponibilidad en el que los clusters pueden ser replicados completamente de forma automática. Para estos escenarios, [[MySQL]] brinda una arquitectura en la cual los distintos [[servidor]]es funcionan en un escenario de maestro-esclavo. [[Archivo:Replicación de clusters MySQL.png|thumb|Replicación de Clusters.|500px|center]] Para lograr la replicación, se define uno o más canales de replicación para conectar los [[servidor]]es (un segundo canal puede ser usado como respaldo). El [[servidor]] maestro genera un log de transacciones [[Archivo binario|binario]] con todas las acciones realizadas en el [[servidor]]. Ese log es utilizado para realizar la sincronización de forma asíncrona en el [[servidor]] esclavo. A partir de la versión 5.1.18, mayo de 2007, de [[MySQL]] es posible realizar ciclos de replicación entre los clusters, pudiendo un servidor actuar de maestro para un cluster y de esclavo para otro logrando así una propagación circular de los datos (en versiones anteriores existía un bug que impedía este comportamiento) :''Nota: Todos los servidores deben ser compatibles en versiones y protocolos de replicación. Se recomienda utilizar la misma versión de [[MySQL]] en todos los equipos de la granja.'' == Véase también == * [[Mecanismos de almacenamiento (MySQL)]] {{Control de autoridades}} [[Categoría:Sistemas de gestión de bases de datos libres]] [[Categoría:MySQL]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
MySQL Cluster
»
Añadir idiomas
Añadir tema