Assurer la disponibilité de MySQL


Contexte

Le système de gestion de la base de données est une composante très importante d'une application. Sa défaillance entraine dans la plus part du temps une interruption de service. Ce qui n'est pas toléré pour un service critique

Solution 1 : Configurer la réplication MySQL

Nous disposons d'un serveur "master" et de n serveurs "slave". La communication se fait essentiellement avec le master et les données sont repliquées sur les slaves.

🦟 En cas de défaillance d'un slave il faut juste le remettre en place
🦟 En cas de défaillance du master il faut configurer un des slave en master et diriger la communication vers le nouveau master

Cependant cela va occasionner un temps de rupture de service
[ Application ]
       /             \
      / Écritures     \ Lectures
     v                 v
┌──────────────┐     ┌──────────────┐
│ Master (Maître)│───► │ Slave (Esclave)│ (Réplication asynchrone)
└──────────────┘     └──────────────┘

Solution 2 : Configurer un cluster Galera

n serveurs sont mis en cluster avec une réplication synchrone.

🦟 En cas de défaillance d'un noeud du cluster le service continue sans interruption avec les autres noeuds fonctionnels
	┌──────────────┐
       │ Application  │
       └──────┬───────┘
              │ (Via Load Balancer / Proxy)
       ┌──────┴───────┐
       │              │
       v              v
┌──────────────┐┌──────────────┐┌──────────────┐
│   Nœud 1     ││   Nœud 2     ││   Nœud 3     │
│ (Écrit/Lit)  ││ (Écrit/Lit)  ││ (Écrit/Lit)  │
└──────▲───────┘└──────▲───────┘└──────▲───────┘
       │              │              │
       └──────────────┴──────────────┘
         Flux de Certification Mutuel
            (Synchrone / wsrep)

Eninam BAGNABANA     |     RhinoTech     |     bagnadavid@outlook.fr     |