Cluster de Mysql
By: Date: mayo 15, 2010 Categories: Consultoria y Manuales

Se han puesto de moda las “bases de datos” NoSQL que en realidad son simples tablas sin transacciones seguras, un simple archivo de access o dbase moderno, cuya única justificación de existir es que pueden distribuirse pero sin la garantía de la integridad de datos como una transacción sql.

Algunos motores como MS SQL, tienen la capacidad de crear bases de datos distribuidas y de alta disponibilidad pero es propietario, asi que mostrare como hacerlo en la base de datos mas usadas, la Mysql

Para que se podría usar una SQL distribuida, pues razones, muchas, replicación por seguridad, balanceo de carga, tener 2 o mas sitios de alta disponibilidad, que si cae uno siga vivo el otro cada uno con su propia base de datos, haciendo consultas a su base de datos local pero que esta replicada con su parte en el otro servidor de forma que siempre están sincronizadas pero sin cargar mas que la maquina local pro sitio, distribuir una DB, Etc.

Requerimientos previos.

Contar con una instalación de GNU/Linux y descargar la versión mas reciente mysql-cluster, se usara en todos los nodos y se instalara e inicialización es de la misma forma en todos los nodos

http://www.mysql.com/downloads/cluster/

Crear el usuario y grupo mysql en caso de no tenerlos previamente creados

Instalación:

para este caso descargue la versión Linux genérica

se descomprime y se ponen los archivos en /usr/local/ va a quedar una carpeta con un nombre muy largo para acortarlo se renombrara a simplemente mysql de modo que la ruta quede /usr/local/mysql

cambiar los permisos para que le pertenezcan al usuario mysql

chown mysql.mysql -R /usr/local/mysql

Inicializar mysql

cd /usr/local/mysql/scripts/
./mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data

Configurando el /etc/my.cnf

Crear o Editar el archivo /etc/my.cnf, al igual que la instalación e inilizacion, este archivo debe ser igual en cada uno de los nodos del cluster incluido el cluster manager

[mysqld]

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

user=mysql

ndbcluster

ndb-connectstring=192.168.5.215

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1

[mysql_cluster]

ndb-connectstring=192.168.5.215

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

ndb-connectstring contiene la ip del cluster manager

Cluster Manager

Configuración del Cluster Manager y nodo, sera la computadora que va a llevar el control del cluster, puede haber mas de uno para hacerlo tolerante a fallos aunque en este caso solo tendremos uno

El cluster manager debe tener el siguiente directorio

/var/lib/mysql-cluster

crearlo con mkdir /var/lib/mysql-cluster

y dentro crear un archivo config.ini

vi /var/lib/mysql-cluster/config.ini

el contenido para este caso sera:

[tcp default]
SendBufferMemory=2M
ReceiveBufferMemory=2M
#portnumber=2202

[ndbd default]
NoOfReplicas=1
DataMemory=512M
IndexMemory=512M
MaxNoOfConcurrentOperations=100000
MaxNoOfTables=10
datadir=/var/lib/mysql-cluster
MaxNoOfOrderedIndexes=1024
MaxNoOfAttributes=4400

[ndb_mgmd]

id=1

hostname=192.168.5.215

datadir=/var/lib/mysql-cluster

[ndbd]

id=2

hostname=192.168.5.121

datadir=/usr/local/mysql/data

[ndbd]

id=3

hostname=192.168.5.1

datadir=/usr/local/mysql/data

[mysqld]

id=10

hostname=192.168.5.215

[mysqld]

id=11

hostname=192.168.5.121

[mysqld]

id=12

hostname=192.168.5.1

en [ndbd default] dependiendo de las capacidades de las computadoras que participaran en el cluster se administrara la memoria ram, mientras mas tenga, mejor

DataMemory=512M
IndexMemory=512M

En mi caso tenian 1GB de RAM, asi que asigne 512Mb reverlandolos para el cluster de la DB y el resto para que funcione Linux y los demás programas

NoOfReplicas indica la cantidad de nodos que replicaran, sin contar el manager el numero debe ser mayor a la cantidad de nodos

MaxNoOfTables en los cluster no replicamos la base de datos entera, de hecho solo se replican las tablas, toda tabla que se quiera replicar, debe tener el motor de cluster y no sobre pasar el numero indicado en MaxNoOfTables

[ndb_mgmd]
debe haber uno por cada nodo de administración o manager cluster, puede haber mas de uno y mínimo uno por cada cluster

[ndbd]
debe haber uno por cada nodo, no es necesario especificar uno para el manager

[mysqld] debe haber uno por cada nodo incluido uno para el manager

los ID son opcionales, pero para tener un mejor control y saber que nodo funciona exactamente y cual falla es mejor especificar un ID por propia cuenta

Arranque del cluster

Se arranca primero el manager y siempre debe arrancarse primero los programas de administracion de cluster antes que la base de datos y antes de empezar a trabajar en ella como crear una base de datos o las tablas del cluster, de lo contrario se crean locales y no se replicaran.

cd /usr/local/mysql/bin
./ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Arranque de los nodos

cd /usr/local/mysql/bin
./ndbd

Asegurando que inicio el cluster antes de arrancar mysql, usando ndb_mgm en el manager o en cualquier nodo

cd /usr/local/mysql/bin
./ndb_mgm

Estando dentro del CLI de ndb_mgm escribir show para ver el estado o quit para salir
Si ya arranco el nodo master que es el primer nodo despues del manager, ya se puede arrancar mysql con mysqld_safe

arranque de Mysql

cd /usr/local/mysql/bin
./mysqld_safe &

Creando las base de datos y la primera tabla

./mysqldadmin create mibasededatos

la base de datos debe ser creada manualmente en cada nodo del cluster, porque las bases de datos son locales, lo unico que participa en el cluster son las tablas del cluster

Creando una tabla de cluster

las tablas se crean como cualquier otra pero se usa el motor ndbcluster

CREATE TABLE mitabla (micampo char(10)) ENGINE=NDBCLUSTER;

A diferencia de las bases de datos que hay que crearlas manualmente, las tablas se replican desde el momento de su creación, por lo que se puede crear en cualquiera de los nodos del cluster y desde ya sera replicada a todos los demás, incluida las operaciones como insert, delete y todas las demás que se hagan sobre ella.

Material disponible, vídeo demostrativo

6 thoughts on “Cluster de Mysql

  1. Usa: Google Chrome Google Chrome 5.0.375.29 en Linux Linux - Detectado...

    Leyendo este articulo: https://www.lastdragon.net/?p=327 vi las ventajas de compilar un kernel, ahorita mi antigua Dell Inspiron 600m ya esta media acabadona después de casi 5 años de uso intensivo… 😛 Así que decidí volverla servidor web.

    Ya quedo de lujo y todo, pero mi gran duda es como compilas tu el kernel David, yo busque y he usado estos 2 métodos: http://lgallardo.com/2010/01/14/compilar-el-kernel-a-lo-tradicional/ y http://lgallardo.com/2010/04/30/compilar-kernel-a-la-medida/ (fallando ambas veces… :/ ) tu cual usas o cual recomiendas, y cual es la forma que dices de configurar apache, shh (este último me tarda años) para que use las bondades del procesador o para mejorarlo, no te pido una guía de paso a paso. Solo te pido que me comentes un poco más, o detalles, yo buscaré…

    Pues gracias David, por enseñarnos 😀

  2. Usa: Mozilla Firefox Mozilla Firefox 3.5.9 en Windows Windows Vista - Detectado...

    que onda mai, que le pasó a corto.mx? pa’ cuando va a estar onlain?

  3. Usa: Google Chrome Google Chrome 5.0.375.99 en Windows Windows 7 - Detectado...

    Mi conexion funciona tal cual. Pero al momento de intentar conectarme al ./mysql me lanza un error en el mysql.socket alguna ayuda?

  4. Usa: Mozilla Firefox Mozilla Firefox 3.6.6 en Windows Windows XP - Detectado...

    Quiero usar un cluster para bases de datos innodb, transacciones, llaves foraneas, etc .. esto en tu experiencia se puede realizar o no?

    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *