MySQL - Monter un cluster de test
+
Par Remi le dimanche 7 juin 2009, 10:12 - HowTo - Lien permanent
Pour mes développement, j'ai besoin d'un serveur MySQL avec le moteur NDB
Voici les configuration réalisées pour avoir un tel serveur opérationnel sur une seule machine (cette configuration n'est pas supportée, elle ne présente aucun intérêt en production)
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.