CÓMO CREAR UNA BASE DE DATOS DISTRIBUIDA CON MYSQL
Lasbases de datos distribuidas permiten repartir los datos entre varios servidores (nodos) para ganar escalabilidad, alta disponibilidad, tolerancia a fallos y, en muchos casos, mejor rendimiento geográfico. MySQL ofrece varias formas de conseguirlo.Opciones principales en MySQL
table style="margin: 0 auto; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; text-align: center;">Crear un clúster de alta disponibilidad con InnoDB Cluster (recomendado para la mayoría)
InnoDB Cluster combina Group Replication, MySQL Shell y MySQL Router. Es la solución oficial más sencilla y completa para alta disponibilidad.Requisitos previos
- Al menos 3 servidores, recomendado número impar: 3, 5 o 7.
- MySQL 8.0 o superior, preferiblemente 8.4 LTS.
- MySQL Shell instalado.
- Puertos abiertos: 3306, MySQL y 33061, comunicación del grupo.
- Todas las tablas deben usar el motor InnoDB y tener clave primaria.
Pasos básicos
- Instalar MySQL y MySQL Shell en los tres nodos.
- Configurar cada instancia (ejemplo de parámetros importantes en "my.cnf" o archivo de configuración:
mysqld] server_id = 1 # Diferente en cada nodo gtid_mode = ON enforce_gtid_consistency = ON binlog_format = ROW log_bin = mysql-bin log_slave_updates = ON transaction_write_set_extraction = XXHASH64 - Crear un usuario de administración del clúster en cada nodo:
CREATE USER 'icadmin'@'%' IDENTIFIED BY 'contraseña_segura'; GRANT ALL PRIVILEGES ON *.* TO 'icadmin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; - Configurar y crear el clúster con MySQL Shell (desde el primer nodo):
Dentro de MySQL Shell, modo JavaScript:mysqlsh icadmin@nodo1:3306
dba.configureInstance('icadmin@nodo1:3306') dba.configureInstance('icadmin@nodo2:3306') dba.configureInstance('icadmin@nodo3:3306') var cluster = dba.createCluster('miCluster') cluster.addInstance('icadmin@nodo2:3306') cluster.addInstance('icadmin@nodo3:3306') cluster.status() - Instalar y configurar MySQL Router, (en uno o varios servidores de aplicación) para que las aplicaciones se conecten de forma transparente:
mysqlrouter --bootstrap icadmin@nodo1:3306 --directory /etc/mysqlrouter
Las aplicaciones se conectan al Router, puerto 6446 para lectura/escritura y 6447 para solo lectura. El Router se encarga del enrutamiento y del failover automático.
Crear una base de datos realmente distribuida con MySQL NDB Cluster
MySQL NDB Cluster es la solución diseñada específicamente para bases de datos distribuidas. Utiliza el motor NDB, Network DataBase, realiza auto-sharding, particionado automático, y permite escrituras en cualquier nodo de datos.Arquitectura típica
- Nodo de gestión, "ndb_mgmd": coordina el clúster.
- Nodos de datos, "ndbd" o "ndbmtd": almacenan y procesan los datos (mínimo 2, recomendado más).
- Nodos SQL, "mysqld": permiten acceder con SQL.
Pasos generales (resumen)
- Descargar e instalar los binarios de MySQL NDB Cluster, no es la versión estándar de MySQL, desde el sitio oficial de Oracle.
- Crear el archivo de configuración principal "config.ini", en el nodo de gestión. Ejemplo simplificado:
[ndbd default] NoOfReplicas=2 DataMemory=2G IndexMemory=500M [ndb_mgmd] HostName=ip_gestion DataDir=/var/lib/mysql-cluster [ndbd] HostName=ip_nodo_datos1 DataDir=/var/lib/mysql-cluster [ndbd] HostName=ip_nodo_datos2 DataDir=/var/lib/mysql-cluster [mysqld] [mysqld] - Arrancar los procesos en este orden:
- Nodo de gestión: "ndb_mgmd -f /ruta/config.ini".
- Nodos de datos: "ndbd", o "ndbmtd".
- Nodos SQL: "mysqld" con la opción "ndbcluster" activada.
- Crear las tablas con el motor NDB:
CREATE TABLE ejemplo ( id INT PRIMARY KEY, nombre VARCHAR(100) ) ENGINE=NDBCLUSTER;
Los datos se particionan automáticamente entre los nodos de datos de forma transparente para la aplicación.
Consideraciones importantes y buenas prácticas
Conclusión
MySQL permite crear bases de datos distribuidas de forma robusta.- Si se necesita alta disponibilidad sencilla → empezar por InnoDB Cluster.
- Si se necesita escalado horizontal real con particionado automático y multi-master → usar MySQL NDB Cluster.