La haute disponibilité MySQL est une option que vous pouvez sélectionner pour permettre à votre base de données MySQL de demeurer disponible en cas de panne ou d’interruption. Cette fonctionnalité vous permet de définir des exigences de disponibilité plus strictes et une tolérance de perte de données nulle. Dans cet article, nous allons clarifier le concept général de haute disponibilité et expliquer le fonctionnement de cette option dans MySQL.
Qu’est-ce que la haute disponibilité ?
La haute disponibilité désigne la capacité d’un système ou service à continuer de fonctionner et à demeurer disponible malgré une défaillance ou une panne. Un système hautement disponible est un moyen pour les organisations d’obtenir la garantie que leurs systèmes et applications stratégiques demeurent constamment opérationnels. Cette disponibilité se révèle tout particulièrement cruciale dans certains secteurs comme la santé, la finance et l’aviation, où la moindre défaillance d’un système critique peut entraîner de lourdes conséquences.
La haute disponibilité est généralement exprimée en pourcentage de temps disponible défini par des accords de niveau de service (SLA), sachant qu’un score de 100 représente un système qui ne subit jamais la moindre défaillance. Il est pratiquement impossible d’atteindre un tel score, c’est pourquoi la plupart des organisations visent les « cinq neuf », c’est-à-dire une disponibilité de 99,999 %.
Comment fonctionne la haute disponibilité dans MySQL
Un système hautement disponible doit pouvoir être restauré instantanément en cas de panne. Une architecture haute disponibilité s’articule autour de trois composantes de base qui interagissent pour garantir la capacité de restauration et la haute disponibilité :
Détection des pannes
MySQL intègre une option de haute disponibilité qui permet aux applications de respecter des exigences de disponibilité plus élevée (avec une tolérance de perte de données nulle). Lorsque cette option est activée, le système MySQL crée trois instances dans différents domaines de défaillance, ou zones de disponibilité.
Les données sont répliquées sur ces trois instances à l’aide de la réplication de groupe MySQL, et l’application se connecte à l’instance primaire pour lire et écrire des données dans la base de données. Si une défaillance se produit, le système déclenche en quelques secondes un basculement automatique sur une instance secondaire.
Basculement
Le basculement est un mécanisme qui consiste à transférer des services vers une instance répliquée. Si plusieurs instances de sauvegarde sont disponibles, le mécanisme de basculement choisit celle qui convient le mieux pour le transfert sur le nœud primaire.
Mécanisme de redirection
Après le basculement sur une instance secondaire, la fonction de haute disponibilité redirige l’ensemble des applications et connexions utilisateur vers le nouveau nœud primaire. Elle redirige également toutes les requêtes entre l’ancien nœud primaire et la nouvelle base de données primaire.
Haute disponibilité MySQL : temps disponible
Le temps disponible désigne la durée pendant laquelle un système est disponible et opérationnel ; il est exprimé en pourcentage du temps total pendant lequel le système doit logiquement fonctionner. Un temps disponible élevé signifie que le système est disponible et qu’il fonctionne comme prévu la plupart du temps.
Le temps disponible que vous pouvez espérer obtenir avec les différents niveaux de haute disponibilité MySQL dépend de la solution de haute disponibilité spécifique que vous déployez.
Réplication MySQL
La réplication MySQL vous permet de configurer plusieurs serveurs pour assurer la redondance et le basculement afin de garantir des temps disponibles plus élevés qu’un serveur MySQL qui n’intègre pas de capacité de haute disponibilité. Une configuration maître-esclave utilise un seul serveur qui accepte les lectures et les écritures, et un ou plusieurs serveurs esclaves en lecture seule. Les données du serveur maître sont répliquées de manière asynchrone sur les serveurs esclaves.
Pour mettre en œuvre le mécanisme de basculement, vous devez configurer un ou plusieurs serveurs esclaves de secours que vous pourrez promouvoir au rang de maîtres en cas de défaillance. En règle générale, le basculement repose sur un processus manuel au cours duquel vous devez promouvoir le nœud esclave sur le nœud maître en modifiant son état pour le faire passer en mode lecture/écriture afin qu’il accepte les requêtes.
Comme le basculement est effectué manuellement, ce processus est long et induit un risque d’erreur humaine, ce qui peut conduire à allonger la durée de la panne. La réplication MySQL utilise également une réplication asynchrone ; en cas de défaillance du maître, cela signifie que les transactions validées sur le maître peuvent ne pas avoir été encore répliquées sur les serveurs esclaves. En cas de perte de données critiques, les données doivent être restaurées, ce qui allonge encore la durée d’indisponibilité du système.
Réplication de groupe MySQL
La réplication de groupe MySQL vous permet d’atteindre des temps disponibles plus élevés que la réplication MySQL. Cette fonctionnalité vous permet de configurer plusieurs serveurs MySQL dans un groupe, en désignant un serveur comme serveur primaire et en configurant les autres comme serveurs secondaires. Chaque serveur du groupe conserve une copie des données et utilise la réplication pour assurer la synchronisation des copies.
Si le serveur primaire tombe en panne, les serveurs secondaires du groupe détectent automatiquement la défaillance et déclenchent le processus de basculement. L’un des serveurs secondaires est automatiquement promu comme nouveau serveur primaire et commence à traiter les requêtes des clients. Dès lors, les autres membres secondaires du groupe reçoivent les mises à jour du nouveau serveur primaire et continuent à traiter les demandes de lecture client.
Lorsque le serveur en panne est de nouveau opérationnel, il rejoint automatiquement le groupe en tant que serveur secondaire.
Avec la réplication de groupe MySQL, la détection des pannes et le basculement interviennent automatiquement ; les temps d’arrêt sont donc réduits au minimum, sans que les applications sachent qu’une panne est survenue.
Cluster MySQL
Une solution de haute disponibilité basée sur un cluster MySQL garantit un niveau optimal de disponibilité. Ce système de base de données distribué et hautement disponible, qui intègre des capacités de basculement et d’équilibrage de charge automatiques, assure des niveaux élevés de disponibilité, de performance et d’évolutivité, et est conçu pour garantir des niveaux d’interruption proches de zéro.
Un cluster MySQL utilise trois types de nœuds, qui fonctionnent de concert pour stocker et administrer les données.
- Nœuds de données : stockent les données et traitent les requêtes de lecture/écriture.
- Nœuds de serveur MySQL : reçoivent les requêtes envoyées par les applications clientes, les traitent sur les nœuds de données, puis renvoient les résultats aux clients.
- Nœuds de gestion : gèrent le fonctionnement du cluster et assurent le basculement et la reprise en cas de défaillance.
En cas de défaillance d’un ou plusieurs nœuds du cluster, ce dernier détecte automatiquement le problème et déclenche le processus de basculement. En règle générale, l’ensemble du processus est exécuté dans la seconde qui suit la défaillance, sans interrompre le traitement des applications clientes. Le cluster poursuit son fonctionnement normal avec un temps d’arrêt quasi inexistant.