MYSQL ROUTER: LA SOLUCIÓN PARA ENRUTAMIENTO TRANSPARENTE EN MYSQL
MySQL Router es un middleware que actúa como intermediario entre las aplicaciones cliente y los servidores MySQL. Su principal objetivo es proporcionar un enrutamiento transparente de conexiones, facilitando la implementación de arquitecturas de alta disponibilidad, escalabilidad, balanceo de carga y separación de lectura/escritura sin necesidad de modificar el código de las aplicaciones.Es un componente clave de MySQL InnoDB Cluster, junto con MySQL Shell y Group Replication, y también funciona con configuraciones de replicación tradicionales o InnoDB ReplicaSet/ClusterSet. Reemplaza a MySQL Proxy.
Características Principales
- Enrutamiento transparente: Las aplicaciones se conectan al Router como si fuera un único servidor MySQL. El Router redirige las conexiones automáticamente.
- Alta disponibilidad: Detecta fallos en servidores y redirige el tráfico sin intervención manual. Las aplicaciones solo necesitan reintentar la conexión.
- Balanceo de carga: Distribuye las conexiones, por ejemplo, en round-robin, entre múltiples réplicas.
- Separación de lectura/escritura: Puertos dedicados para lecturas y escrituras.
- Arquitectura de plugins: Permite extender su funcionalidad con plugins personalizados. Incluye plugins como Connection Routing (enrutamiento a nivel de conexión sin inspeccionar paquetes, para máximo rendimiento) y Metadata Cache.
- Routing Guidelines (a partir de versiones 9.2+): Reglas declarativas avanzadas para enrutamiento dinámico y granular basado en metadatos del clúster, roles de servidores, etc.
- Muy ligero y de alto rendimiento.
Cómo Funciona
MySQL Router se despliega típicamente en el mismo servidor que la aplicación. Las aplicaciones no se conectan directamente a los servidores MySQL, sino al Router. Cuando se usa con InnoDB Cluster:- El Router consulta los metadatos del clúster (a través del plugin Metadata Cache).
- Detecta automáticamente el PRIMARY para escrituras y las SECONDARIES para lecturas.
- En caso de conmutación por error, el Router actualiza las rutas sin reiniciar.
Instalación y Despliegue
- Descargar en el sitio oficial de MySQL, Community o Enterprise. Versiones recientes incluyen 8.4 LTS, 9.x Innovation.
- Bootstrapping recomendado con MySQL InnoDB Cluster:
Esto genera automáticamente la configuración basada en los metadatos del clúster.mysqlrouter --bootstrap usuario@host:puerto --directory /ruta/mi_router --user usuario - Inicio:
mysqlrouter -c /ruta/mysqlrouter.conf
[logger]
level = INFO
[routing:read_write]
bind_address = 0.0.0.0
bind_port = 7002
destinations = primary1:3306,primary2:3306
routing_strategy = first-available
[routing:read_only]
bind_address = 0.0.0.0
bind_port = 7001
destinations = replica1:3306,replica2:3306,replica3:3306
routing_strategy = round-robin
Ventajas
- Simplifica el desarrollo de aplicaciones (no necesitan lógica de HA).
- Escalable y resiliente.
- Fácil de mantener: cambios en la topología no requieren modificar las apps.
- Bajo consumo de recursos.
Casos de Uso Comunes
- InnoDB Cluster para alta disponibilidad y escalabilidad.
- Entornos de replicación maestro-esclavo tradicionales.
- Aplicaciones que requieren separación de lecturas/escrituras.
- Microservicios o arquitecturas distribuidas.
Limitaciones y Consideraciones
- El enrutamiento básico a nivel de conexión no inspecciona queries individuales, a diferencia de proxies más avanzados como ProxySQL.
- Para funcionalidades avanzadas (Routing Guidelines), se recomiendan versiones recientes (9.2+).
- Se debe diseñar la aplicación para reintentar conexiones en caso de fallo temporal.