MySQl-Cluster : Différence entre versions

De DiouxX's Wiki
Aller à : navigation, rechercher
 
Ligne 137 : Ligne 137 :
 
Sur chaque noeud SQL/Data, on lance la commande pour démarrer ndb et mysql (lors du premier démarrage)
 
Sur chaque noeud SQL/Data, on lance la commande pour démarrer ndb et mysql (lors du premier démarrage)
 
<br>
 
<br>
{{ Console root | 1=/usr/local/mysql/bin/ndbd && cd /usr/local/mysql/<br>[root@ordi ~]# scripts/mysql_install_db --user=mysql<br>[root@ordi ~]# /etc/init.d/mysql start <br>[root@ordi ~]# /bin/mysqladmin -u root password rootmulti2004 }}
+
{{ Console root | 1=/usr/local/mysql/bin/ndbd && cd /usr/local/mysql/<br>[root@ordi ~]# scripts/mysql_install_db --user=mysql<br>[root@ordi ~]# /etc/init.d/mysql start <br>[root@ordi ~]# /bin/mysqladmin -u root password password }}
 
<br>
 
<br>
 
<br>
 
<br>
Ligne 173 : Ligne 173 :
 
{{ Console root | /etc/init/d/mysql stop }}
 
{{ Console root | /etc/init/d/mysql stop }}
 
<br>
 
<br>
Pour les '''noeuds SQL''', on exécute la commande suivante afin d'arre^ter le processus ndbd:
+
Pour les '''noeuds SQL''', on exécute la commande suivante afin d'arrêter le processus ndbd:
 
<br>
 
<br>
 
{{ Console root | killall ndbd }}
 
{{ Console root | killall ndbd }}

Version actuelle datée du 14 novembre 2013 à 20:35

Cette page explique comment installer, configurer et utiliser une infrastructure Mysql Cluster

Noeud SQL/Data

Création de l'utilisateur/groupe mysql

On va créer sur chaque noeud SQL/Data le groupe et l'utilisateur mysql qui seront propriétaire du processus mysql

Konsole.png
[root@ordi ~]# groupadd mysql
[root@ordi ~]# useradd -g mysql mysql


Téléchargement de mysql cluster

On se rend dans le dossier /var/tmp

Konsole.png
[user@ordi ~]$ cd /var/tmp


On télécharge la version souhaitée sur le site de mysql : http://dev.mysql.com/downloads/cluster/#downloads

On décompresse l'archive dans le dossier /usr/local

Konsole.png
[user@ordi ~]$ tar -C /usr/local mysql-cluster-gpl-*.*.*-linux-x86_64-glibc23.tar.gz


On crée un lien symbolique

Konsole.png
[root@ordi ~]# ln -s /usr/local/mysql-cluster-gpl-*.*.*-linux-x86_64-glibc23 /usr/local/mysql


On rajoute au fichier /nomUser/.bashrc le chemin

export PATH=$PATH:/usr/local/mysql/bin

On recharge le profile

Konsole.png
[user@ordi ~]$ source /nomUser/.bashrc


Installation et configuration

On change de location pour le répertoire mysql et on exécute le script pour la création du système de database

Konsole.png
[root@ordi ~]# cd /usr/local/mysql
[root@ordi ~]# ./scripts/mysql_install_db --user=mysql



BlocNotes.png
À noter !
Si le message d'erreur suivant apparait
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
Il est nécessaire d'installer libaio1
apt-get install libaio1


On change les permissions pour le serveur MySQL et le répertoire de données

Konsole.png
[root@ordi ~]# chown -R root .
[root@ordi ~]# chown -R mysql data
[root@ordi ~]# chgrp -R mysql .


On copie le script de démarrage dans le dossier approprié, on le rend exécutable et on le charge au démarrage du système.

Konsole.png
[root@ordi ~]# cp support-files/mysql.server /etc/init.d/mysql
[root@ordi ~]# chmod +x /etc/init.d/mysql
[root@ordi ~]# update-rc.d mysql defaults


On crée le fichier de configuration /etc/my.cnf

[mysqld]
ndbcluster 
ndb-connectstring=192.168.100.10

[mysql_cluster]

ndb-connectstring=192.168.100.10


BlocNotes.png
À noter !
les adresses IP sont bien évidemment à adapter


Noeud Management

Installation

L'installation du noeud management ne nécessite pas les binaires mysql. Seulement le serveur MySQL Cluster management (ndb_mgmd) est requis. On suppose que l'on à placer les sources mysql-cluster dans /var/tmp comme pour les noeuds MySQL/Data.

On change de location pour /var/tmp , et on extrait ndb_mgm et ndb_mgmd de l'archive vers le dossier /usr/local/bin

Konsole.png
[root@ordi ~]# cd /var/tmp
[root@ordi ~]# tar -zxvf mysql-cluster-gpl-*.*.*-linux-i686-glibc23.tar.gz
[root@ordi ~]# cd /usr/local/mysql-cluster-gpl-*.*.*-linux-i686-glibc23
[root@ordi ~]# cp bin/ndb_mgm* /usr/local/bin


On change de location pour /usr/local/bin et on rend exécutable les fichiers que l'on viens de copier

Konsole.png
[root@ordi ~]# cd /usr/local/bin
[root@ordi ~]# chmod +x ndb_mgm*


Configuration

La première étape de la configuration du noeud de management est de créer le dossier dans lequel le fichier de configuration va se trouver et créer le fichier de configutation.

Konsole.png
[root@ordi ~]# mkdir /var/lib/mysql-cluster
[root@ordi ~]# cd /var/lib/mysql-cluster
[root@ordi ~]# nano config.ini



[ndb_mgmd default]
DataDir=/var/lib/mysql-cluster
 
[ndb_mgmd]
HostName=192.168.100.10
 
[ndbd default]
NoOfReplicas=2
DataMemory=256M
IndexMemory=128M
DataDir=/var/lib/mysql-cluster
 
[ndbd]
HostName=192.168.100.11
 
[ndbd]
HostName=192.168.100.12
 
[mysqld]
HostName=192.168.100.11
 
[mysqld]
HostName=192.168.100.12


BlocNotes.png
À noter !
les adresses IP sont bien évidemment à adapter


Procédures

Demarrage de l'infrastructure MySQL Cluster

Il est d'abord nécessaire de démarrer le noeud de management.

Konsole.png
[root@ordi ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini –configdir=/var/lib/mysql-clusetr


Si l'erreur suivante est afiiché :

MySQL Cluster Management Server mysql-5.5.29 ndb-7.2.10
2013-02-28 09:08:53 [MgmtSrvr] INFO     -- The default config directory '/usr/local/mysql/mysql-cluster' does not exist. Trying to create it...
Failed to create directory '/usr/local/mysql/mysql-cluster', error: 2
2013-02-28 09:08:53 [MgmtSrvr] ERROR    -- Could not create directory '/usr/local/mysql/mysql-cluster'. Either create it manually or specify a different directory with --configdir=<path>

Il suffit de créer le dossier /usr/local/mysql/mysql-cluster  :

Konsole.png
[root@ordi ~]# mkdir -p /usr/local/mysql/mysql-cluster


Sur chaque noeud SQL/Data, on lance la commande pour démarrer ndb et mysql (lors du premier démarrage)

Konsole.png
[root@ordi ~]# /usr/local/mysql/bin/ndbd && cd /usr/local/mysql/
[root@ordi ~]# scripts/mysql_install_db --user=mysql
[root@ordi ~]# /etc/init.d/mysql start
[root@ordi ~]# /bin/mysqladmin -u root password password



BlocNotes.png
À noter !
Si le message d'erreur suivant est affiché
[ndbd] WARNING -- Cannot change directory to '/var/lib/mysql-cluster', error: 2
Il faut créer le dossier /var/lib/mysql-cluster


Sur le noeud de management, on vérifie l'état des connections pour les neouds SQL et Data

Konsole.png
[user@ordi ~]$ ndb_mgm -e show


Cela devrait afficher ceci où on vous les différents noeuds ainsi que leurs états

Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2	@192.168.100.11  (mysql-5.5.25 ndb-7.3.0, Nodegroup: 0, Master)
id=3	@192.168.100.12  (mysql-5.5.25 ndb-7.3.0, Nodegroup: 0)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@192.168.100.10  (mysql-5.5.25 ndb-7.3.0)

[mysqld(API)]	2 node(s)
id=4	@192.168.100.11  (mysql-5.5.25 ndb-7.3.0)
id=5	@192.168.100.12  (mysql-5.5.25 ndb-7.3.0)

Arret de l'infrastructure MySQL Cluster

On arrête les différents noeuds du cluster dans l'ordre suivant

Data Node > SQL Node > Management Node


Pour les noeuds Data, on arrête le serveur mysql

Konsole.png
[root@ordi ~]# /etc/init/d/mysql stop


Pour les noeuds SQL, on exécute la commande suivante afin d'arrêter le processus ndbd:

Konsole.png
[root@ordi ~]# killall ndbd


Pour le/les noeud(s) Management, on éxécute la commande suivante :

Konsole.png
[root@ordi ~]# ndb_mgm -e shutdown


Tester le cluster

Sur le premier noeud mysql/Data, on va créer une table et entre une données

mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
CREATE TABLE testtable (I INT) ENGINE=NDBCLUSTER;
INSERT INTO testtable () VALUES (1);
SELECT * FROM testtable;


Sur le deuxième noeud, on vérifie que les données et la table, on bien été dupliquée

mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
CREATE TABLE testtable (I INT) ENGINE=NDBCLUSTER;
INSERT INTO testtable () VALUES (1);
SELECT * FROM testtable;


Sur le deuxième noeud, on entre une donnée :

mysql -u root -p
USE mysqlclustertest;
INSERT INTO testtable () VALUES (2);
SELECT * FROM testtable;


On vérifie sur le noeud 1 si les valeurs on bien été répliquées

mysql -u root -p
USE mysqlclustertest;
SELECT * FROM testtable;

Mysql Proxy

Mysql-proxy est une couche se mettant entre le client ou l'application et le/les serveur(s) mysql. Il permet de réaliser du load-balancing, analyser et transformer les requêtes :

  • Il peut gérér le fail-over des serveurs mysql
  • Diriger les requêtes d'écriture vers un serveur et les requêtes en lecture vers un autre
  • Il permet de modifier des requêtes (en corrigant la syntaxe par exemple) ;
  • Intercepter le resultset afin d'y supprimer, modifier ou ajouter des enregistrements ;
  • Interdire le retour de certains résultats vers le client.

Nous allons juste l'utiliser afin de réaliser du load-balancing avec un egestion de fail-over.

BlocNotes.png
À noter !
Mysql-proxy peux être insatller sur n'importe qu'elle machine. Le noeud de management, un des noeuds SQL/Data ou une autre machine indépendante.
Dans notre cas, on va l'installer sur le neoud de management. C'est une question de choix


Comportement

Pour la gestion du fail-over, mysq-proxy va tenter de réaliser la requête sur le premier serveur mysql qui lui est renseigné dans son fivhier de configuration. Si le premier serveur est tombé, il va réaliser les requêtes sur le deuxième et ainsi de suite. Lorsque le premie serveur redeviens disponible, les données sont immédiatement répliqués ( via muysql-cluster ).

Installation

On peux installer la version packager pour debian/ubuntu :

Konsole.png
[root@ordi ~]# apt-get install mysql-proxy


Configuration

On va d'abord créer le dossier qui va contenir le fichier de configuration

Konsole.png
[root@ordi ~]# mkdir /etc/mysql-proxy


On crée le fichier de configuration

Konsole.png
[root@ordi ~]# nano /etc/mysql-proxy/mysql-proxy.conf


On y insère le contenu suivant :

[mysql-proxy]
daemon=true
plugins=proxy
proxy-address=0.0.0.0:3306
proxy-backend-addresses=192.168.100.11:3306,192.168.100.12:3306
log-file=/var/log/mysql-proxy.log
log-level=debug
pid-file=/var/log/mysql-proxy.pid
  • deamon : Si on désire faire tourner mysql-proxy en tant que deamon
  • plugins : Le/Les plugin(s) que l'ont charge au demmarage de mysql-proxy; Pour notre part, le plugin proxy est suffisant.
  • proxy-address : L'adresse IP du proxy et le port. Dans ce cas-ci, l'ip sera celle de la machine faiant tourner mysql-proxy.


Warning.png
Attention !
Modifier le numero de port si celui-ci est déja occupé par un serveur mysql tournant ou une autre application


  • proxy-backend-addresses : La liste des serveurs mysql derrière le proxy
  • log-file : L'emplacement du fichier de log
  • log-level : Niveau de log
  • pid-file : L'emplacement du fichier piud

Une fois le fichier de configuration réalisé, il faut modifier le fichier /etc/default/mysql-proxy afin qu'il prenne en compte le fichier que l'on viens de créer lorsqu'on utilise le script init.d

ENABLED="true"
OPTIONS="--defaults-file=/etc/mysql-proxy/mysql-proxy.conf"

Maintenant, on peux lancer mysql-proxy

Konsole.png
[root@ordi ~]# /etc/init/d/mysql-proxy start


Si mysql-proxy refuse de se lancer, c'est parcequ'il est pointilleux sur les permissions du fichier /etc/mysql-proxy/mysql-proxy.conf  :

Konsole.png
[root@ordi ~]# chmod 660 /etc/mysql-proxy/mysql-proxy.conf


Troubleshooting

Acces a distance

Pour donner un acces distant à l abase de donnée pour un utilisateur spécifique, il faut se connecter à la databse et exécuter la requête suivante

mysql -u root -p
Enter password:
mysql> grant all privileges on *.* to root@192.168.1.245 identified by "multi2004";
  • root@192.168.1.245 : utilisateur@adresseIP
  • "multi2004" : mot de passe

ERROR 1130 (HY000): Host '192.168.168.13' is not allowed to connect to this MySQL server

Si une erreur semblable s'affiche lorsqu'on essaye de se connecter via mysql-proxy, c'est qu'il est nécessaire de créere sur les neouds SQL qui se trouvent derrière le proxy, le couple utilisateur et adresse IP.

Par exemple, si on se connecte a mysql-proxy avec l'utilisateur root alors, il faut créer le couple utilisateur/IP suivant :

grant all privileges on *.* to root@192.168.168.13 identified by "motdepasse";

Liens externes

http://www.neoflow.fr/tutoriels.item.438/replication-master-slave-mysql.html