Вы находитесь на странице: 1из 7

Montar un cluster de MySQL

0. ndice de contenidos.

1. Entorno.

2. Introduccin.

3. Configuramos el MGM.

4. Configuramos los nodos de datos NDB y el nodo SQL.

5. Probamos el cluster.

6. Conclusiones.

1. Entorno

Este tutorial est escrito usando el siguiente entorno:

Hardware: Porttil Mac Book Pro 17 (2,6 Ghz Intel Core i7, 8 GB DDR3)

Sistema Operativo: Mac OS X Snow Leopard 10.6.4

4 mquinas virtuales con Ubuntu Server 10.4 en VirtualBox

MySQL 5.1

MySQL Cluster

2. Introduccin

A veces nos encontramos en proyectos donde los entornos de produccin requieren de un sistema
que garantice la alta disponibilidad. Una de las soluciones para conseguir esto es montar la base
de datos en un clster de tal forma que no haya ningn punto dbil en el sistema y si se cae un
nodo que el sistema no deje de dar servicio.

En este tutorial vamos a ver como conseguirlo con la solucin MySQL Cluster. Para seguir el
ejemplo antes tenemos que tener claros los siguientes conceptos:

Motor de almacenamiento NDB: A partir de la versin 5.1 MySQL incorpora este nuevo motor de
almacenamiento especfico para tablas que se encuentran en cluster.
Nodo de administracin (MGM): Es el nodo que se va a encargar de manejar, controlar y coordinar
al resto de nodos del cluster. Debido a esto tiene que ser el primero en iniciarse.

Nodo de datos (NDB): Este tipo de nodo almacena los datos del cluster de forma distribuida. De tal
forma que si uno de ellos cae, el resto de nodos pueden seguir sirviendo la informacin.

Nodo SQL (MYSQLD): Este tipo de nodo nos permite acceder a los datos del cluster.

El ejemplo lo vamos a basar en la siguiente arquitectura:

1 nodo de administracin (MGM)

2 nodos de datos (NDB) que a su vez van a ser nodos SQL (MYSQLD)

1 nodo SQL (MYSQLD)

Grficamente est sera la arquitectura:

3. Configuramos el MGM

Lo primero que tenemos que hacer es configurar el nodo de administracin. Para ello arrancamos
una de las mquinas virtuales e instalamos MySQL con el soporte de NDBCluster. En Ubuntu es tan
sencillo como ejecutar:

sudo apt-get install mysql-cluster-server

Esto hace que se instale MySQL Cluster y MySQL Server y Client como dependencias en la versin
5.1.

A continuacin creamos el fichero /etc/mysql/ndb_mgmd.cnf donde se describe cual va a ser la


arquitectura de clustering y que rol van a adoptar los distintos nodos.

[NDBD DEFAULT]

NoOfReplicas=2

DataMemory=256M

IndexMemory=18M
[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]

[TCP DEFAULT]

[NDB_MGMD]

HostName=192.168.1.10

[NDBD]

HostName=192.168.1.11

DataDir=/var/lib/mysql-cluster

[NDBD]

HostName=192.168.1.12

DataDir=/var/lib/mysql-cluster

[MYSQLD]

HostName=192.168.1.11

[MYSQLD]

HostName=192.168.1.12

[MYSQLD]

HostName=192.168.1.13
Para este caso estamos determinando que nuestro cluster se va a componer de dos replicas de
datos que estn descritas en las secciones [NDBD], donde indicamos cual es la IP de la mquina y
donde se van a almacenar los datos del cluster en esa mquina. Luego en las secciones [MYSQLD]
determinamos la direccin IP de las mquinas que van a poder acceder a los datos del cluster. En
este caso las mquinas NDB tambin adoptaran el rol de nodo SQL y solo una de ellas tendr
exclusivamente este rol. Como se vea en la figura de la arquitectura propuesta.

Nota muy importante: El contenido de este fichero queda cacheado por lo que nos puede pasar
que lo modifiquemos, reiniciemos el servicio y los cambios no se vean reflejados. Para evitar esto
antes de reiniciar el servicio debemos eliminar el fichero cacheado con esta sentencia:

sudo rm /usr/mysql-cluster/ndb_1_config.bin.1

4. Configuramos los nodos de datos NDB y el nodo SQL

Vamos a describir los pasos para uno de ellos, posteriormente habra que repetir estos pasos para
el resto de nodos.

Lo primero sera instalar mysql-cluster-server como se describi en el anterior apartado.

Hecho esto, pasamos a editar el fichero de configuracin /etc/mysql/my.cnf aadiendo en la


seccin existente [mysqld], las siguientes lneas:

ndbcluster

ndb-connectstring=192.168.1.10

Y creamos una seccin [mysql_cluster] con esta informacin:

ndb-connectstring=192.168.1.10

Esta configuracin nos sirve por un lado para habilitar el soporte del motor de almacenamiento
NDBCluster y por otro para saber como conectar con el MGM.
Ahora reiniciamos primero el nodo MGM con la sentencia:

sudo service mysql-ndb-mgm restart

Y posteriormente el resto de nodos que intervienen en el cluster con las sentencias:

sudo service mysql-ndb restart

sudo service mysql restart

En cada caso tenemos que ver que la salida no muestra ningn tipo de error.

Con esto ya estara configurado y arrancado nuestro cluster, ahora vamos a comprobar el estado a
travs del nodo MGM, ejecutando:

ndb_mgm

ndb_mgm > show;

Con lo que el sistema mostrar una pantalla informando de que nodos del cluster estn
conectados. Separndolos en los distintos roles: MGM, NDB y MYSQLD

Hasta que este informe no muestre que todos los nodos estn conectados no podremos probar
nuestro cluster.

Los principales motivos por lo que un nodo puede salir como no conectado una vez se ha
reiniciado su servicio, son que la variable connectstring no est apuntando al nodo MGM o que los
servicios no se han reiniciado apropiadamente.

El que alguno de los nodos SQL no salga conectado es de los problemas ms comunes que se
pueden dar. Si nos aseguramos de que la configuracin est bien y por mas que reiniciamos el
servicio mysql no conseguimos que se conecte al MGM, la mejor solucin es reiniciar
completamente la mquina que este dando el problema. Esto lo resuelve en el 99% de los casos.
5. Probamos el cluster

Una vez que tenemos el cluster perfectamente configurado y arrancados todos los nodos, vamos a
crear una base de datos. Para ello seleccionamos cualquiera de los nodos que tengan un rol de
MYSQLD. Nos logamos como root:

mysql -u root -p

Y proporcionamos la contrasea que hayamos definido para el root. Ahora en la consola de MySQL
creamos nuestro esquema cluster_test con la sentencia:

CREATE SCHEMA cluster_test;

Y ahora creamos nuestra primera tabla sin olvidar utilizar el motor de almacenamiento
NDBCluster. Vamos a crear una sencillita para este ejemplo:

CREATE TABLE table_test (id int) ENGINE=NDB;

E insertamos una serie de registros:

INSERT INTO table_test () VALUES (1);

INSERT INTO table_test () VALUES (2);

INSERT INTO table_test () VALUES (3);

INSERT INTO table_test () VALUES (4);

INSERT INTO table_test () VALUES (5);

Ahora nos logamos en la consola MySQL de cualquier otro nodo con rol MYSQLD en el cluster y
realizamos:

USE table_test;
Vemos que sin hacer nada el schema table_test ya existe y ahora si ejecutamos la sentencia:

SELECT id FROM table_test;

Veremos que el sistema nos devuelve los datos anteriormente introducidos. Esto es porque los
datos del cluster se almacenan en los nodos con rol NDB, y los nodos con rol MYSQLD nos
permiten acceder y trabajar sobre ellos.

Вам также может понравиться