MySQL: Solutions de Haute Disponibilité

Lors de cette petite conférence, Olivier Dasini a présenter 3 grandes méthodes pour mettre en place une infrastructure de haute disponibilité avec MySQL.

La disponibilité peut en fait ce traduire par: uptime/(uptime+downtime) soit le rapport de l’uptime sur le temps pendant lequel le serveur aurait du être disponible.

  • 90 % est équivalent à 36,5 jours/an
  • 99,9999 % est équivalent à 31 secondes/an

Les 3 solutions décrites ci-dessous sont, je l’espère, portables sur PostgreSQL.

MySQL Réplications

MySQL RéplicationSchéma MySQL Réplication

Le serveur maitre est le serveur à contacter pour l’insertion, la mise à jour et la suppression de champs dans la base de données. En effet, chaque opération est enregistrée dans le log binaire (Statement Based ou Row Based, depuis MySQL 5.1, ce qui permet non-pas d’enregistrer uniquement la requête SQL mais en fait le résultat. C’est-à-dire qu’une requête avec une valeur aléatoire comme un uniqid ne fait pas la même chose sur tous les noeuds) et les serveurs MySQL esclaves se contentent de rééxécuter toutes les opérations d’écritures effectuées sur le maitre.

Les requêtes de lecture peuvent donc maintenant être éxécutées sur les esclaves.

Avantages

  • Fonctionnalité native et stable (existe depuis MySQL 3)
  • Utilisation possible de SSL entre les nœuds

Inconvénients

  • Copie asyncrone
  • SPOF (Single Point Of Failure)
  • Load balancing non géré par MySQL

MySQL Cluster

MySQL Cluster est composé de deux parties :

  • MySQL Servers: Groupe de serveurs qui intérogent un disque de tous les disques présents dans les Data Nodes.
  • Data Nodes: Regroupe tous les disques durs

Ce graphique ci-contre résume très bien la situation, je trouve.

Avantages

  • Fail-over automatique
  • Backup possible à chaud
  • Mise à jour d’un noeud à chaud
  • Faible coût
  • Scalable en écriture comme en lecture

Inconvénients

  • Requêtes complexes (notament avec jointures) assez longues
  • Moteur: pas de fulltext ni de tests d’intégrité référentielle

Shared Disk Clustering

Ce système est le système le moins Haute Disponibilité, d’après moi. En effet, le principe est simple: il y a un ou plusieurs serveurs MySQL qui ont leurs données en commum sur un SAN réseau. Toutes les données sont donc exactement les mêmes sur tous les serveurs MySQL, si le cache est bien géré (ici, on doit supprimer presque tous les caches…).

Actif – Passif

Le mode Actif – Passif est mis en place pour qu’un autre serveur MySQL (le passif) prenne le relai si, par malheur, le premier serveur MySQL (actif) venait à tomber.

Avantages

  • Disponibilité assurée par le serveur passif si l’actif tombe (avec un temps de transition)

Inconvénients

  • Un seul serveur sur deux travaille malgrès le fait que les deux soient en fonctionnement
  • Le basculement doit être géré par un programme externe

Actif – Actif

Ici, tous les serveurs MySQL travaillent.

Avantages

  • Les deux nœuds travaillent
  • Supporte de grands volumes de données (avec connexion entre serveur applicatif et serveur de base de donnée importante)

Inconvénients

  • Le cache est un problème très important dans ce cas là. Il ne peut quasiment pas être utilisé car chaque nœud a son propre cache

Dans ces deux méthodes (actif – actif et actif – passif), le gros problème est tout de même le SPOF au niveau du SAN. Une épine dans le pied très conséquente pour se qui est de la Haute Disponibilité.

Je reste à votre disponibilité pour toute question, en esperant que ce petit résumé vous a plus…

Vous pouvez télécharger le document projeté par les intervenants sur nos serveurs.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">