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
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 😀
Yo compilo los kernel naturales o Vanillas, desde http://www.kernel.org y los hago a la medida del equipo, ni un driver mas ni uno menos
que onda mai, que le pasó a corto.mx? pa’ cuando va a estar onlain?
Migracion de servidor, pero en un momento lo pongo en linea de nuevo
Mi conexion funciona tal cual. Pero al momento de intentar conectarme al ./mysql me lanza un error en el mysql.socket alguna ayuda?
Quiero usar un cluster para bases de datos innodb, transacciones, llaves foraneas, etc .. esto en tu experiencia se puede realizar o no?
Saludos.