Installation

# yum install mysql-cluster

Configuration du Cluster

Je suis partie de l'exemple fournit (/usr/share/mysql/ndb-config-2-node.ini) pour construire une architecture minimum :

  • 1 nœud de gestion
  • 1 nœud SQL
  • 2 nœuds de données

Voici le fichier /var/lib/mysql-cluster/config.ini qui sera lu par le processus de gestion (ndb_mgmd) pour connaitre la topologie des noeuds

NoOfReplicas= 2
MaxNoOfConcurrentOperations= 10000
DataMemory= 200M
IndexMemory= 24M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfAttributes=6144
MaxNoOfTables=384
MaxNoOfOrderedIndexes=768
MaxNoOfUniqueHashIndexes=384

[ndb_mgmd]
Id=1
HostName= localhost

[ndbd]
Id= 2
HostName= localhost

[ndbd]
Id= 3
HostName= localhost

[mysqld]
Id= 4

Adaptation du fichier de configuration de MYSQL

Dans le fichier /etc/my.cnf (seuls les ajouts apparaissent)

Activation du moteur NDB dans le serveur SQL

[mysqld]
# To allow mysqld to connect to a MySQL Cluster management daemon
ndbcluster
ndb-connectstring="nodeid=4;host=localhost:1186"

Pour les noeuds de données, on forcera (cf plus bas) la configuration dans le script de lancement

[ndbd]
#connect-string => cf script de lancement

Configuration du client de gestion (ndb_mgm)

[ndb_mgm]
# connection string for MySQL Cluster management tool
connect-string="host=localhost:1186"

Création d'un script de démarrage

Les scripts fournit ne sont pas adapté a cette configuration, en particulier :

  • Gestion d'un seul nœud de données
  • Script d'arrêt du nœud de données ne permettant pas son arrêt s'il est le dernier nœud actif

Donc j'ai créer mon propre script qui permet de

  • Lancer le noeud de gestion 
  • Lancer les noeuds de données
  • Arrêter tous les noeuds

J'ai utilisé une version modifiée du script ndb_mgmd fournit dans le RPM

# cp /etc/init.d/ndb_mgmd /etc/init.d/cluster

Modifications (diff)

--- ndb_mgmd    2009-06-06 08:15:46.000000000 +0200
+++ cluster    2009-06-07 08:43:32.359320520 +0200
@@ -54,12 +54,28 @@
     # /var/lib/mysql-cluster/config.ini.
     $SU -l mysql -c "cd /var/lib/mysql-cluster; /usr/libexec/ndb_mgmd" >> "$errlogfile" 2>&1 < /dev/null
     ret=$?
+    prog="Management node 1"
     if [ $ret -eq 0 ]; then
         action $"Starting $prog: " /bin/true
     else
             action $"Starting $prog: " /bin/false
     fi
    [ $ret -eq 0 ] && touch /var/lock/subsys/ndb_mgmd
+
+    prog="Data Node 2"
+    $SU -l mysql -c "/usr/libexec/ndbd '--connect-string=nodeid=2;host=localhost:1186'" >/dev/null 2>&1
+    if [ $ret -eq 0 ]; then
+        action $"Starting $prog: " /bin/true
+    else
+            action $"Starting $prog: " /bin/false
+    fi
+    prog="Data Node 3"
+    $SU -l mysql -c "/usr/libexec/ndbd '--connect-string=nodeid=3;host=localhost:1186'" >/dev/null 2>&1
+    if [ $ret -eq 0 ]; then
+        action $"Starting $prog: " /bin/true
+    else
+            action $"Starting $prog: " /bin/false
+    fi
     return $ret
}

 
Et le tour est joué :

# service mysqld restart
# service cluster start
Démarrage de Management node 1 : [ OK ]
Démarrage de Data Node 2 : [ OK ]
Démarrage de Data Node 3 : [ OK ]
# ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @127.0.0.1 (Version: 5.1.35, starting, Nodegroup: 0, Master)
id=3 @127.0.0.1 (Version: 5.1.35, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 (Version: 5.1.35)

[mysqld(API)] 1 node(s)
id=4 (not connected, accepting connect from any host)

Il ne reste plus qu'à utilise l'option ENGINE=NBDCLUSTER lors de la création des tables.