Este documento describe cómo configurar un clúster de MySQL en una red local. Explica los conceptos básicos de un clúster, los diferentes tipos de nodos en MySQL Cluster, y los pasos para configurar el clúster incluyendo la creación de directorios, editar archivos de configuración, y ejecutar los nodos de administración y datos. También habla sobre las características, ventajas y desventajas de MySQL Cluster.
La acción psicosocial desde la perspectiva humanista.pptx
Cluster MySQL en Windows
1. Luis Josué Chávez Vigil
Josué Daniel Orellana Aguirre
Erick Stanley Cruz Martínez
Objetivos:
Conocer el funcionamiento del clúster en MySQL, así como de la manera de configurarlo en una red local,
además de distinguir los elementos que lo conforman.
Identificar las características, requerimientos hardware/software, ventajas y desventajas de un clúster MySQL.
Definir lo que es un clúster, así como los diferentes tipos de nodos que el clúster MySQL maneja, y además,
aprender la manera correcta de configuración.
Introducción:
MySQL Cluster es la versión de MySQL pensada para alta disponibilidad, escalabilidad y alto rendimiento. Un
MySQL server que es parte de un MySQL Clúster difiere sólo en un aspecto de un servidor MySQL normal (no
clúster), en que emplea el motor NDB Clúster.
Este motor también se conoce simplemente como NDB, las dos formas del nombre son sinónimas. Desde que
MySQL server es parte del clúster, necesita datos de configuración que sepa cómo acceder al nodo MGM para
obtener datos de configuración del clúster.
El comportamiento por defecto es buscar el nodo MGM en localhost. Sin embargo, puede necesitar especificar su
localización donde se encuentre, esto puede hacerse en my.cnf o en la línea de comandos del servidor MySQL.
Antes de poderse usar el NDB, al menos un nodo MGM debe ser operacional, así como los nodos de datos
deseados.
Conceptos Básicos:
Clúster: Grupo de múltiples ordenadores unidos mediante una red de alta velocidad, de tal forma que el conjunto es
visto como un único ordenador, más potente que los comunes de escritorio.
De un clúster se espera lo siguiente:
Alto rendimiento
Alta disponibilidad
Equilibrio de carga
Escalabilidad
2. Clúster: Grupo de múltiples ordenadores unidos mediante una red de alta velocidad, de tal forma que el conjunto es
visto como un único ordenador, más potente que los comunes de escritorio.
Características:
Para comunicación entre nodos, el clúster soporta red TCP/IP en cualquier topología estándar, y como mínimo se
espera una red 100 Mbps Ethernet, más un switch, hub, o router para proporcionar conectividad de red al clúster
entero. Recomendamos que MySQL Clúster se ejecute en su subred que no está compartida con máquinas no-clúster
por las siguientes razones:
Seguridad: La comunicación entre nodos del clúster no está cifrada. La única forma de proteger transmisiones
dentro de un MySQL Clúster es ejecutar su clúster en una red protegida.
Eficiencia: Inicializar un MySQL Clúster en una red privada o protegida permite que el clúster haga uso
exclusivo del ancho de banda entre máquinas del clúster.
ndbd_mgm.
Es el nodo de Management. Tiene la configuración del clúster. No es necesario más de uno, pero consume tan poco
que se pueden tener dos. Nosotros lo usamos para lanzar backups, reiniciar nodos, activar el log… además, los
nodos ndbd lo usan al entrar en el clúster para recoger la configuración
ndbd:
Son los nodos de almacenamiento. Estos deben tener la capacidad de procesamiento y la memoria RAM suficiente
para trabajar con los datos. Al menos debemos tener dos nodos ndbd. Si queremos usar múltiples cores, el demonio
será ndbmtd mysqld. Al clúster se puede acceder usando la API o mediante un servicio.
mysqld:
Al menos debemos tener dos nodos mysqld o tendremos un SPOF
Desventajas:
La configuración y puesta en marcha difiere completamente de la versión estándar de la base de datos.
Requiere gran cantidad de memoria RAM.
Índices en RAM siempre.
Datos en RAM o en disco duro.
El engine es ndbclúster, no se puede usar InnoDB o MyISAM en clúster.
No es una base de datos de propósito general.
Subqueries lentas
Joins lentas
No soporta integridad referencial y claves externas
No hay rollbacks parciales ni savepoints, solo rollbacks completos
No se garantiza el commit
Recomendaciones:
La web de MySQL recomienda 5 servidores:
2 ndbd
2 mysqld
1 ndb_mgmd
Podemos mejorar esta arquitectura y hacerla más barata montando un ndb_mgmd en cada mysqld
2 ndbd
2 mysqld + ndb_mgmd
3. Topología:
Hardware:
3 COMPUTADORAS CON WINDOWS 7
MYSQL CLÚSTER EN C/U DE PC
SWITCH
CABLES DE RED
Archivos de Configuración:
ndb_mgm
config.ini
Acá estan las configuraciones para el manejo de nodos. Dentro se encuentra los datadir y los database.
· En el database se encuentran los binarios y archivos de configuracion para la ejecución correcta de config.
· En el datadir se hace referencia a los logs que arroja el clúster.
ndbd
Se arranca desde los binarios alojados en el directorio /mysqlc/bin/ndbd -c 192.168.4.1:1186
mysqld
Se configura el my.cnf el cual es el encargado de enlazar el nodo de MySQL al nodo de administrador, soportando el
engine ndbclúster.
4. Procedimiento:
Descargamos el cluster mysql de la siguiente dirección: http://dev.mysql.com/downloads/cluster/
Definimos nuestro sistema operativo y descargamos:
Nos pedirá que ingresemos nuestra cuenta de Oracle (sino posee una deberá crearla). Una vez descargado,
descomprimimos el archivo y genera una carpeta con los siguientes directorios:
Arrancar Cluster
c:/mysql/bin/ndb_mgmd -f conf/config.ini --initial --configdir=c:my_clusterconf
Mostrar los nodos conectados al administrador
c:mysqlbinndb_mgm -e show
Arrancar todo
start /B c:Users"Chavez Vigil"mysqlbinndbd -c localhost:1186
Arrancando mysql
start /B c:Users"Chavez Vigil"mysqlbinmysqld --defaults-file=confmy.ini
c:Users"Chavez Vigil"mysqlbinmysql -h 127.0.0.1 -P5000 -u root
Apagando servicios
c:Users"Chavez Vigil"mysqlbinmysqladmin -u root -h 127.0.0.1 -P5000 shutdown
c:Users"Chavez Vigil"mysqlbinndb_mgm -e shutdown
C:UsersChavez Vigilmy_clusterndb_data
5. Pasos a seguir:
Cree las siguientes carpetas en el directorio raíz del sistema. Para ello abrimos cmd y presionamos Ctrl+Shift+Enter
para abrirlo en modo administrador:
Creamos una nueva carpeta llamada mysql:
Cuando descargamos el cluster desde el enlace mostrado anteriormente y lo descomprimimos, el contenido de la
carpeta que se crea cuando se descomprime lo copiamos completamente en la carpeta mysql que acabamos de crear:
6. Abrimos una nueva consola en modo de administrador y copiamos el contenido de esta carpeta mysql en mycluster:
Se deberán copiar aproximadamente 72 archivos.
Se deberán copiar aproximadamente 42 archivos.
Se deberán copiar aproximadamente 18 archivos.
Ahora bien, dentro de mycluster creamos un archivo config.ini
Entramos en la carpeta conf. Lo que continúa será editar el archivo config.ini para los nodos de datos:
[ndb_mgmd]
HostName=192.168.4.1
DataDir=c:my_clusterndb_data
Nodeid=1
Esto significa que el nodo de administrador tendra esa ip y que los
log's que generen se estaran almacenando el esa direccion de archivo.
[Ndbd default]
NoOfReplicas=2
7. Esto significa que seran 2 nodos de datos por defecto; si queremos agregar mas solo incrementamos ese numero.
[Ndbd]
HostName=192.168.4.2
DataDir=c:my_clusterndb_data
Nodeid=3
Esto significa que es el primer nodo de datos y esta alojado en esa ip y los logs iran a parar a esa direccion.
Nodeid=4
HostName=192.168.4.3
DataDir=c:my_clusterndb_data
Esto significa que es el segundo nodo de datos y esta alojado en esa ip y los logs iran a parar a esa direccion.
[Mysqld]
[Mysqld]
Y estas 2 lineas significan que por cada nodo de datos tendremos 1 nodo mysql .
Ahora crearemos las variables de entorno del sistema. Desde el menú inico escribimos variables de entorno y
escogemos la que dice SISTEMA:
En la ventana que aparece damos clic en el icono Variables de Entorno. Ahí buscamos la variable path que es la que
vamos a editar. Al final de la variable escribimos:
C:mysqlbin:C;my_clusterndb_data
Esto es para que ejecute los binarios necesarios para el funcionamiento del cluster. Reiniciamos la computadora.
Después del reinicio abrimos como administrador la consola y arrancamos el cluster:
8. Abrimos una nueva consola y ejecutamos netstat –b para verificar si esta corriendo el cluster:
En este momento ya está escuchando peticiones de los nodos de datos. En la misma terminal ejecutamos:
Con el comando show mostramos los nodos de datos conectados:
Por el momento NO tenemos nodos de datos conectados.
Esto deberíamos ver al tener los nodos conectados:
9. Ahora pasamos a la configuración de los nodos de datos. Esto se hará en cada máquina que será nodo de datos y
mysql. Creamos la misma estructura de directorios que se hizo en el nodo de administrador. Descomprimimos el
archivo del cluster y hacemos lo siguiente:
Volvemos a copiar el contenido del archivo descomprimido, tal como en el administador. Una vez hecho esto,
entramos en la carpeta conf. Editamos un archivo llamado my.cnf que se encuentra en el directorio conf. Cada uno
de los nodos de datos lo poseerá:
En síntesis, lo que este archivo significa es que el nodo mysql ocupará el motor ndbcluster para conectarse al nodo
de administrador a través del puerto 4002, la cadena de conexión muestra la ip del administrador y el mysql_cluster
se encontrará también en la misma máquina administrador.
Posteriormente abrimos la cmd de Windows y una vez arrancados los servicios, estas ventanas NO deben cerrarse,
de lo contrario se interrumpirá la comunicación.
Arrancamos el nodo de datos:
10. Vemos si el servicio está corriendo:
Iniciamos el nodo mysql:
Nos conectamos a una instancia MySQL:
11. A manera de ejemplo, veamos los motores. Veremos que ndbcluster está corriendo usando el comando show
engines; (Este es el motor del cluster) y para ver las bases de datos usamos show databases;
En uno de los nodos de datos se ha creado una base de datos llamada prueba. Si ejecutamos nuevamente show
databases; debemos verla reflejada:
12. Ahora bien, vamos a crear una tabla en este nodo de datos. Para ello escribimos use prueba; que representa que
ocuparemos la base de datos prueba. Luego creamos la tabla en ella llamada alumno, y al final de la consulta de
create table alumno escribimos engine=ndb;para que esta sentencia se ejecute en todos los nodos conectados:
Ahora insertamos un alumno nuevo y describimos la tabla:
13. Bibliografía
MySQL®, obtenida el 26 de abril de 2013, de
http://downloads.mysql.com/tutorials/cluster/mysql_wp_cluster_quickstart_windows.pdf
Uv.mx, obtenida el 26 de abril de 2013, de
http://www.uv.mx/personal/lizhernandez/files/2013/04/Comandos-mysql.pdf
Manuales Guebs.com®, obtenida el 27 de abril de 2013, de http://manuales.guebs.com/mysql-
5.0/ndbcluster.html#mysql-cluster-configuration
Slideshare® Base de Datos MySQL, obtenida el 27 de abril de 2013,
de http://www.slideshare.net/miguelangelnieto/mysql-high-availavility-load-balacing-cluster
Scribd® ¿Qué es un CLUSTER?, obtenida el 27 de abril de 2013,
de http://es.scribd.com/doc/6858172/QUE-ES-UN-CLUSTER