Différences entre les versions de « Mysql cluster »

De BlaxWiki
Aller à la navigationAller à la recherche
(Page créée avec « Cette page à pour but de décrire la l'installation et la configuration de MySQL Cluster. Une aide plus approfondie peut être trouvée [http://dev.mysql.com/doc/index-cl... »)
 
m (a déplacé Mysql Cluster vers Mysql cluster)
 
(5 versions intermédiaires par un autre utilisateur non affichées)
Ligne 1 : Ligne 1 :
Cette page à pour but de décrire la l'installation et la configuration de MySQL Cluster. Une aide plus approfondie peut être trouvée [http://dev.mysql.com/doc/index-cluster.html sur  
Cette page à pour but de décrire la l'installation et la configuration de MySQL Cluster. Une aide plus approfondie peut être trouvée [http://dev.mysql.com/doc/index-cluster.html sur  
le site de MySQL].
le site de MySQL]


= Introduction =
= Introduction =
== Description (rapide) de MySQL Cluster ==
== Description (rapide) de MySQL Cluster ==
<pre>
<pre>
MySQL Cluster permet d'utiliser les techniques de grappes pour un service MySQL. MySQL Cluster est conçu afin d'éviter les points de ruptures unique, chaque composant de la grappe pouvant se trouver sur des machines différentes.
MySQL Cluster permet d'utiliser les techniques de grappes pour un service MySQL. MySQL Cluster est conçu afin d'éviter les points de ruptures unique, chaque composant de la grappe  
pouvant se trouver sur des machines différentes.


Une grappe MySQL Cluster est composé de trois processus :
Une grappe MySQL Cluster est composé de trois processus :
Ligne 71 : Ligne 72 :


== Nœuds MySQL ou de stockage ==
== Nœuds MySQL ou de stockage ==
Créer le fichier {{{DataDir}}} renseigné dans la section {{{[ndbd default]}}} de la configuration du nœud de gestion.
Créer le fichier DataDirrenseigné dans la section [ndbd default] de la configuration du nœud de gestion.


Créer un fichier {{{/etc/my.cnf}}} avec le contenu suivant :
Créer un fichier etc/my.cnfavec le contenu suivant :
<pre>
<pre>
[mysqld]
[mysqld]
Ligne 84 : Ligne 85 :


== Nœuds de gestion ==
== Nœuds de gestion ==
Créer un fichier {{{/var/lib/mysql-cluster/config.ini}}} avec le contenu suivant :
Créer un fichier /var/lib/mysql-cluster/config.ini avec le contenu suivant :
<pre>
<pre>
# Fichier "config.ini" pour deux noeuds de stockage et un serveur MySQL
# Fichier "config.ini" pour deux noeuds de stockage et un serveur MySQL
Ligne 134 : Ligne 135 :
= Démarrage =
= Démarrage =
== Nœuds de gestion ==
== Nœuds de gestion ==
Les nœuds de gestion n'ayant pas de scripts de démarrage, il est nécessaire de les démarrer via la commande :
Les nœuds de gestion n'ayant pas de scripts de démarrage, il est nécessaire de les démarrer via la commande : ndb_mgmd -f /var/lib/mysql-cluster/config.ini
<pre>
# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
</pre>


== Nœuds de stockage ==
== Nœuds de stockage ==
Ligne 147 : Ligne 145 :
= Vérifications =
= Vérifications =
== Nœuds MySQL ==
== Nœuds MySQL ==
Vérifiez que le moteur de stockage NDBCLUSTER est géré via la commande MySQL {{{SHOW ENGINES\G}}}
Vérifiez que le moteur de stockage NDBCLUSTER est géré via la commande MySQL SHOW ENGINES\G
<pre>
<pre>
mysql> SHOW ENGINES\G
mysql> SHOW ENGINES\G
Ligne 162 : Ligne 160 :
= Commandes utiles =
= Commandes utiles =
== Nœuds de gestion ==
== Nœuds de gestion ==
La commande {{{ndb_mgm}}} propose plusieurs sous-commandes utiles
La commande ndb_mgm propose plusieurs sous-commandes utiles
<pre>
<pre>
  * {{{SHOW}}} : Avoir un état du Cluster.
  * SHOW : Avoir un état du Cluster.
   {{{
    
ndb_mgm> SHOW
ndb_mgm> SHOW
Cluster Configuration
Cluster Configuration
Ligne 181 : Ligne 179 :
</pre>
</pre>


  * {{{<node_id> START}}} et {{{<node_ID> STOP}}} : Démarrer ou stopper un nœud, l'ID est celle indiqué dans la commande {{{SHOW}}}, par exemple, ici, le nœud 1 est celui de gestion, les 2 et 3 ceux de stockage et le 5 le nœud MySQL. L'ID peut être remplacé par {{{ALL}}} pour affecter tout les nœuds.
<pre>
  * {{{<node_id> RESTART}}} : Stop, puis redémarre le nœud identifié par l'ID {{{<node_id>}}}.
  * <node_id> START et <node_ID> STOP : Démarrer ou stopper un nœud, l'ID est celle indiqué dans la commande SHOW, par exemple, ici, le nœud 1 est celui de gestion, les 2 et 3 ceux de  
  * {{{<node_id> STATUS}}} : Affiche l'état du nœud choisi.
stockage et le 5 le nœud MySQL. L'ID peut être remplacé par ALL pour affecter tout les nœuds.
   {{{
  * <node_id> RESTART : Stop, puis redémarre le nœud identifié par l'ID <node_id>.
  * <node_id> STATUS : Affiche l'état du nœud choisi.
    
ndb_mgm> 1 STATUS
ndb_mgm> 1 STATUS
Node 1: connected (Version 7.1.18)
Node 1: connected (Version 7.1.18)
}}}
 
  * {{{<node_id> REPORT <type>}}} : Il est possible d'obtenir un rapport sur l'utilisation mémoire et sur l'état des sauvegarde d'un nœud de stockage via cette commande, en remplaçant {{{<type>}}} repectivement par {{{MemoryUsage}}} et {{{BackupStatus}}}
  * <node_id> REPORT <type> : Il est possible d'obtenir un rapport sur l'utilisation mémoire et sur l'état des sauvegarde d'un nœud de stockage via cette commande, en remplaçant  
   {{{
<type> repectivement par MemoryUsage et BackupStatus
    
ndb_mgm> 2 REPORT BackupStatus
ndb_mgm> 2 REPORT BackupStatus
Node 2: Backup not started
Node 2: Backup not started
Ligne 196 : Ligne 197 :
Node 2: Data usage is 0%(22 32K pages of total 2560)
Node 2: Data usage is 0%(22 32K pages of total 2560)
Node 2: Index usage is 0%(16 8K pages of total 2336)
Node 2: Index usage is 0%(16 8K pages of total 2336)
}}}
 
  * {{{ENTER SINGLE USER MODE <node_id>}}} et {{{EXIT SINGLE USER MODE <node_id>}}} : Font respectivement entrer et sortir un nœud MySQL en mode « Single user » pour que seul lui puisse accéder aux bases, un nœud de donné ne peut joindre un cluster si un serveur MySQL fonctionne en mode « Single user ».
  * ENTER SINGLE USER MODE <node_id> et EXIT SINGLE USER MODE <node_id> : Font respectivement entrer et sortir un nœud MySQL en mode « Single user » pour que seul lui puisse accéder  
  * {{{CREATE NODEGROUP <nodeid>[, <nodeid>, …]}}} : Créer un groupe de nœuds composé par les nœuds de stockage désignés. Cette commande est utilisé après l'ajout de nœuds de donnée à un cluster déjà existant. les différent groupes de nœuds doivent avoir le même nombre de nœuds.
aux bases, un nœud de donné ne peut joindre un cluster si un serveur MySQL fonctionne en mode « Single user ».
  * {{{DROP NODEGROUP <nodegroup_id>}}} : Supprime le groupe de nœuds désigné par {{{<nodegroup_id>}}} et en fait sortir les nœuds le composant.
  * CREATE NODEGROUP <nodeid>[, <nodeid>, …] : Créer un groupe de nœuds composé par les nœuds de stockage désignés. Cette commande est utilisé après l'ajout de nœuds de donnée à un  
cluster déjà existant. les différent groupes de nœuds doivent avoir le même nombre de nœuds.
  * DROP NODEGROUP <nodegroup_id> : Supprime le groupe de nœuds désigné par <nodegroup_id> et en fait sortir les nœuds le composant.
</pre>
 
= Sauvegardes à chaud MySQL Cluster =
= Sauvegardes à chaud MySQL Cluster =
Il semble toujours possible d'utiliser {{{mysqldump}}} depuis le nœud MySQL.
Il semble toujours possible d'utiliser mysqldump depuis le nœud MySQL.
== Introduction ==
== Introduction ==
Les sauvegardes à chauds se présentent sous la forme d'instantanées (snapshot), ceux-ci sont partagés en trois parties :
Les sauvegardes à chauds se présentent sous la forme d'instantanées (snapshot), ceux-ci sont partagés en trois parties :
  * Metadata : Nom et définition des tables des bases de données. Fichier {{{BACKUP-<backupid>.<nodeid>.ctl}}}.
<pre>
  * Table records : Données des tables des bases de données à l'instant de prise de l'instantané. Fichier {{{BACKUP-<backupid>-0.<nodeid>.data}}}.
  * Metadata : Nom et définition des tables des bases de données. Fichier BACKUP-<backupid>.<nodeid>.ctl.
  * Transaction log : Enregistrement séquentiel indiquant comment et quand les données on été stocké dans les bases de données. Fichier {{{BACKUP-<backupid>.<nodeid>.log}}}.
  * Table records : Données des tables des bases de données à l'instant de prise de l'instantané. Fichier BACKUP-<backupid>-0.<nodeid>.data.
Avec {{{<nodeid>}}} l'identifiant du nœud et {{{<backupid>}}} l'identifiant de l'instantané.
  * Transaction log : Enregistrement séquentiel indiquant comment et quand les données on été stocké dans les bases de données. Fichier BACKUP-<backupid>.<nodeid>.log.
Avec <nodeid> l'identifiant du nœud et <backupid> l'identifiant de l'instantané.
Le <backupid> est un nombre entier codé sur 32 bits identifiant l'instantané, si celui-ci n'est pas précisé lors de la création de l'instantané, le premier chiffre consécutif libre
sera utilisé.
</pre>


Le {{{<backupid>}}} est un nombre entier codé sur 32 bits identifiant l'instantané, si celui-ci n'est pas précisé lors de la création de l'instantané, le premier chiffre consécutif libre sera utilisé.
== Gestion des sauvegardes ==
== Gestion des sauvegardes ==
La commande de sauvegarde est {{{START BACKUP <backupid>}}}, celle-ci s'utilise depuis le nœud de gestion, l'identifiant de sauvegarde {{{<backupid>}}} est facultatif.
<pre>
  * {{{START BACKUP NOWAIT}}} : Démarrer la sauvegarde et rendre la main immédiatement.
La commande de sauvegarde est START BACKUP <backupid>, celle-ci s'utilise depuis le nœud de gestion, l'identifiant de sauvegarde <backupid> est facultatif.
  * {{{START BACKUP WAIT STARTED}}} : Démarrer la sauvegarde et rendre la main une fois la sauvegarde démarré.
  * START BACKUP NOWAIT : Démarrer la sauvegarde et rendre la main immédiatement.
  * {{{START BACKUP COMPLETED}}} : Démarrer la sauvegarde et rendre la main à la fin de la sauvegarde, choix par défaut.
  * START BACKUP WAIT STARTED : Démarrer la sauvegarde et rendre la main une fois la sauvegarde démarré.
  * START BACKUP COMPLETED : Démarrer la sauvegarde et rendre la main à la fin de la sauvegarde, choix par défaut.


Il est possible d'utiliser les options {{{SNAPSHOTSTART}}} et {{{SNAPSHOTEND}}} pour sauvegarder l'état du cluster en début ou en fin d'instantané, {{{SNAPSHOTEND}}} est le choix par défaut.
Il est possible d'utiliser les options SNAPSHOTSTART et SNAPSHOTEND pour sauvegarder l'état du cluster en début ou en fin d'instantané, SNAPSHOTEND est le choix par défaut.
Un instantané peut être annulé avec la commande ABORT BACKUP <backupid>.
</pre>


Un instantané peut être annulé avec la commande {{{ABORT BACKUP <backupid>}}}.
== Options de sauvegarde ==
== Options de sauvegarde ==
Ces options peuvent être ajouté dans le fichier {{{/var/lib/mysql-cluster/config.ini}}} du nœud de gestion.
<pre>
Ces options peuvent être ajouté dans le fichier /var/lib/mysql-cluster/config.ini du nœud de gestion.
  * !BackupDataBufferSize : Taille du cache de sauvegarde de données en RAM à utiliser avant écriture sur disque.
  * !BackupDataBufferSize : Taille du cache de sauvegarde de données en RAM à utiliser avant écriture sur disque.
  * !BackupLogBufferSize : Taille du cache de sauvegarde de journaux en RAM à utiliser avant écriture sur disque.
  * !BackupLogBufferSize : Taille du cache de sauvegarde de journaux en RAM à utiliser avant écriture sur disque.
Ligne 226 : Ligne 237 :
  * !BackupWriteSize : Taille par défaut des blocs sur disque, cela concerne les sauvegarde de données ou de journaux.
  * !BackupWriteSize : Taille par défaut des blocs sur disque, cela concerne les sauvegarde de données ou de journaux.
  * !BackupMaxWriteSize : Taille maximum des blocs sur disque, cela concerne les sauvegarde de données ou de journaux.
  * !BackupMaxWriteSize : Taille maximum des blocs sur disque, cela concerne les sauvegarde de données ou de journaux.
</pre>
= Démarrage et arrêt d'un cluster MySQL =
= Démarrage et arrêt d'un cluster MySQL =
== Redémarrage intégral du cluster ==
== Redémarrage intégral du cluster ==
<pre>
Il est possible de stopper ou de redémarrer totalement un cluster MySQL via les commandes suivantes.
Il est possible de stopper ou de redémarrer totalement un cluster MySQL via les commandes suivantes.
  * Commencez par donner l'ordre d'arrêt au cluster depuis le nœud de gestion, ceci terminera les processus {{{ndbd}}} et {{{ndb_mgmd}}} des nœuds de données et de gestion :
  * Commencez par donner l'ordre d'arrêt au cluster depuis le nœud de gestion, ceci terminera les processus ndbd et ndb_mgmd des nœuds de données et de gestion :
   {{{# ndb_mgm -e shutdown}}}
   # ndb_mgm -e shutdown
  * Ensuite, arrêtez les nœuds MySQL avec :
  * Ensuite, arrêtez les nœuds MySQL avec :
   {{{# mysqladmin shutdown}}}
   # mysqladmin shutdown
  * Pour redémarrer, commencez par les nœuds de gestion :
  * Pour redémarrer, commencez par les nœuds de gestion :
   {{{# ndb_mgmd -f /var/lib/mysql-cluster/config.ini}}}
   # ndb_mgmd -f /var/lib/mysql-cluster/config.ini
  * Puis les nœuds de données
  * Puis les nœuds de données
   {{{# ndbd}}}
   # ndbd
  * Enfin, les nœuds MySQL
  * Enfin, les nœuds MySQL
   {{{# mysqld_safe &}}}
   # mysqld_safe &
</pre>
 
== Redémarrage d'un nœud individuel ==
== Redémarrage d'un nœud individuel ==
Le redémarrage individuel, aussi nommée « Rolling Restart » est utilisé quand il s'avère nécessaire de d'intervenir sur un nœud du cluster, il permet de couper temporairement ledit nœud du cluster le temps de l'intervention, sans pour autant totalement couper le cluster.
Le redémarrage individuel, aussi nommée « Rolling Restart » est utilisé quand il s'avère nécessaire de d'intervenir sur un nœud du cluster, il permet de couper temporairement ledit  
nœud du cluster le temps de l'intervention, sans pour autant totalement couper le cluster.
 
=== Réinitialisation ===
=== Réinitialisation ===
<pre>
Si il est nécessaire de réinitialiser un cluster, il est souvant préférable de recharger les données et métadonnées, cela peut être fait de trois façon différentes :
Si il est nécessaire de réinitialiser un cluster, il est souvant préférable de recharger les données et métadonnées, cela peut être fait de trois façon différentes :
  * Redémarrez chaque nœud de données (processus {{{ndbd}}}) avec l'option {{{--initial}}} pour forcer le nœud de données à nettoyer son système de fichier et à recharger les données et métadonnées depuis les autres nœuds de données.
  * Redémarrez chaque nœud de données (processus ndbd) avec l'option --initial pour forcer le nœud de données à nettoyer son système de fichier et à recharger les données et  
  * Utilisez la commande {{{ndbd}}} pour créer un snapshot avant de redémarrer le nœud. Ensuite, restaurez les données avec {{{ndb_restore}}}.
métadonnées depuis les autres nœuds de données.
  * Utilisez {{{mysqldump}}} pour créer une sauvegarde avant redémarrage, une fois fait, restaurez-le avec la commande {{{LOAD DATA INFILE}}}.
  * Utilisez la commande ndbd pour créer un snapshot avant de redémarrer le nœud. Ensuite, restaurez les données avec ndb_restore.
  * Utilisez mysqldump pour créer une sauvegarde avant redémarrage, une fois fait, restaurez-le avec la commande LOAD DATA INFILE.
=== Récupération de ressources ou mise à jour ===
=== Récupération de ressources ou mise à jour ===
  * Stoppez les nœuds de gestion (processus {{{ndb_mgmd}}}), reconfigurez-les au besoin et redémarrez-les.
  * Stoppez les nœuds de gestion (processus ndb_mgmd), reconfigurez-les au besoin et redémarrez-les.
  * Puis, stoppez, reconfigurez et redémarrez les nœuds de données.
  * Puis, stoppez, reconfigurez et redémarrez les nœuds de données.
  * Enfin, stoppez, reconfigurez et redémarrez les nœuds MySQL.
  * Enfin, stoppez, reconfigurez et redémarrez les nœuds MySQL.
=== Redémarrage avec plusieurs serveurs de gestion ===
=== Redémarrage avec plusieurs serveurs de gestion ===
  * Stoppez tout les processus {{{ndb_mgmd}}}.
  * Stoppez tout les processus ndb_mgmd.
  * Mettez à jour les fichiers {{{config.ini}}}.
  * Mettez à jour les fichiers config.ini.
  * Démarrez un premier processus {{{ndb_mgmd}}} avec les options {{{--reload}}} ou {{{--initial}}} (ou les deux si désiré).
  * Démarrez un premier processus ndb_mgmd avec les options --reload ou --initial (ou les deux si désiré).
  * Démarrez les autre processus {{{ndb_mgmd}}} sans les options {{{--reload}}} et {{{--initial}}}.
  * Démarrez les autre processus ndb_mgmd sans les options --reload et --initial.
  * Complétez le redémarrage des nœuds de données et MySQL comme à l'accoutumé.
  * Complétez le redémarrage des nœuds de données et MySQL comme à l'accoutumé.
</pre>


[[Catégorie:Software]]
[[Catégorie:Software]]

Version actuelle datée du 30 janvier 2013 à 11:49

Cette page à pour but de décrire la l'installation et la configuration de MySQL Cluster. Une aide plus approfondie peut être trouvée [http://dev.mysql.com/doc/index-cluster.html sur le site de MySQL]

Introduction[modifier]

Description (rapide) de MySQL Cluster[modifier]

MySQL Cluster permet d'utiliser les techniques de grappes pour un service MySQL. MySQL Cluster est conçu afin d'éviter les points de ruptures unique, chaque composant de la grappe 
pouvant se trouver sur des machines différentes.

Une grappe MySQL Cluster est composé de trois processus :
 * Nœud(s) MySQL (Processus MYSQLD) : Les nœuds MySQL permettent d'accéder aux nœuds de stockage et d'en manipuler les données.
 * Nœud(s) de stockage (Processus NDBD) : Les nœuds de stockages contiennent les données de la base de données.
 * Nœud(s) de gestion (Processus NDBD_MGMD) : Les nœuds de gestion sont utiliser pour gérer les nœuds MySQL et de stockage.

Chaque nœuds peut (ou non) se trouver sur des machines différentes.

Plate-forme de tests[modifier]

Le système a été testé avec trois machines virtuelles :
 * cluster-admsql (10.253.6.23) : Nœud MySQL et nœud de gestion.
 * cluster-ndbA (10.253.6.25) : Premier nœud de stockage.
 * cluster-ndbB (10.253.6.26) : Second nœud de stockage.

Installation[modifier]

Récupérer la version voulu sur le site de MySQL, les versions de MySQL intégrées à MySQL Cluster sont différentes suivant les versions de MySQL Cluster :
 * MySQL Cluster 6.3, 7.0 et 7.1 : MySQL 5.1
 * MySQL Cluster 7.2 : MySQL 5.5

Nœuds MySQL ou de stockage[modifier]

L'installation pour ces types de nœuds est identique et est similaire à l'installation d'un serveur MySQL standard.

# cd /opt/applis
# tar -xzf /root/install/mysql-cluster-gpl-7.1.18-linux-x86_64-glibc23.tar.gz
# ln -s mysql-cluster-gpl-7.1.18-linux-x86_64-glibc23 mysql-cluster
# ln -s /opt/applis/mysql-cluster /usr/local/mysql
# groupadd mysql
# useradd -g mysql mysql
# cd /opt/applis/mysql-cluster
# scripts/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .
# cp support-files/mysql.server /etc/init.d/mysql
# chmod 755 /etc/init.d/mysql
# chkconfig --add mysql
# chkconfig --level 3 mysql on
# echo "/opt/applis/mysql-cluster/lib" > /etc/ld.so.conf.d/MYSQLCLUSER.conf
# echo "PATH=\$PATH:/opt/applis/mysql-cluster" >> /etc/profile

Nœuds de gestion[modifier]

Les nœuds de gestion ne nécessitent pas de services MySQL et seul une parti des exécutables est utilisés, leur installation est donc moins complexe.

# mkdir -p /opt/applis/mysql-cluster-gpl-7.1.18-linux-x86_64-glibc23/bin
# cd /opt/applis
# tar -zxvf /root/install/mysql-cluster-gpl-7.1.18-linux-x86_64-glibc23.tar.gz /opt/applis/mysql-cluster-gpl-7.1.18-linux-x86_64-glibc23/bin '*/bin/ndb_mgm*'
# ln -s mysql-cluster-gpl-7.1.18-linux-x86_64-glibc23 mysql-cluster
# ln -s /opt/applis/mysql-cluster /usr/local/mysql
# cd /opt/applis/mysql-cluster-gpl-7.1.18-linux-x86_64-glibc23/bin
# chmod +x ndb_mgm*
# echo "/opt/applis/mysql-cluster/lib" > /etc/ld.so.conf.d/MYSQLCLUSER.conf
# echo "PATH=\$PATH:/opt/applis/mysql-cluster" >> /etc/profile

Configuration[modifier]

Il est possible de trouver les paramètres de configuration recommandés sur le site de MySQL. De la même manière, une aide plus exhaustive est disponible.

Nœuds MySQL ou de stockage[modifier]

Créer le fichier DataDirrenseigné dans la section [ndbd default] de la configuration du nœud de gestion.

Créer un fichier etc/my.cnfavec le contenu suivant :

[mysqld]
ndbcluster
ndb-connectstring = cluster-admsql # IP/Hostname du noeud de gestion.

[mysql_cluster]
ndb-connectstring = cluster-admsql # IP/Hostname du noeud de gestion.

Nœuds de gestion[modifier]

Créer un fichier /var/lib/mysql-cluster/config.ini avec le contenu suivant :

# Fichier "config.ini" pour deux noeuds de stockage et un serveur MySQL
# Ce fichier est placé dans le répertoire de démarrage du serveur de gestion
# {ndb_mgmd).

[tcp default]   # Paramètres TCP par défaut.
SendBufferMemory        = 2M    # Caches de réception et d'envoi TCP a
ReceiveBufferMemory     = 2M    # augmenter en cas d'E/S disque insuffisante.

[ndbd_mgmd default]     # Paramètres par défaut du serveur de gestion.
DataDir         = /var/lib/mysql-cluster

[ndbd default]  # Paramètres par défaut des noeuds de stockage.
NoOfReplicas            = 2     # Nombre de noeuds de stoackage.
DataDir                 = /var/lib/mysql-cluster
LockPagesInMainMemory   = 1     # Les noeuds de gestion utilisent la RAM
                                # évite une dégradation de performance.
DataMemory              = 256M  # RAM utilisable par les données et index, à
IndexMemory             = 32M   # adapter en fonction de la machine.
ODirect                 = 0     # Demande à NDBCLUSTER d'utiliser des écritures
                                # O_DIRECT pour réduire l'utilisation CPU,
                                # demande MySQL cluster 6.2 et Linux 2.6 min.
NoOfFragmentLogFiles    = 300
DataDir                 = /var/lib/mysql-cluster
RealTimeScheduler       = 0     # Demande a NDBCLUSTER a travailler en mode
                                # temps-réel, demande MySQL cluster 6.3 et
                                # un noyau compatible.
CompressedLCP=1                 # Compression des fichiers de checkpoints locaux.
CompressedBackup=1              # Compression des fichiers de backup.

[ndb_mgmd]      # Section des serveurs de gestion, une par serveur
Hostname        = cluster-admsql        # IP/Hostname du serveur de gestion.

[ndbd]          # Section des noeuds de stockage, une par noeud.
HostName                = cluster-ndbA  # Premier noeud de stockage.
LockExecuteThreadToCPU  = 0             # ID du CPU des threads d'éxécutions et
LockMaintThreadsToCPU   = 0             # principaux sur les systèmes SMP.

[ndbd]
HostName                = cluster-ndbB  # Second noeud de stockage.
LockExecuteThreadToCPU  = 0             # ID du CPU des threads d'éxécutions et
LockMaintThreadsToCPU   = 0             # principaux sur les systèmes SMP.

[mysqld]        # Section des serveurs MySQL, une par serveur.
HostName        = cluster-admsql        # IP/Hostname du serveur MySQL.

Démarrage[modifier]

Nœuds de gestion[modifier]

Les nœuds de gestion n'ayant pas de scripts de démarrage, il est nécessaire de les démarrer via la commande : ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Nœuds de stockage[modifier]

Démarrer le processus NDBD avec la commande : ndbd

Nœuds MySQL[modifier]

Démarrez le serveur MySQL avec le script /etc/init.d/mysql start

Vérifications[modifier]

Nœuds MySQL[modifier]

Vérifiez que le moteur de stockage NDBCLUSTER est géré via la commande MySQL SHOW ENGINES\G

mysql> SHOW ENGINES\G
*************************** 1. row ***************************
      Engine: ndbcluster
     Support: YES
     Comment: Clustered, fault-tolerant tables
Transactions: YES
          XA: NO
  Savepoints: NO
[…]

Commandes utiles[modifier]

Nœuds de gestion[modifier]

La commande ndb_mgm propose plusieurs sous-commandes utiles

 * SHOW : Avoir un état du Cluster.
   
ndb_mgm> SHOW
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @10.253.6.25  (mysql-5.1.56 ndb-7.1.18, Nodegroup: 0, Master)
id=3    @10.253.6.26  (mysql-5.1.56 ndb-7.1.18, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.253.6.23  (mysql-5.1.56 ndb-7.1.18)

[mysqld(API)]   2 node(s)
id=4 (not connected, accepting connect from any host)
id=5    @10.253.6.23  (mysql-5.1.56 ndb-7.1.18)
 * <node_id> START et <node_ID> STOP : Démarrer ou stopper un nœud, l'ID est celle indiqué dans la commande SHOW, par exemple, ici, le nœud 1 est celui de gestion, les 2 et 3 ceux de 
stockage et le 5 le nœud MySQL. L'ID peut être remplacé par ALL pour affecter tout les nœuds.
 * <node_id> RESTART : Stop, puis redémarre le nœud identifié par l'ID <node_id>.
 * <node_id> STATUS : Affiche l'état du nœud choisi.
   
ndb_mgm> 1 STATUS
Node 1: connected (Version 7.1.18)

 * <node_id> REPORT <type> : Il est possible d'obtenir un rapport sur l'utilisation mémoire et sur l'état des sauvegarde d'un nœud de stockage via cette commande, en remplaçant 
<type> repectivement par MemoryUsage et BackupStatus
   
ndb_mgm> 2 REPORT BackupStatus
Node 2: Backup not started

ndb_mgm> 2 REPORT MemoryUsage
Node 2: Data usage is 0%(22 32K pages of total 2560)
Node 2: Index usage is 0%(16 8K pages of total 2336)

 * ENTER SINGLE USER MODE <node_id> et EXIT SINGLE USER MODE <node_id> : Font respectivement entrer et sortir un nœud MySQL en mode « Single user » pour que seul lui puisse accéder 
aux bases, un nœud de donné ne peut joindre un cluster si un serveur MySQL fonctionne en mode « Single user ».
 * CREATE NODEGROUP <nodeid>[, <nodeid>, …] : Créer un groupe de nœuds composé par les nœuds de stockage désignés. Cette commande est utilisé après l'ajout de nœuds de donnée à un 
cluster déjà existant. les différent groupes de nœuds doivent avoir le même nombre de nœuds.
 * DROP NODEGROUP <nodegroup_id> : Supprime le groupe de nœuds désigné par <nodegroup_id> et en fait sortir les nœuds le composant.

Sauvegardes à chaud MySQL Cluster[modifier]

Il semble toujours possible d'utiliser mysqldump depuis le nœud MySQL.

Introduction[modifier]

Les sauvegardes à chauds se présentent sous la forme d'instantanées (snapshot), ceux-ci sont partagés en trois parties :

 * Metadata : Nom et définition des tables des bases de données. Fichier BACKUP-<backupid>.<nodeid>.ctl.
 * Table records : Données des tables des bases de données à l'instant de prise de l'instantané. Fichier BACKUP-<backupid>-0.<nodeid>.data.
 * Transaction log : Enregistrement séquentiel indiquant comment et quand les données on été stocké dans les bases de données. Fichier BACKUP-<backupid>.<nodeid>.log.
Avec <nodeid> l'identifiant du nœud et <backupid> l'identifiant de l'instantané.
Le <backupid> est un nombre entier codé sur 32 bits identifiant l'instantané, si celui-ci n'est pas précisé lors de la création de l'instantané, le premier chiffre consécutif libre 
sera utilisé.

Gestion des sauvegardes[modifier]

La commande de sauvegarde est START BACKUP <backupid>, celle-ci s'utilise depuis le nœud de gestion, l'identifiant de sauvegarde <backupid> est facultatif.
 * START BACKUP NOWAIT : Démarrer la sauvegarde et rendre la main immédiatement.
 * START BACKUP WAIT STARTED : Démarrer la sauvegarde et rendre la main une fois la sauvegarde démarré.
 * START BACKUP COMPLETED : Démarrer la sauvegarde et rendre la main à la fin de la sauvegarde, choix par défaut.

Il est possible d'utiliser les options SNAPSHOTSTART et SNAPSHOTEND pour sauvegarder l'état du cluster en début ou en fin d'instantané, SNAPSHOTEND est le choix par défaut.
Un instantané peut être annulé avec la commande ABORT BACKUP <backupid>.

Options de sauvegarde[modifier]

Ces options peuvent être ajouté dans le fichier /var/lib/mysql-cluster/config.ini du nœud de gestion.
 * !BackupDataBufferSize : Taille du cache de sauvegarde de données en RAM à utiliser avant écriture sur disque.
 * !BackupLogBufferSize : Taille du cache de sauvegarde de journaux en RAM à utiliser avant écriture sur disque.
 * !BackupMemory : RAM allouée à la sauvegarde sur un nœud de données, ce doit être la somme du cache RAM alloué au sauvegarde de données et de journaux.
 * !BackupWriteSize : Taille par défaut des blocs sur disque, cela concerne les sauvegarde de données ou de journaux.
 * !BackupMaxWriteSize : Taille maximum des blocs sur disque, cela concerne les sauvegarde de données ou de journaux.

Démarrage et arrêt d'un cluster MySQL[modifier]

Redémarrage intégral du cluster[modifier]

Il est possible de stopper ou de redémarrer totalement un cluster MySQL via les commandes suivantes.
 * Commencez par donner l'ordre d'arrêt au cluster depuis le nœud de gestion, ceci terminera les processus ndbd et ndb_mgmd des nœuds de données et de gestion :
   # ndb_mgm -e shutdown
 * Ensuite, arrêtez les nœuds MySQL avec :
   # mysqladmin shutdown
 * Pour redémarrer, commencez par les nœuds de gestion :
   # ndb_mgmd -f /var/lib/mysql-cluster/config.ini
 * Puis les nœuds de données
   # ndbd
 * Enfin, les nœuds MySQL
   # mysqld_safe &

Redémarrage d'un nœud individuel[modifier]

Le redémarrage individuel, aussi nommée « Rolling Restart » est utilisé quand il s'avère nécessaire de d'intervenir sur un nœud du cluster, il permet de couper temporairement ledit nœud du cluster le temps de l'intervention, sans pour autant totalement couper le cluster.

Réinitialisation[modifier]

Si il est nécessaire de réinitialiser un cluster, il est souvant préférable de recharger les données et métadonnées, cela peut être fait de trois façon différentes :
 * Redémarrez chaque nœud de données (processus ndbd) avec l'option --initial pour forcer le nœud de données à nettoyer son système de fichier et à recharger les données et 
métadonnées depuis les autres nœuds de données.
 * Utilisez la commande ndbd pour créer un snapshot avant de redémarrer le nœud. Ensuite, restaurez les données avec ndb_restore.
 * Utilisez mysqldump pour créer une sauvegarde avant redémarrage, une fois fait, restaurez-le avec la commande LOAD DATA INFILE.
=== Récupération de ressources ou mise à jour ===
 * Stoppez les nœuds de gestion (processus ndb_mgmd), reconfigurez-les au besoin et redémarrez-les.
 * Puis, stoppez, reconfigurez et redémarrez les nœuds de données.
 * Enfin, stoppez, reconfigurez et redémarrez les nœuds MySQL.
=== Redémarrage avec plusieurs serveurs de gestion ===
 * Stoppez tout les processus ndb_mgmd.
 * Mettez à jour les fichiers config.ini.
 * Démarrez un premier processus ndb_mgmd avec les options --reload ou --initial (ou les deux si désiré).
 * Démarrez les autre processus ndb_mgmd sans les options --reload et --initial.
 * Complétez le redémarrage des nœuds de données et MySQL comme à l'accoutumé.