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

  1. Descargar en el sitio oficial de MySQL, Community o Enterprise. Versiones recientes incluyen 8.4 LTS, 9.x Innovation.
  2. Bootstrapping recomendado con MySQL InnoDB Cluster:

    mysqlrouter --bootstrap usuario@host:puerto --directory /ruta/mi_router --user usuario
    
    Esto genera automáticamente la configuración basada en los metadatos del clúster.
  3. Inicio:

    mysqlrouter -c /ruta/mysqlrouter.conf
    
También es posible configurar manualmente secciones "[routing:...]" en el fichero "mysqlrouter.conf" para entornos básicos sin clúster. Ejemplo de Configuración Básica:

[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.