Mysql Cluster
Voici un petit article sur l’installation d’une base de données Mysql en mode Cluster.
Avantages de Mysql Cluster :
– BDD multi-maître
– Haute disponibilité
Inconvénients :
– Nécessite au minimum 3 serveurs
– Limite du moteur ndbcluster par rapport à InnoDB (http://dev.mysql.com/doc/mysql-cluster-excerpt/5.1/en/mysql-cluster-ndb-innodb-engines.html)
Le schéma ci-dessous expose l’architecture de Mysql cluster :
Pour faire simple, nous allons monter une architecture avec 3 serveurs :
- ServeurA : il contient un frontal Mysql (SQL Node) et un noeud de données (Data Node)
- ServeurB : il contient un frontal Mysql (SQL Node) et un noeud de données (Data Node)
- ServeurM : il contient le serveur de Management (NDB Management Server)
Une fois Linux Debian installé sur chacun des serveurs, faire :
apt-get update && apt-get install mysql-server
Configuration des SQL Nodes et des Data Nodes
Sur les serveurA et serveurB, éditer le fichier /etc/mysql/my.cnf et rajouter les paramètres suivants :
- Dans la section [mysqld]
default_table_type = NDBCLUSTER ndbcluster ndb-connectstring=10.0.0.3
- Dans la section [mysql_cluster]
ndb-connectstring=10.0.0.3
Pour que le démon ndb soit configuré pour le démarrage du serveur, taper :
shell> update-rc.d mysql-ndb defaults
Configuration du management NDB Management Server
Sur le serveurM, créer un fichier /etc/mysql/ndb_mgmd.cnf
shell> vi /etc/mysql/ndb_mgmd.cnf
Et indiquer par exemple cette configuration :
[NDBD DEFAULT] NoOfReplicas=2 DataMemory=2048MB IndexMemory=1024MB MaxNoOfTables=256 MaxNoOfOrderedIndexes=256 MaxNoOfUniqueHashIndexes=128 MaxNoOfConcurrentOperations=2000000 MaxNoOfLocalOperations=2200000 TimeBetweenLocalCheckpoints=6 [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] [TCP DEFAULT] [NDB_MGMD] Id=1 # the NDB Management Node (this one) HostName=10.0.0.3 [NDBD] Id=2 # the first NDB Data Node HostName=10.0.0.1 DataDir= /var/lib/mysql-cluster/ [NDBD] Id=3 # the second NDB Data Node HostName=10.0.0.2 DataDir=/var/lib/mysql-cluster/ [MYSQLD] Id=4 # the first SQL node HostName=10.0.0.1 [MYSQLD] Id=5 # the second SQL node HostName=10.0.0.2 [MYSQLD] Id=6
Supprimer mysqld lors du démarrage du serveur :
shell> update-rc.d -f mysql remove
Ajouter le démon ndb_mgmd au démarrage du serveur :
shell> update-rc.d mysql-ndb-mgm defaults
Démarrer le service management sur le serveurM :
shell> /etc/init.d/mysql-ndb-mgm start
Démarrer les différents services sur les serveurA et serveurB
shell> /etc/init.d/mysql start (ou restart) shell> /etc/init.d/mysql-ndb start-initial
Attention : le start-initial n’est à faire que la 1ère fois sinon vous aurez des pertes de données !!!
Vérifier que tous les noeuds sont connectés
Pour cela il faut se connecter au Management serveur. Vous pouvez taper la commande sur n’importe quel serveur :
shell> ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm>
Pour connaître les toutes les commandes, taper un ?. Nous ne les détaillerons pas ici dans cet article mais sachez qu’il est possible de redémarrer des nœuds, faire des sauvegardes …
Pour visualiser l’état des connexions des noeuds, taper :
ndb_mgm> show Connected to Management Server at: 10.0.0.3:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @10.0.0.1 (Version: 5.0.51, Nodegroup: 0, Master) id=3 @10.0.0.2 (Version: 5.0.51, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @10.0.0.3 (Version: 5.0.51) [mysqld(API)] 3 node(s) id=4 @10.0.0.1 (Version: 5.0.51) id=5 @10.0.0.2 (Version: 5.0.51) id=6 (not connected, accepting connect from any host)
Création de la base de données
Je ne vais pas détailler ici la création de la base mais sachez tout de même ceci :
- La base de donnés doit être créée sur les 2 serveurs (A et B). Il en est de même pour les utilisateurs.
- Par contre, les tables (de type ndbcluster) sont à créer uniquement sur un des 2 serveurs ;