Añadir nodos online a nuestro MySQL Cluster

A partir de la versión 7.0 y 7.1 se han añadido nuevas funcionalidades a MySQL Cluster que aumentan tanto la escalabilidad como el rendimiento de la base de datos. La nueva mejora que hoy voy a tratar aquí es la posibilidad de añadir nuevos nodos de almacenamiento a nuestro cluster en caliente sin necesidad de hacer una parada de mantenimiento.

A la hora de escalar nuestro cluster hay que tener en cuenta siempre el número de réplicas (NoOfReplicas) y el número de nodos que queremos. Debemos recordar que dicho número debe ser divisible y al mismo tiempo que tanto uno como otro tienen un límite. En el ejemplo que voy a mostrar tendremos la base de datos con dos réplicas y dos nodos y lo pasaremos a 2 réplicas y 4 nodos. De esta forma, pasaremos de tener un único Node Group (2/2=1) a tener dos Node Groups (4/2=2).

El primer paso es configurar los Management Node. Para ello añadimos los dos nuevos ndbd a los ficheros config.ini:

[ndbd]
Id = 1
Hostname = 192.168.1.10
[ndbd]
Id = 2
Hostname = 192.168.1.11
[ndbd]
Id = 3
Hostname = 192.168.1.12
[ndbd]
Id = 4
Hostname = 192.168.1.13

A continuación reiniciamos todos los Management Nodes para que lean el nuevo fichero de configuración y una vez en marcha haremos lo mismo con los Data Nodes que ya están en funcionamiento:

# db_mgmd -f config.ini –reload
ndb_mgm> 1 RESTART
ndb_mgm> 2 RESTART

De la misma forma, reiniciamos nuestros SQL Nodes con el típico /etc/init.d/mysqld restart

Iniciamos los dos nuevos nodos con --initial:

3 #> ndbd --initial
4 #> ndbd --initial

Desde la consola de administración creamos el nuevo Node Group incluyendo los nuevos nodos 3 y 4:

ndb_mgm> CREATE NODEGROUP 3,4

Desde un SQL Node lanzamos el reparticionado de cada tabla para que los datos y los índices se repartan entre los 4 nodos existentes.

mysql> ALTER ONLINE TABLE productos REORGANIZE PARTITION;
mysql> ALTER ONLINE TABLE clientes REORGANIZE PARTITION;
mysql> ALTER ONLINE TABLE ventas REORGANIZE PARTITION;

Una vez hecho, se recomienda un OPTIMIZE TABLE en las tablas para "desfragmentar" los dos nodos originales.

Listo, hemos pasado de una infraestructura de dos nodos a una de cuatro sin ninguna parada de servicio. Nadie se ha enterado y hemos aumentado el throughput y la disponibilidad de nuestro cluster.

1 Comment · Tags: ,

Comments

  1. Hi miguel, excelente este blog, me ha servido de mucho en lo que es db's , que alegria tener gente asi documentando estas cosas.. Muchos existos y gracias por todos los datos que compartes.

    james jara on