Las aplicaciones modernas requieren alta disponibilidad y la capacidad de escalar lecturas sin sacrificar rendimiento. Una de las estrategias más habituales para lograrlo es la replicación. En este artículo explico cómo montar una replicación de líder único en MySQL de forma local usando Docker y cómo conectar ese clúster a una aplicación Nodejs con Sequelize para que las operaciones de escritura vayan al maestro y las lecturas se sirvan desde réplicas.

Resumen del objetivo: crear un entorno con un servidor MySQL principal que reciba todas las escrituras y tres réplicas que atiendan las lecturas, desplegado con Docker Compose, y luego integrar esa topología con un servidor Nodejs para observar la replicación en tiempo real.

Requisitos previos: conocimiento básico de replicación de bases de datos, experiencia con Docker y Docker Compose, y conocimientos básicos de Nodejs y cómo ejecutar un servidor Nodejs.

Configuración con Docker Compose: en la raíz del proyecto crea un archivo docker-compose.yml con la definición de un servicio mysql-master y tres servicios mysql-slave. Cada contenedor debe tener un server-id único y activado el log binario. Conceptualmente la sección de comandos para cada servicio incluye opciones como --server-id=n y --log-bin=ON. Es recomendable considerar también binlog_format=ROW para asegurar replicación basada en filas cuando sea necesario.

Arranque de los contenedores: ejecuta docker-compose up -d para levantar las instancias MySQL. A continuación configura el maestro y las réplicas desde la consola de cada contenedor.

Configuración del maestro: accede al contenedor maestro con docker exec -it mysql-master bash y dentro ejecuta el cliente MySQL con mysql -uroot -p. Crea un usuario de replicación y otórgale permisos con sentencias similares a CREATE USER repl_user@% IDENTIFIED BY replication_pass; GRANT REPLICATION SLAVE ON *.* TO repl_user@%; FLUSH PRIVILEGES;. Este usuario será usado por las réplicas para conectarse al maestro y recibir binlogs.

Configuración de las réplicas: para cada contenedor réplica entra con docker exec -it nombre_replicante bash y luego al cliente MySQL. Indica la fuente de replicación con una sentencia del estilo CHANGE REPLICATION SOURCE TO SOURCE_HOST=mysql-master, SOURCE_USER=repl_user, SOURCE_PASSWORD=replication_pass, GET_SOURCE_PUBLIC_KEY=1; y luego arranca la replicación con START REPLICA;. Comprueba el estado con SHOW REPLICA STATUS; y confirma que Replica_IO_Running y Replica_SQL_Running estén en Yes para verificar que la replicación está activa y sincronizada.

Buenas prácticas y detalles importantes: el parámetro server-id debe ser único por servidor. El log binario debe estar activado en el maestro. El formato de binlog puede ser ROW para mayor consistencia en ciertos escenarios. En entornos de producción se deben considerar backups consistentes, monitorización y un mecanismo de failover o reelección de líder, ya que bibliotecas ORM por defecto no gestionan la promoción automática de una réplica a maestro.

Integración con Nodejs y Sequelize: en el proyecto Node instala dependencias como express, mysql2 y sequelize. Configura Sequelize con el apartado replication para indicar la conexión de escritura y la lista de conexiones de lectura. Por ejemplo, la configuración especifica una conexión write apuntando al puerto 3306 del maestro con credenciales root y contraseña master y una lista read con réplicas en puertos 3307, 3308 y 3309 usando credenciales root y contraseña slave. Sequelize entonces enruta automáticamente INSERT y UPDATE al write y SELECT a una de las conexiones read disponibles.

Esquema de trabajo en la aplicación: crea un modelo User con campos name y email y monta rutas HTTP básicas. Al hacer POST en la ruta para crear usuarios la operación de inserción será enviada al maestro y, poco después, se replicará a las réplicas. Al hacer GET para listar usuarios la consulta SELECT será atendida por una réplica, permitiendo escalar lecturas sin sobrecargar el maestro.

Ejemplo de flujo de pruebas: realiza una petición POST al endpoint de usuario y verifica en tiempo real cómo el registro aparece primero en la base de datos del maestro y luego se propaga a las réplicas. Observa el estado de replicación con SHOW REPLICA STATUS; para ver offsets y posibles errores.

Limitaciones y siguiente pasos: usar Sequelize para routing de lectura/escritura funciona muy bien en desarrollo, pero en producción es necesario contemplar escenarios de fallo del maestro. Cuando el maestro cae se requiere un mecanismo de failover que promueva una réplica a líder y actualice las conexiones de las aplicaciones. En futuras entregas se pueden abordar estrategias de alta disponibilidad, consensus para elección de líder y orquestación con herramientas que automaticen la conmutación por error.

Sobre Q2BSTUDIO: en Q2BSTUDIO somos una empresa de desarrollo de software que ofrece aplicaciones a medida y software a medida para empresas de distintos sectores. Somos especialistas en inteligencia artificial, ciberseguridad y servicios cloud aws y azure, y acompañamos a nuestros clientes desde el diseño hasta la puesta en producción. Si necesita soluciones personalizadas para sus proyectos puede consultar nuestra página de desarrollo de aplicaciones y software a medida y también ofrecemos arquitectura y migración en servicios cloud aws y azure.

Palabras clave y servicios: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi. Si busca integrar inteligencia de negocio o reporting avanzado podemos ayudarle con proyectos de Business Intelligence y Power BI adaptados a su negocio.

Conclusión: montar una replicación de líder único en MySQL con Docker es una forma práctica de experimentar y validar patrones de escalado de lecturas. Integrada con Nodejs y Sequelize permite desarrollar aplicaciones que separan lecturas y escrituras y observar comportamiento de replicación en tiempo real. Para soluciones profesionales y proyectos productivos, Q2BSTUDIO aporta experiencia en desarrollo de software a medida, seguridad y despliegue en la nube para garantizar escalabilidad, resiliencia y cumplimiento de requisitos empresariales.