Projet

Général

Profil

Mise en place d'une architecture de type cluster MySQL

Sommaire

Solution

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

{{graph(
digraph G {
subgraph cnode_1 {
NDBd1 -> MySQLD1;
}
subgraph cnode_2 {
NDBd2 -> MySQLD2;
}
subgraph cmaster {
MGM_NDBd;
}
MGM_NDBd -> NDBd1
MGM_NDBd -> NDBd2
}
)}}

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 :<br/>

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 :<br/>
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 :<br/>
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

Mise en place des scripts RC pour ndbd et ndb_mgmd

Mis à jour par Romain GEORGES il y a environ 5 ans · 10 révisions