Analyse MySQL Cluster 5.1 Julia.Paolini@epfl.ch EPFL - Domaine IT, Responsonable MySQL 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. 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. 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 ! 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; z des nœuds appelés nœuds de données qui stockent et traitent les données; z 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. Configuration minimale d’un cluster MySQL 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. 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. Comment cela fonctionne ? Un cluster MySQL est composé de: z un ou plusieurs nœuds nommés nœuds API ou SQL pouvant être Schématisation du processus de fractionnement d’une table 26 JANVIER 2010 - N°1 13 MySQL Cluster 5.1 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: z Voici le matériel recommandé par MySQL pour les serveurs utilisés comme nœuds de stockage dans le cluster: w Système: Linux (Red Hat, SuSe), Solaris, AIX, HP-UX, Mac OSX. w CPU: 2 processeurs: Intel Xeon, Intel Itanium, AMD Opteron, Sun SPARC, IBM PowerPC. w Mémoire: 16 GB RAM. w Disque: 4 disques 36GB SCSI (contrôleur RAID 1). w Réseau: Ethernet gigabit. z 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. z Pour des raisons de performances, les quatre nœuds devraient être dédiés au clustering. z S’il y a beaucoup plus d’écritures que de lectures, les performances risquent de chuter. z Attention au nombre de jointure dans une même requête, plus il y en a plus les performances vont diminuer. z Administration différente d’un serveur MySQL classique et plus complexe. z Pour l’instant que sur Linux. z 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. 14 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 NDB Supporte les contraintes des clés étrangères Oui Non Supporte les transactions Oui Oui InnoDB versus NDB Caractéristique Verrou au niveau Enregistre- Enregistrement ment 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. 26 JANVIER 2010 - N°1 MySQL Cluster 5.1 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. GLOSSAIRE & Failover: commutation automatique vers un système redondant ou en attente, lors d’une panne. GA (Generally Available): stable pour être en production. Pour la formation, vous pouvez joindre l’équipe responsable de la formation par mail ([email protected]), 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. n 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). 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. Rollback: annulation d’une transaction. Scalabilité: possibilité de pouvoir étendre un système facilement. À votre service Doodle@epfl Pierre.Mellier@epfl.ch EPFL – Domaine IT – Responsable du KIS Le succès du service Doodle (www.doodle.com) ne se dément pas. Il permet très facilement de gérer une prise de rendez-vous ou de réaliser un petit sondage. L’outil est tellement agréable et rapide à utiliser que désormais beaucoup de rendez-vous à l’EPFL se concrétisent au moyen de ce service. Son business plan est identique à celui de Google, un service gratuit qui se rémunère à l’aide de publicité plus ou moins discrète. Cette démarche peut évidemment poser problème à ceux qui considèrent assez justement qu’il n’y a pas de raison d’être envahi par de la publicité sur son lieu de travail. C’est pourquoi nous avons décidé d’acquérir une licence d’utilisation spécialement pour l’EPFL qui donne les avantages suivants: z suppression de la publicité z trafic Web sécurisé par HTTPS z utilisation du bandeau EPFL. Ainsi, la suppression de la publicité et l’utilisation du bandeau EPFL permettent encore de renforcer le sérieux de l’outil. De plus, sa confidentialité est améliorée à l’aide d’un canal de communication crypté (HTTPS) entre le poste de travail et les serveurs Web de Doodle. L’accès au service Doodle pour l’EPFL se fait au moyen de l’URL epfl.doodle.com, le service continuant à être hébergé chez Doodle. Seules les personnes, identifiées à l’aide d’une adresse email de l’EPFL ([email protected]), peuvent gérer des prises de rendez-vous et des sondages. Pour vous connecter à ce service, vous avez donc besoin de configurer un compte doodle avec votre adresse email de l’EPFL. Bien sûr, les personnes qui répondent à la prise de rendez-vous ou au sondage peuvent provenir quant à eux du monde entier… n 26 JANVIER 2010 - N°1 15