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 ;
Vus : 1927
Publié par Vince : 7