You are on page 1of 6

Entra en Adictos a travs de

Entrar
Deseo registrarme
Olvid mi contrasea
Inicio Quines somos Formacin Comparador de salarios Nuestros libros Ms
Ests en: Inicio Tutoriales Montar un cluster de MySQL
Sguenos a travs
de:
Catlogo de servicios
Autentia

ltimas Noticias
Screencasts de
programacin narrados en
Espaol
Sorteo de entradas para
APIdays Mediterranea
Concurso del Da de la
Madre:
Aprende gratis
ReactiveCocoa
Checklist de Scrum de
Autentia
Histrico de noticias
ltimos Tutoriales
Cmo integrar en Gradle un
servidor Jetty o Tomcat
Taller de Ventas
Introduccin a Spring Data
Hadoop
Desarrollando una aplicacin
de deteccin de iBeacons
SCRATCH, aprende a
programar desde nio

Ver todos los tutoriales del autor
Rubn Aguilera Daz-Heredero
Consultor tecnolgico de desarrollo de proyectos informticos.
Ingeniero en Informtica, especialidad en Ingeniera del Software
Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factora y
formacin
Somos expertos en Java/J2EE
Fecha de publicacin del tutorial: 2012-04-14 Tutorial visitado 12.102 veces Descargar en PDF
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:
More Share Share Share Share Share Share
Montar un cluster de MySQL http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=My...
1 de 6 10/06/2014 1:18 p. m.
IMPULSA
Impulsores Comunidad Ayuda?
52
clicks
+ + + + +
3 personas han trado clicks a esta pgina
powered by karmacracy
ltimos Tutoriales del
Autor
Crear un plugin para Android
en PhoneGap
Intercomunicacin de
aplicaciones en IOS
Crashlytics en IOS
Acceso a la cmara con
PhoneGap
Empezando con PhoneGap
Categoras del Tutorial
Mysql
BBDD
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:
view plain print ?
sudo apt-get install mysql-cluster-server 01.
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.
view plain print ?
[NDBD DEFAU!" 01.
No#$%eplicas&' 0'.
Data(emory&')*( 0+.
,nde-(emory&1.( 0/.
0).
[(012D DEFAU!" 0*.
03.
[NDB4(5(D DEFAU!" 0..
06.
[!78 DEFAU!" 10.
11.
[NDB4(5(D" 1'.
9ostName&16'.1*..1.10 1+.
1/.
[NDBD" 1).
9ostName&16'.1*..1.11 1*.
DataDir&:var:li;:mysql-cluster 13.
1..
[NDBD" 16.
9ostName&16'.1*..1.1' '0.
DataDir&:var:li;:mysql-cluster '1.
''.
[(012D" '+.
9ostName&16'.1*..1.11 '/.
').
[(012D" '*.
9ostName&16'.1*..1.1' '3.
'..
[(012D" '6.
9ostName&16'.1*..1.1+ +0.
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:
view plain print ?
sudo rm :usr:mysql-cluster:nd;414con$ig.;in.1 01.
Montar un cluster de MySQL http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=My...
2 de 6 10/06/2014 1:18 p. m.
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:
view plain print ?
nd;cluster 01.
nd;-connectstring&16'.1*..1.10 0'.
Y creamos una seccin [mysql_cluster] con esta informacin:
view plain print ?
nd;-connectstring&16'.1*..1.10 01.
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:
view plain print ?
sudo service mysql-nd;-mgm restart 01.
Y posteriormente el resto de nodos que intervienen en el cluster con las sentencias:
view plain print ?
sudo service mysql-nd; restart 01.
sudo service mysql restart 0'.
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:
view plain print ?
nd;4mgm 01.
nd;4mgm > s<o=> 0'.
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:
view plain print ?
mysql -u root -p 01.
Y proporcionamos la contrasea que hayamos definido para el root. Ahora en la consola de MySQL creamos nuestro esquema
Montar un cluster de MySQL http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=My...
3 de 6 10/06/2014 1:18 p. m.
Share |

Registrate y accede a esta y otras ventajas
Anmate y comntanos lo que pienses sobre este TUTORIAL:
"cluster_test" con la sentencia:
view plain print ?
CREATE SCHEMA cluster4test> 01.
Y ahora creamos nuestra primera tabla sin olvidar utilizar el motor de almacenamiento NDBCluster. Vamos a crear una
sencillita para este ejemplo:
view plain print ?
CREATE TABLE ta;le4test ?id int@ EN5,NE&NDB> 01.
E insertamos una serie de registros:
view plain print ?
INSERT INTO ta;le4test ?@ VALUES ?1@> 01.
INSERT INTO ta;le4test ?@ VALUES ?'@> 0'.
INSERT INTO ta;le4test ?@ VALUES ?+@> 0+.
INSERT INTO ta;le4test ?@ VALUES ?/@> 0/.
INSERT INTO ta;le4test ?@ VALUES ?)@> 0).
Ahora nos logamos en la consola MySQL de cualquier otro nodo con rol MYSQLD en el cluster y realizamos:
view plain print ?
U1E ta;le4test> 01.
Vemos que sin hacer nada el schema table_test ya existe y ahora si ejecutamos la sentencia:
view plain print ?
SELECT id FROM ta;le4test> 01.
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.
6. Conclusiones
Hemos visto lo sencillo que puede ser montar un sistema de alta disponibilidad para los entornos de produccin con MySQL.
Si por lo que sea no consigues configurarlo correctamente, no dudes en preguntar.
Cualquier duda o sugerencia en la zona de comentarios.
Saludos.
A continuacin puedes evaluarlo:
Regstrate para evaluarlo
Por favor, vota +1 o comprtelo si te pareci interesante
Fecha publicacin: 2014-04-24-20:03:20
Autor: miguel120688
puedo hacer este ejemplo con 2 servidores rehat pero utilizando ip virtuales?
saludos
Montar un cluster de MySQL http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=My...
4 de 6 10/06/2014 1:18 p. m.
Fecha publicacin: 2013-03-26-21:15:30
Autor: miguel2e
Hola Rubn
Gracias por la ayuda prestada con el tutorial.
Tengo un par de dudas a ver si encuentras un momento para contestarme.
Segn tu escenario, entiendo que el servidor apache en mi caso, debera ir contra el equipo sql (1.13) ?
Que ocurre si ese equipo se daa, el 1.13? se para el servicio no?, debo de instalar (o tener preparado) uno equipo nuevo
y configurarlo como estaba el 1.13?.
ltima pregunta, puedo tener un grupo de solo 3 equipos, el MGM y dos con los servicios NDB + SQL. En este caso, si
falla el equipo al que apunta el apache, deber de reconfigurar apache contra el que quede encendido?
Saludos.
PD al final eran mas de un par jaja
Fecha publicacin: 2013-03-10-06:02:52
Autor: lachva
Excelente aporte, amigo tengo que realizar un cluster pero en dos nodos y en enterprise linux, usted cree que sea
parecido a lo que explicas en este tutorial o ser muy diferente?
agradezco la informacin que me puedas brindar, saludos.
Fecha publicacin: 2012-07-25-18:43:15
Autor: CruzJ
Muy buena explicacin, funcionando correctamente.
Podra ayudarme con lo siguiente:
Como poder conectar una aplicacin en PHP que tenga acceso a tabla "x" de la base creada??
De antemano muchas gracias.
Fecha publicacin: 2012-07-17-18:17:34
Autor: EsteBusta
Excelente tutorial, muy fcil de entender, me sirvio mucho.
Muchas gracias.
Fecha publicacin: 2012-05-10-21:23:15
Autor: jauzcanga
Montar un cluster de MySQL http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=My...
5 de 6 10/06/2014 1:18 p. m.
Esta obra est licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5
Hola a todos.
Ruben actualmente trabajo con una aplicacin que por razones ajenas a mi voluntad solo trabaja (se conecta) con Mysql
4.1.x. Me gustara saber si puedo hacer un cluster con esta dependencia y si es as como puedo conseguir una versin de
cluster tan vieja?
Gracias de antemano.
Fecha publicacin: 2012-04-27-09:23:46
Autor: rubenagui
Hola painapol,
Lo que puedes intentar es ampliar el tamao de esa tabla. Para ello tendrs que hacer un ALTER TABLE modificando las
propiedades MAX_ROWS y AVG_ROW_LENGTH.
Espero que te sirva de ayuda.
Saludos.
Fecha publicacin: 2012-04-26-23:51:39
Autor: painapol
Hola que tal, soy nuevo en esto de MySQL cluster, y tengo uno instalado, pero ya no me deja agregar datos en las tablas,
tengo una tabla que es bastante extensa y cuando intento insertar me dice "The table 'nombre_de_tabla' is full, y en el
ndb_mgm me dice Node 3: Data usage is 99%(2544 32K pages of total 2560), supongo que es algo de configuracin lo
que no estoy haciendo bien, esta la configuracion por default:
[ndbd default]
NoOfReplicas=2
[ndb_mgmd]
hostname=10.2.166.34
datadir=/var/lib/mysql-cluster
id=1
[ndbd]
hostname=10.2.166.32
datadir=/opt/mysql/mysql/data
id=3
[ndbd]
hostname=10.2.166.33
Copyright 2003-2014 All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto

Montar un cluster de MySQL http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=My...
6 de 6 10/06/2014 1:18 p. m.

You might also like