Suscribirse a la fuente RSS

«

»

Feb
20

Primeros pasos con MySQL Cluster: instalación, configuración y arrancada

Como hemos comentado en el post anterior, vamos a explicar paso a paso la instalación, la configuración y el arranque de un cluster de prueba de MySQL Cluster sobre la versión 8.10 de Ubuntu.

Instalación

Primero, y fundamental, es tener instalados los paquetes de mysql en el sistema. Para saber si los tenemos o no, podemos ir al Gestor de Paquetes Synaptic de Ubuntu (System>Administration>Synaptic Package Manager) y se nos abrirá una pantalla como esta después de haber introducido la contraseña de root. Introduciremos la palabra “mysql” en el buscador para que nos muestre todos los paquetes relacionados.

spm-ubuntu1

Aquellos paquetes que se acompañen con un recuadro verde son los que están instalados en el sistema. Dicho paquete mysql contiene, al menos en sus versiones para Ubuntu 8.10, soporte para MySQL Cluster por lo que no hemos de descargar ningún otro archivo para poder utilizarlo.

Creación y modificación de archivos de configuración

Hemos de tener en cuenta que Ubuntu utiliza unos directorios concretos cuando se le delega la instalación de dichos paquetes, por defecto. Consultando la documentación oficial de MySQL Cluster nos hemos dado cuenta de que la localización de los archivos de configuración que se expresa son diferentes a la de nuestro sistema. La siguientes línias determinarán nuestro propio proceso de configuración y arranque del sistema de cluster y no el que se indica en dicha documentación (un tanto diferente).

Dicho todo esto, vamos a por el primer paso. La instalación de MySQL en Ubuntu repercute en una serie de carpetas del sistema:

  • /etc/ donde el sistema añade un directorio mysql que, podríamos decir, guarda la información relacionada con su motor y arranque. Aquí es donde encontraremos el archivo que necesitaremos más adelante, my.cnf.
  • /var/lib/ donde el sistema añade tantas carpetas como sean necesarias para describir su “contenido”. Aquí encontraremos un directorio llamado mysql-cluster que es donde crearemos su archivo de configuración, config.ini.

Pero, vayamos por partes.

  1. Archivo de configuración config.ini para la configuración de MySQL-Cluster.
    Abrimos la consola (Applications>Accessories>Terminal), e insertamos la siguiente línia:

    cd /var/lib/mysql-cluster
    Una vez en el directorio tendremos que crear el archivo de configuración. Como root escribiremos la siguiente línia:

    sudo gedit config.ini
    E introduciremos la contraseña de root que tengamos. Nos abrirá el gedit es un programa de edición de texto muy sencillo. Al detectar que dicho archivo no existe en el directorio escogido, lo crea automáticamente. Una vez abierto, copiaremos las siguientes línias :

    # file "config.ini" - showing minimal setup consisting of 1 data node,
    # 1 management server, and 3 MySQL servers.
    # The empty default sections are not required, and are shown only for
    # the sake of completeness.
    # Data nodes must provide a hostname but MySQL Servers are not required
    # to do so.
    # If you don't know the hostname for your machine, use localhost.
    # The DataDir parameter also has a default value, but it is recommended to
    # set it explicitly.
    # Note: DB, API, and MGM are aliases for NDBD, MYSQLD, and NDB_MGMD
    # respectively. DB and API are deprecated and should not be used in new
    # installations.
    [NDBD DEFAULT]
    NoOfReplicas= 1
    [MYSQLD DEFAULT]
    [NDB_MGMD DEFAULT]
    [TCP DEFAULT]
    [NDB_MGMD]
    HostName= localhost
    [NDBD]
    HostName= localhost
    DataDir= /var/lib/mysql-cluster
    [MYSQLD]
    [MYSQLD]
    [MYSQLD]

    Nota: HostName de NDB_MGM (nodo administración) y NDBD (nodo datos) y DataDir dependerán de cada proyecto, pero el ejemplo que se muestra funciona para la prueba rápida en un mismo ordenador. No olvidemos, que en un sistema corriendo de forma real tendríamos diferentes máquinas para los diferentes procesos de administración y almacenamiento de datos, y por tanto sus HostsName serán unos en concreto para cada máquina.
  2. Activar motor de almacenamiento ndbcluster.
    Accedemos, mediante consola, al siguiente directorio:

    cd /etc/mysql/

    Y abriremos el archivo my.cnf para poder activar el motor de almacenamiento. Ésto no es más que añadir la siguiente línea al código:

    [mysqld]
    ndbcluster

    Y más o menos, tendremos una parte del documento que será de la siguiente manera;

    ...
    [mysqld]
    #
    # * Basic Settings
    #
    ndbcluster
    #
    # * IMPORTANT
    # If you make changes to these settings and your system uses apparmor, you may
    # also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.
    #
    ...

    Una vez hecho esto podremos crear los nuevos nodos.
  3. Arrancamos el nodo de administración y el nodo de datos
    Volvemos a colocarnos en el directorio /var/lib/mysql-cluster :

    cd /var/lib/mysql-cluster

    Con privilegios de root, arrancamos el nodo administrador:

    sudo ndb_mgmd

    Y a continuación, arrancamos un nodo de datos:

    sudo ndbd --initial
  4. Reiniciar el servidor MySQL y comprovar que funciona el NDBCLUSTER
    Una vez llegado este punto, es hora de reiniciar el servidor mysql que tengamos. Para ello es necesario que lo hagamos con permisos de root:

    sudo /etc/init.d/mysql stop
    sudo /etc/init.d/mysql start

    o

    sudo /etc/init.d/mysql restart

    Si no ha aparecido ningún error, ya estamos preparados para arrancar el cluster.
  5. Arrancar mysql con el cluster
    Inicializaremos mysql desde la consola:

    mysql -u root -p

    Y nos pedirá la contraseña que hayamos definido para el sistema mysql. La introducimos y nos aparecerá algo parecido a ésto:

    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 64
    Server version: 5.0.67-0ubuntu6 (Ubuntu)

    Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

    mysql>

    Introducimos una sentencia que nos permita ver de qué se compone nuestro sistema mysql

    mysql> show engines;

    y nos debería aparecer una tabla que contenga varías filas. Entre ellas, debería aparecer una como esta:

    | ndbcluster | YES | Clustered, fault-tolerant, memory-based tables

    A veces es posible que aparezca DEFAULT en vez de YES. Si no aparece ninguna de estas dos es que algo no ha salido bien. Intenta revisar todos los pasos anteriores aquí descritos.

    Ahora jugaremos con alguna base de datos que tengamos en el sistema. Si no tienes ninguna, puedes crearla facilmente con Navicat o cualquier otra aplicación gestora de mysql. Pensemos en que la tenemos.

    mysql> use db_usuaris;

    y una vez en la base de datos que hemos escogido, vamos a crear una table que utilice el engine del cluster:

    mysql> create table ctest (i INT) engine=ndbcluster;

    Una vez la hemos creado, vamos a ver sus propiedades

    mysql> show create table ctest G;

    y debería salir algo, tal que así:

    *************************** 1. row ***************************
    Table: ctest
    Create Table: CREATE TABLE `ctest` (
    `i` int(11) default NULL
    ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
    1 row in set (0.00 sec)

    Finalizamos sesión en mysql escribiendo:

    mysql> exit;

  6. Para finalizar, ver si los nodos se han inicializado correctamente
    Para ello vamos a arrancar el nodo administración de la siguiente manera:

    sudo ndb_mgm

    Ya simplemente nos queda mirar un reporte de los nodos que se han creado, y ya habremos terminado con este proceso:

    ndb>show;

    y si todo ha ido bien, aparecerá algo tal que así:
    Cluster Configuration
    ---------------------
    [ndbd(NDB)] 1 node(s)
    id=2 @127.0.0.1 (Version: 3.5.3, Nodegroup: 0, Master)

    [ndb_mgmd(MGM)] 1 node(s)
    id=1 @127.0.0.1 (Version: 3.5.3)

    [mysqld(API)] 3 node(s)
    id=3 @127.0.0.1 (Version: 3.5.3)
    id=4 (not connected, accepting connect from any host)
    id=5 (not connected, accepting connect from any host)

Llegados a este punto, ya podemos dar por finalizada la tarea de este post. Hemos conseguido inicializar correctamente un cluster MySQL y ya podemos guardar información en las tablas creadas con esta tecnología.
Otro día, más.

Saludos desde el zulo, pingüinos y manzanitas world!

14 comentarios

  1. FernandoNo Gravatar escribió:

    Hola,

    Yo escribo por motivo de que quiero instalar mysql-cluster en ubuntu 8.10, lo he instalado usando un rpm sobre opensuse y todo ha funcionado bien, he configurado y el resto bien, ahora quiero poner en marcha pero sobre ubuntu y no me queda, descargué una versión que parece que es un binario, el detalles que pongo las instrucciones que trae el readme.txt pero en un paso me indica un error:
    FATAL ERROR: Could not find /fill_help_tables.sql

    Pero yo aqui en este post veo que usan nada mas mysql-client, pero que yo sepa con eso no funciona, es decir, no sabía que mysql-cluster funciona sobre mysql-client, quisiera de sus ayuda para instalarlo sobre ubuntu 8.10. O que alguien m oriente

    1. lauraNo Gravatar escribió:

      Buenos días, no entiendo bien el problema que tienes…pero por lo que escribes creo que has tenido un problema con la instalación de ese binario que te has bajado. Para instalar mysql en ubuntu, por qué no pruebas introduciendo la siguiente linea en tu terminal: sudo apt-get install mysql-server-5.0 ? Hay una versión de mysql 5.1, pero la que usamos nosotros es la 5.0 (por si te sirve de referencia). Una vez hecho esto, puedes seguir los pasos que se indican en el post para incializarlo. Aún así, recuerdo que estos pasos son para poner en marcha rápidamente mysq-cluster desde una misma maquina y no para varías máquinas. Si necesitas más información, puedes consultar la página web de MySQL. Si tienes cualquier duda, no dudes en comentarlo :) . Muchas gracias por tu post.

  2. tomasNo Gravatar escribió:

    Hola Laura,
    Gracias a tu pagina y a alguna otra he logrado montar un cluster de mysql con dos servidores NDB, otros dos MYSQL y un servidor de management… y parece que funciona! Ahora mi intención es, en el mismo servidor de management, montar una replicación master-slave de uno de los dos servidores mysql… sabes si es posible??
    Muchas gracias por adelantado…
    un saludo

    1. lauraNo Gravatar escribió:

      Hola tomas,
      He estado pensando en el comentario que me dejaste ayer. Y comentándolo con un compañero hemos llegado a la conclusión de que si se podría hacer….aunque no entendemos el porque :P . Un servidor MySQL podría ser el master, ya que es quien recibe las peticiones de modificación…y bueno el slave creemos que podrías ponerlo en cualquier otro nodo, ya sea en uno ndb o en el de administración.

      Tenemos curiosidad para saber porque utilizas esta estructura, a ver si un día nos envías un mensaje y nos lo cuentas :) … y sobretodo si funciona! espero que te haya servido de ayuda :)

      Gracias por tu comentario.

  3. jose luisNo Gravatar escribió:

    Que tal laura, eh llegado hasta tu blog casi magicamente (jejeje), ya que para mi proyecto de residencia tengo que montar un cluster con mysql y despues de mucho buscar llegue hasta aqui… mira mi problema es que al hacer los pasos: sudo ndb_mgmd, sudo ndbd –initial, sudo /etc/init.d/mysql stop, todo a marchado bien pero al momento de restablecer mysql con el comando restart aparece lo siguiente: Stopping MySQL database server: mysqld.
    Starting MySQL database server: mysqld.
    Checking for corrupt, not cleanly closed and upgrade needing tables…. sabes por que sucede, o que es lo que hice mal??
    estoy usando debian lenny no se si tenga algo que ver esto, pero veo que tu usas ubuntu no tendria por que ser muy diferente creo yo jejeje… Saludos y espero me puedes ayudar con mi problema muchas gracias

    1. lauraNo Gravatar escribió:

      Buenos días Jose Luis, en principio el “Checking for corrupt, not cleanly closed and upgrade needing tables” te lo hace cada vez que reinicias el servidor de MySQL porque seguramente tengas otra base de datos fuera del cluster con un motor que soporta claves foráneas (foreign keys, referencias entre tablas ;) ). Esto lo hace para comprobar que no ha habido ningún cambio o perdido alguna de sus referencias ;) … Espero haberme explicado. Si no te ha salido ningún error posterior, creo que todo ha ido correctamente.

      Cualquier duda no te lo pienses, deja un comentario.
      Suerte y gracias por postear ;)

  4. jose luisNo Gravatar escribió:

    Quetal luaura efectivamente no me a salido otro error, pero cuando entro a mysql y le doy la instruccion show engines; ndb no esta activado, y como tu lo explicas al mostrar los motores ya deberia estar activado, gracias por contestar tan rapidamente

    1. lauraNo Gravatar escribió:

      Hola de nuevo!
      Si no esta activado el motor, es que quizás no se guardado bien la configuración en el archivo my.cnf (en /etc/mysql). He estado revisando el archivo que yo tengo, y con la nueva versión de Ubuntu 9.04 creo que han cambiado un poco la configuración por defecto de MySQL: en vez de añadir dentro del apartado [mysqld] la sentencia ndbcluster, ahora simplemente hay que descomentarla (quitarle el # de delante). Asegúrate que esta dentro del apartado [mysqld]: para orientarte yo lo tengo sobre la línea 35.
      Comprueba este archivo de configuración porque creo que es la clave a tu problema…
      Me dices algo oki? Si no te paso mi dirección de correo y me puedes enviar el my.cnf si no te aclaras.
      Un saludo

  5. cesarNo Gravatar escribió:

    ke suerte ke me encontre con este sitio, se que el tema no es reciente pero bueno, tengo instalado mysql server mysql client y mysql admin, la pregunta es la siguiente haces todo que explicas anteriormente en el blog en mas nodos, pues yo ya lo instale en una maquina pero quiero sabes si son los mismos pasos para otras o no.
    La verdad tengo mas dudas pero por ahora esto es lo que me inquieta.
    Saludos

  6. DanielNo Gravatar escribió:

    Laura este error al querer hacer con privilegios de root, arrancar el nodo administrador: Paso 3

    010-05-20 20:16:42 [MgmtSrvr] ERROR — Could not determine which nodeid to use for this node. Specify it with –ndb-nodeid= on command line

  7. DanielNo Gravatar escribió:

    Hola al instalar desde synaptic los paquetes mysql-server nunca encuentro la carpeta var/lib/mysql-cluster

    Tendria que descargar en synaptic mysql-server-cluster?

  8. lauraNo Gravatar escribió:

    Siento contestar tan tarde, ultimamente no tengo mucho tiempo. Cómo veréis tampoco puedo actualizar con tanta frecuencia.

    Vamos por partes,
    @cesar como comentas el post es un poco viejo y me gustaría tener tiempo para retomar el hilo con nuevas versiones… pero lo que recuerdo es lo siguiente:
    En el archivo que se comenta de configuración del mysql-cluster (/var/lib…), el config.ini, es dónde tienes que introducir los datos relacionados con el host del nodo de administración y de los nodos de datos:

    [NDBD DEFAULT]
    NoOfReplicas= 1
    [MYSQLD DEFAULT]
    [NDB_MGMD DEFAULT]
    [TCP DEFAULT]
    [NDB_MGMD]
    HostName= localhost
    [NDBD]
    HostName= localhost
    DataDir= /var/lib/mysql-cluster

    Aquí deberás añadir tantos [NDBD] cómo nodos quieras activar con su hostname correspondiente. Una cosa sí que deberás tener en cuenta es el hecho de tener también instalado la librería de mysql-cluster en las máquinas que quieras utilizar y mirar que se haya activado correctamente. La creación de los nodos de datos, en el paso 3 de la guía, tendrás que hacerlo en cada máquina también. PAra ver si los nodos se han creado correctamente puedes realizar el paso 6 en las máquinas dónde los hayas creado.
    De momento es lo que se me ocurre. Ya me comentarás, ya que seguramente ya lo arreglaste por otra parte . Muchas gracias por tu comentario, y perdón por la tardanza.

  9. lauraNo Gravatar escribió:

    @Daniel en cuanto a la pregunta del paquete que tienes que descargar comentarte que actualmente es posible que haya sufrido alguna modificación con lo que yo escribí de la versión Ubuntu 8.10. Antes solamente hacía falta descargar el paquete por defecto de mysql para poder tener el cluster, pero ahora es posible que lo hayan separado en otras librerías. Puedes comprobar que te haya incluido las opciones del cluster y entonces mirar que la carpeta no te la haya colocado en otra ruta (la ruta muchas veces depende tambiñen de la versión de sistema operativo que utilices). Si lo has comprobado y no es así, tiene sentido que te tengas que descargar el paquete que comentas.

    En cuanto a la otra pregunta, es posible que si no has configurado correctamente el nodo administrador (no tenías el archivo de configuración config.ini en /var/lib…) es posible que el error vaya por ahí.

    ¿Lo has arreglado? Muchas gracias por tu comentario

  10. DanielNo Gravatar escribió:

    Hola laura. Si he arreglado el problema ahora intento conectarme con otro nodo en direccion ip 192.168.1.X y me dice id=2 (not connected, accepting connect from 192.168.1.X) siendo esta direccion del nodo de datos que configuro en el administrador (config.ini) sabes algo al respecto?

Leave a Reply

Tu email nunca se publicará.

Puedes utilizar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>