Cluster MySQL
De Diablotins.org.
| Mise en place d’un architecture de type cluster MySQL
|
| ||
| Cet article traite de la mise en place du module NDB CLUSTER De MySQL. Celui-ci permet de gérer des pools d’instances Mysqld, pilotés par des Data Engines Ndbd et organisés et ordonnancés par un manager Ndb_mgmd.
|
Sommaire |
Contrainte
Dans le cadre de cette mise en oeuvre il est IMPORTANT, pour des soucis de disponibilité, d’installer le manager de NDB CLUSTER sur une machine différente des démons NDBD et MYSQLD.
- soit installer une troisième machine
- soit pauser le manager sur une machine de production proche et accessible sans restrictions d'accès réseaux.
Remarque : Cette contrainte, n’est pas une obligation mais s’avère IMPORTANTE à prendre en compte pour ne pas responsabiliser une machine plus que l’autre en mode ACTIF/ACTIF sur le cluster.
Cas d'étude
Voici le schéma des machines à mettre en place
Plan d'addressage des serveurs
- MASTER : (mgm_ndbd) : 192.168.1.1
- NODE_1 : (MySQLd,NDBd) : 192.168.2.2
- NODE_2 : (MySQLd,NDBd) : 192.168.2.3
Pré-requis
Installation des trois serveurs en FreeBSD 5.X voir 6.X
Mode opératoire
Mise en place des Ports de MySQL sur les serveurs
Sur les trois machines on va choisir la version 4.1X de MySQL qui supporte le clustering NDB :
On installe donc MySQL avec le module cluster NDB:
# portinstall -m '-DWITH_NDB' mysql41-server # portinstall -P mysql-client
Configuration client mysql
- Sur les deux serveurs de données :
Tout d’abord ajoutons le mot de passe par defaut de mysql dans le fichier /etc/mysql/my.cnf
# vi /usr/local/etc/my.cnf -- […] [mysql] Password=<SECRET> […]
Quoiqu’il en soit, sur la machine manager :
# mkdir /var/lib/mysql-cluster # vi config.ini -- [NDBD DEFAULT] NoOfReplicas=2 DataMemory=80M IndexMemory=18M
[TCP DEFAULT] portnumber=2202
[NDB_MGMD] hostname=192.168.1.1 # ou l’ip choisit pour un manager sur une machine tierce datadir=/var/lib/mysql-cluster
[NDBD] hostname=192.168.1.2 datadir=/usr/lib/mysql/
[NDBD] hostname=192.168.1.3 datadir=/usr/lib/mysql/
[MYSQLD] hostname=192.168.1.2
[MYSQLD] hostname=192.168.1.3
Premier démarrage de ndb_mgm
# ndb_mgm
Cette étape peut prendre du temps ( 10 à 20 secondes).
Edition des configurations MySQL pour les nœuds de STORAGE NDBd
On modifie la configuration de MySQL pour gérer le connection au manager et donc au cluster NDB MySQL :
Sur les deux serveurs de données node 1 et 2 :
# vi /usr/local/etc/mysql/my.cnf -- [...] [mysqld] Ndbcluster Ndb-connectstring=192.168.1.1 # ou l’ip du serveur manager [mysql_cluster] Ndb-connectstring=192.168.1.1
Lancement des DataStorage Engine sur les nœuds
On va maintenant initialiser le cluster, sur les deux serveurs noeuds:
# mkdir –p /var/lib/mysql # /usr/local/bin/ndbd –initial # /usr/local/etc/rc.d/mysql start
Tests
Test de fonctionnement du manager NDB CLUSTER MYSQL
On lance le client du manager NDB CLUSTER MySQL :
Sur la machine manager :
# ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> SHOW Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @192.168.1.2 (Version: 4.1.15, Nodegroup: 0, Master) id=3 @192.168.1.3 (Version: 4.1.15, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.1.1 (Version: 4.1.15)
[mysqld(SQL)] 1 node(s) id=4 @192.168.1.2 (Version: 4.1.15) id=5 @192.168.1.3 (Version: 4.1.15)
On doit avoir une sortie du type ci-dessus, si il y a des lignes “Not connected”, revérifié votre configuration et vos PATH.
Tests de lancement du cluster MySQL
Sur le serveur maître, on vérifie l’instance de ndb_mgmd :
# ps aux|grep ndb_mgmd root 5578 0.0 0.3 6220 1964 ? S 03:14 0;00 ndb_mgmd
Sur les deux serveurs on vérifie les instances des ndbd et mysqld
# ps aux |grep ndbd … # ps aux|grep mysqld …
Tests fonctionnels du cluster MySQL
Sur le serveur node 1 :
# mysql test CREATE TABLE ctest (i int) ENGINE=NDBCLUSTER ; INSERT INTO ctest () VALUES (1); SELECT * FROM ctest;
On doit avoir pour réponse évidente 1.
Sur le serveur node 2 :
# mysql test INSERT INTO ctest () values (2) ; SELECT * FROM ctest ;
On doit avoir comme réponse les deux lignes 1 ET 2
Sur le serveur node 1 :
# mysql test SELECT * FROM ctest ;
On doit avoir la même réponse que sur le serveur node 2.
Finissons notre test en stoppant les mysqld et les ndbd :
# /usr/local/etc/init.d/mysql-server.sh stop # killall ndbd

