Volver a MySQL Intermedio

Alta Disponibilidad con InnoDB Cluster

Arquitectura del InnoDB Cluster

┌─────────────────────────────────────────┐
│         MySQL Router (x2)               │
│  Puerto 6446 (R/W) │ Puerto 6447 (R/O) │
└────────┬──────────────────┬─────────────┘
         │                  │
    ┌────▼────┐        ┌────▼────┐   ┌──────────┐
    │ Primary │◄──────►│Replica 1│   │Replica 2 │
    │ :3306   │  GR    │ :3306   │   │  :3306   │
    └─────────┘        └─────────┘   └──────────┘

Configurar InnoDB Cluster

# Verificar compatibilidad de la instancia mysqlsh -- dba checkInstanceConfiguration root@host1:3306 # Configurar instancia mysqlsh -- dba configureInstance root@host1:3306
// MySQL Shell — crear cluster shell.connect('root@host1:3306'); var cluster = dba.createCluster('MiCluster', { multiPrimary: false, gtidSetIsComplete: true }); // Agregar réplicas cluster.addInstance('root@host2:3306', { recoveryMethod: 'clone' }); cluster.addInstance('root@host3:3306', { recoveryMethod: 'clone' }); cluster.status();

Configuración del MySQL Router

[routing:escritura] bind_address = 0.0.0.0 bind_port = 6446 destinations = metadata-cache://MiCluster/?role=PRIMARY routing_strategy = first-available [routing:lecturas] bind_address = 0.0.0.0 bind_port = 6447 destinations = metadata-cache://MiCluster/?role=SECONDARY routing_strategy = round-robin

Manejo de Failover

// El failover automático ocurre sin intervención // Verificar nuevo primario cluster.status(); // Reiniciar cluster en caso de fallo total var cluster = dba.rebootClusterFromCompleteOutage('MiCluster'); // Failover forzado (posible pérdida de datos) cluster.forceQuorumUsingPartitionOf('root@superviviente:3306');

Monitoreo del Cluster

-- Estado de los miembros SELECT MEMBER_ID, MEMBER_HOST, MEMBER_ROLE, MEMBER_STATE FROM performance_schema.replication_group_members; -- Cola del aplicador (backlog) SELECT COUNT_TRANSACTIONS_IN_QUEUE FROM performance_schema.replication_group_member_stats WHERE MEMBER_ID = @@server_uuid;

MySQL ReplicaSet (Alternativa Simplificada)

// Para 2 nodos sin Group Replication var rs = dba.createReplicaSet('RS1'); rs.addInstance('root@replica:3306'); rs.status(); // Switchover manual rs.setPrimaryInstance('root@replica:3306'); // Failover forzado rs.forcePrimaryInstance('root@replica:3306');