Cluster MySQL
Un article de Diablotins.org.
|
Sommaire |
Mise en place dâun architecture de type cluster MySQL
Description
Cette doc 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.
Pour plus dâinformations sur le sujet, voir la doc officielle :
http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-basics.html
Le module NDB est déjà présent dans la version de Mysql disponible sur FreeBSD 5.X.
Les versions Ă utiliser dans les ports sont mysql41-server ou mysql5x-server.
Le principe de NDB est de fournir un service de synchronisation Ă MySQL part la mise en place de dĂ©mon de rĂ©plication temps rĂ©el et dâun ordonnanceur.
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
