Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Vamos a ver como instalar MySQL Cluster y sus caractersticas. No se trata de unasolucin
de alta disponibilidad para el tpico MySQL (con tablas MyISAM o InnoDB) sino que se trata
Nodo de gestin (ndb_mgmd): Permite la gestin del resto de nodos del cluster,
arrancar y apagar nodos o hacer backups. Aunque se deba arrancar el primero puede fallar
sin afectar al funcionamiento del cluster.
Nodo SQL: Nodo a travs del cual accedemos a los datos. Se trata de un mysqld con
el conector para los ndb. Debe ser arrancado con las opciones ndbcluster para habilitar el
storage engine y la opcin ndb-connectstring para indicar el nodo a conectarnos para
acceder al clster
Tiene algunas restricciones a considerar:
Se trata de una base de datos en memoria por lo que tantos datos por tanta
redundacia es la memria RAM que necesitamos (ms un extra por el sistema y los
deamons). En las versiones actuales los datos no indexados pueden ir a disco pero todo
dato indexado debe estar en memoria.
Las queries con joins al estar repartidas las rows entre los nodos de datos pasar a
ser, en general, ms costosas. Lo ideal es obtener siempre resulsets pequeos
El storage engine no soporta FULLTEXT, por lo que para este tipo de bsquedas es
posible que necesitemos un sistema externo como solr o Sphinx
A continuacin podemos ver como instalar el MySQL Cluster en un solo equipo para evaluarlo.
Para la instalacin podemos bajar los binarios de la web de MySQL y dejarlos en /opt/mysqlcluster:
cd /usr/local/src
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.1/mysql-clustergpl-7.1.15a-linux-x86_64glibc23.tar.gz/from/http://mirrors.ircam.fr/pub/mysql/
tar xzf mysql-cluster-gpl-7.1.15a-linux-x86_64-glibc23.tar.gz -C /opt
ln -s /opt/mysql-cluster-gpl-7.1.15a-linux-x86_64-glibc23/ /opt/mysqlcluster
Y cambiamos permisos:
cd /opt/mysql-cluster
chown -R root:mysql .
-p /opt/mycluster/conf
-p /opt/mycluster/ndb1
-p /opt/mycluster/ndb2
-p /opt/mycluster/ndb3
-p /opt/mycluster/ndb4
-p /opt/mycluster/mysqld
-p /opt/mycluster/ndb-mgm
mysql. /opt/mycluster/ndb1
mysql. /opt/mycluster/ndb2
mysql. /opt/mycluster/ndb3
mysql. /opt/mycluster/ndb4
mysql. /opt/mycluster/mysqld
mysql. /opt/mycluster/ndb-mgm
En un entorno real depende del rol del equipo creariamos un directorio o otro. A continuacin
instalaremos las tablas para el mysqld:
cd /opt/mysql-cluster
./scripts/mysql_install_db --user=mysql --datadir=/opt/mycluster/mysqld
[ndbd]
hostname=localhost
datadir=/opt/mycluster/ndb1
nodeid=11
[ndbd]
hostname=localhost
datadir=/opt/mycluster/ndb2
nodeid=12
[mysqld]
nodeid=50
EOF
Podemos ver que el nodo de gestin esta arrancado con netstat. Veremos que esta
escuchando, por defecto, en el puerto 1186:
# netstat -tpln | grep ndb_mgmd
tcp
0
0 0.0.0.0:1186
LISTEN
30375/ndb_mgmd
0.0.0.0:*
-- Angel connected to
-- Angel allocated nodeid: 11
Dada la configuracin que hemos definido sin restringir por host, obtendremos el siguiente
nodeid disponible:
2011-10-17 15:57:44 [ndbd] INFO
'localhost:1186'
-- Angel connected to
Mediante ndb_mgm y la opcin -e para pasar comandos podemos ver datos sobre el estado
del cluster y sus nodos. Con SHOW veremos un resumen del estado global:
# /opt/mysql-cluster/bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
--------------------[ndbd(NDB)]
2 node(s)
id=11
@127.0.0.1 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0, Master)
id=12
@127.0.0.1 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1
@127.0.0.1 (mysql-5.1.56 ndb-7.1.15)
[mysqld(API)] 1 node(s)
id=50 (not connected, accepting connect from any host)
0.0.0.0:*
Para crear las tablas ndb simplemente deberemos indicar ENGINE=ndb, por ejemplo:
Oct
Oct
Oct
Oct
Oct
Oct
Oct
Oct
Oct
Oct
17
17
17
17
17
17
17
17
17
17
16:03
15:21
16:01
16:01
16:01
16:01
16:04
16:01
13:54
13:54
.
..
apolo.pid
ibdata1
ib_logfile0
ib_logfile1
jordi
mysql
ndbinfo
test
Los privilegios se almacenan en el datadir del mysqld, por lo que deberemos definirlos a cada
uno que instalemos con sus usuarios:
pwgen 20 > /opt/myclusterdb/.mysql.root.pass
chmod 600 /opt/myclusterdb/.mysql.root.pass
/opt/mysql-cluster/bin/mysqladmin -u root -h 127.0.0.1 password $(cat
/opt/myclusterdb/.mysql.root.pass)
/opt/mysql-cluster/bin/mysqladmin -u root password $(cat
/opt/myclusterdb/.mysql.root.pass)
echo "alias mycluster='/opt/mysql-cluster/bin/mysql -p\$(cat
/opt/myclusterdb/.mysql.root.pass)'" >> /etc/profile
. /etc/profile
echo 'delete from mysql.user where Password="";' | mycluster
echo 'flush privileges;' | mycluster
28420
28420
kill:
kill:
kill:
kill:
process
process
process
process
Subscriber bitmask 00
Subscriber bitmask 00
for ./mysql/ndb_schema
for
[ndb_mgmd(MGM)] 1 node(s)
id=1
@127.0.0.1 (mysql-5.1.56 ndb-7.1.15)
[mysqld(API)] 1 node(s)
id=50 (not connected, accepting connect from any host)
Y podremos volver a acceder a los datos ya que peridicamente los ndb pasan los datos a
disco.
mysql> select * from jordi;
+------+
| id
|
+------+
|
3 |
|
2 |
|
1 |
+------+
3 rows in set (0.12 sec)
Al volver a arrancar:
# su - mysql -c '/opt/mysql-cluster/bin/ndb_mgmd -f
/opt/mycluster/conf/config.ini --initial
--configdir=/opt/mycluster/conf/'
# su - mysql -c '/opt/mysql-cluster/bin/mysqld --defaultsfile=/opt/mycluster/conf/my.cnf '
# su - mysql -c '/opt/mysql-cluster/bin/ndbmtd -c localhost:1186'
2011-10-17 16:23:18 [ndbd] INFO
-- Angel connected to
'localhost:1186'
2011-10-17 16:23:18 [ndbd] INFO
-- Angel allocated nodeid: 11
# su - mysql -c '/opt/mysql-cluster/bin/ndbmtd -c localhost:1186'
2011-10-17 16:23:19 [ndbd] INFO
-- Angel connected to
'localhost:1186'
2011-10-17 16:23:19 [ndbd] INFO
-- Angel allocated nodeid: 12
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> use jordi
Database changed
mysql> select * from jordi;
+------+
| id
|
+------+
|
1 |
|
3 |
|
2 |
+------+
3 rows in set (0.05 sec)
mysql>