FLASH INFORMATIQUE FI



public averti MySQL Cluster 5.1


Cet article va s’intéresser de manière non exhaustive au clustering MySQL en expliquant ce qu’il peut apporter, dans quel cas l’utiliser et ce à quoi il faut être attentif.



This article gives you a brief explanation of what MySQL Cluster is, in which cases you can use it and also includes some useful tips.


Julia PAOLINI


Lorsque vous souhaitez que votre application soit disponible 7j/7, 24h/24, la notion de cluster est assez rapidement évoquée comme étant la réponse adéquate au besoin. Mais qu’est ce qu’un cluster  ? Cela peut être vu comme un regroupement de machines communiquant entre elles qui permet d’augmenter la disponibilité (si une machine tombe, une autre prend le relais), d’absorber une montée en charge, faciliter la gestion des ressources. Cependant, l’utilisateur extérieur perçoit cet ensemble comme une seule entité.
Cet article va tenter de traiter de la gestion du clustering par MySQL Cluster 5.1. L’actuelle version GA est la 7.0 mais elle n’a pas été testée par l’auteure.
MySQL Cluster a été conçu pour le marché des télécommunications qui, pour leurs applications, avait besoin d’une haute disponibilité, avec des bases de données de taille relativement petites, qui supporte de nombreuses lectures avec peu d’écritures. On voit tout de suite que cela s’adresse à des applications particulières  !

Ce qu’il permet de faire  ?

Haute disponibilité (élimination de SPOF , redondance et failover ), scalabilité , haute performance, équilibrage de charge sont les objectifs mais attention  ! l’application doit être pensée pour le clustering MySQL sinon les objectifs risquent de n’être partiellement voire pas du tout remplis. Une autre caractéristique est de pouvoir faire des backups à chaud. Le produit est éprouvé car il est utilisé en production par des applications grandement utilisées mais il n’est pas la réponse magique aux problèmes de performances.
De plus, l’administration d’un cluster MySQL est complètement différente d’un serveur traditionnel et donc mérite de la formation et du temps.

Comment cela fonctionne  ?

Un cluster MySQL est composé de :

  • un ou plusieurs nœuds nommés nœuds API ou SQL pouvant être considérés par l’application comme étant les points d’entrée au cluster, ils traitent les requêtes et récupèrent les données ;
  • des nœuds appelés nœuds de données qui stockent et traitent les données ;
  • un ou plusieurs nœuds d’administration permettant de faire l’administration du cluster.

Il faut au minimum quatre nœuds afin de garantir la haute disponibilité : un nœud d’administration (qui peut aussi héberger un nœud API/SQL en backup), un nœud API/SQL (qui peut aussi héberger un nœud d’administration en backup) et deux nœuds de données.

JPEG - 5.4 ko
Configuration minimale d’un cluster MySQL

Afin de garantir le failover, une même donnée se trouve sur au moins deux nœuds de données différents (selon la configuration demandée). Comme un schéma vaut mieux qu’un long discours, en voici un pour essayer d’expliquer au mieux comment se fait la répartition des données.

JPEG - 7.3 ko
Schématisation du processus de fractionnement d’une table

Les rectangles NDBD représentent les nœuds de données. La table est d’abord divisée en plusieurs partitions (P1, P2, P3, P4). Dans l’exemple, le cluster est configuré pour qu’une donnée existe à deux endroits différents (nombre de réplicas=2), on appelle fragment primaire la partition qui est utilisée par les requêtes et le fragment secondaire la partition qui est utilisée pour le backup.
De cette manière, tant qu’un nœud dans chaque node group est vivant, le cluster continue de fonctionner car l’entièreté des données sont disponibles.
Par contre si tous les nœuds d’un node group tombent, le cluster s’arrête de fonctionner.
Le mécanisme de réplication synchrone est utilisé de manière à garantir la consistance des données entre les différents fragments : lorsque l’on souhaite modifier une donnée, l’ordre est envoyé au serveur MySQL qui détermine quel est le nœud qui stocke le fragment primaire correspondant à cette donnée et la modifie. Il est ensuite envoyé aux autres nœuds du même node group afin que le(s) fragment(s) secondaire(s) soi(en)t modifié(s). Attention toutefois, plus la donnée est volumineuse et est dupliquée, plus cela demande du temps pour l’écrire et la modifier  !

Ce à quoi il faut faire attention

Sans rentrer dans les détails qui ne vous dirons (peut-être) rien, voici quelques informations (toujours non exhaustives bien sûr) à prendre en compte :

  • Voici le matériel recommandé par MySQL pour les serveurs utilisés comme nœuds de stockage dans le cluster :
    • Système : Linux (Red Hat, SuSe), Solaris, AIX, HP-UX, Mac OSX.
    • CPU : 2 processeurs : Intel Xeon, Intel Itanium, AMD Opteron, Sun SPARC, IBM PowerPC.
    • Mémoire : 16 GB RAM.
    • Disque : 4 disques 36GB SCSI (contrôleur RAID 1).
    • Réseau : Ethernet gigabit.
  • Il faut au minimum quatre nœuds (donc quatre machines) avec une mémoire conséquente car les données et les index sont maintenus en mémoire.
  • Pour des raisons de performances, les quatre nœuds devraient être dédiés au clustering.
  • S’il y a beaucoup plus d’écritures que de lectures, les performances risquent de chuter.
  • Attention au nombre de jointure dans une même requête, plus il y en a plus les performances vont diminuer.
  • Administration différente d’un serveur MySQL classique et plus complexe.
  • Pour l’instant que sur Linux.
  • Certains ordres SQL qui fonctionnent avec un MySQL classique produisent une erreur (création de tables temporaires, limitations sur les index ...).

Deux petits tableaux comparatifs, MyISAM et InnoDB étant des moteurs de stockage de MySQL et NDB étant le (seul) moteur de MySQL Cluster.

MyISAM versus NDB

Caractéristique MyISAM NDB
Supporte les transactions multi instructions et les rollback Non Oui
Supporte les index fulltext Oui Non
Peut utiliser les recherches hash Non Oui
Supporte l’Unicode à partir de la version 4.1 5.0
Peut compresser le stockage en lecture seule Oui Non
Supporte les clés étrangères Non Non
Supporte les transactions Non Oui
Verrou au niveau Table Enregistrement
Utilise beaucoup de RAM et a beaucoup de trafic réseau Non Oui

InnoDB versus NDB

Caractéristique InnoDB NDB
Supporte les contraintes des clés étrangères Oui Non
Supporte les transactions Oui Oui
Verrou au niveau Enregistrement Enregistrement
Supporte l’Unicode à partir de la version 4.1.2 5.0
Utilise beaucoup de RAM et a beaucoup de trafic réseau Non Oui

Au bout du compte

MySQL Cluster apporte tout ce qui a trait à la notion de disponibilité (99,999%) et de performance mais la scalabilité est réduite dans le sens où l’on peut rajouter à chaud uniquement des nœuds d’administration et API/SQL. Il faut faire attention à la notion d’équilibrage de charge car dans le cas de MySQL Cluster elle se fait grâce à la répartition des données sur plusieurs nœuds (donc chaque nœud s’occupe du traitement de ses données) mais pas parce que la donnée existe à plusieurs endroits. En effet, seul le fragment primaire est utilisé pour la lecture et l’écriture.
La version 7.0 de MySQL Cluster semble apporter sont lot de nouveautés intéressantes, comme par exemple l’amélioration de la scalabilité en donnant la possibilité d’ajouter/supprimer des nœuds de données à chaud. Elle permet aussi de tirer avantage du multithreading, ce qui n’était pas possible avant. Cela permettrait, selon MySQL, d’améliorer grandement les temps de réponse. MySQL s’est aussi intéressé à la plate-forme Windows car la version 7.0 peut dorénavant être installée sur du 2003 Server, XP ou Vista mais pour le moment uniquement pour du développement. Certaines limitations ont aussi été repoussées comme par exemple le nombre de nœuds qu’un cluster pouvait gérer.
Dans tous les cas, il n’est pas pensable de prendre une application existante telle quelle et de la clusteriser. Il faut vraiment prendre le temps de repenser l’application afin de l’adapter au produit  !
Pour toute question concernant MySQL, vous pouvez contacter l’équipe d’administrateurs MySQL via mail : mysql-admin@groupes.epfl.ch.
Pour la formation, vous pouvez joindre l’équipe responsable de la formation par mail (cours.dit@epfl.ch), le matin par téléphone (021 69 322 44) ou par fax (021 69 322 20).

Sur mysql.epfl.ch vous trouverez un récapitulatif de toutes les informations concernant MySQL à l’EPFL.



Glossaire

Failover :
commutation automatique vers un système redondant ou en attente, lors d’une panne
GA (Generally Available) :
stable pour être en production
Jointure :
combinaison des enregistrements de deux tables disposant de valeurs correspondantes dans une colonne donnée de chaque table (souvent ayant le même nom dans les deux)
Rollback :
annulation d’une transaction
Scalabilité :
possibilité de pouvoir étendre un système facilement
SPOF (single point of failure) :
élément d’un système qui, dans le cas où il tombe en panne, empêche le système entier de fonctionner


Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.