MySQl-Cluster : Différence entre versions
(Page créée avec « {{ Introduction | Cette page explique comment installer, configurer et utiliser une infrastructure Mysql Cluster }} == Noeud SQL/Data == === Création de l'utilisateur/gr... ») |
|||
| Ligne 310 : | Ligne 310 : | ||
</pre> | </pre> | ||
| + | == Liens externes == | ||
| + | http://www.neoflow.fr/tutoriels.item.438/replication-master-slave-mysql.html | ||
<br> | <br> | ||
| − | [[Catégorie: | + | [[Catégorie:Database]] |
<br> | <br> | ||
Version du 20 avril 2013 à 19:17
Sommaire
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
Téléchargement de mysql cluster
On se rend dans le dossier /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
On crée un lien symbolique
On rajoute au fichier /nomUser/.bashrc le chemin
export PATH=$PATH:/usr/local/mysql/bin
On recharge le profile
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
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
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.
[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
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
[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
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.
[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
Procédures
Demarrage de l'infrastructure MySQL Cluster
Il est d'abord nécessaire de démarrer le noeud de management.
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 :
Sur chaque noeud SQL/Data, on lance la commande pour démarrer ndb et mysql (lors du premier démarrage)
[root@ordi ~]# scripts/mysql_install_db --user=mysql
[root@ordi ~]# /etc/init.d/mysql start
[root@ordi ~]# /bin/mysqladmin -u root password rootmulti2004
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
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
Pour les noeuds SQL, on exécute la commande suivante afin d'arre^ter le processus ndbd:
Pour le/les noeud(s) Management, on éxécute la commande suivante :
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.
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 :
Configuration
On va d'abord créer le dossier qui va contenir le fichier de configuration
On crée le fichier de configuration
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.
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
Si mysql-proxy refuse de se lancer, c'est parcequ'il est pointilleux sur les permissions du fichier /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
