Serveur MYSQL CLUSTER cluster
| Fiche express | |
|---|---|
| Type | Script de démarrage SysV (/etc/init.d/cluster)
|
| Rôle | Démarre/arrête les 3 démons d'un nœud MySQL Cluster combiné |
| Démons gérés | ndb_mgmd · ndbmtd · mysqld_safe
|
| Fichiers liés | config.ini · my.cnf |
| Voir aussi | Sauvegarde · Restauration · Désinstallation · Mysql · Mariadb |
MySQL Cluster (moteur de stockage NDB, Network DataBase) est une architecture de haute disponibilité pour MySQL reposant sur trois types de nœuds : le nœud de gestion (ndb_mgmd, orchestre le cluster et sert de point d'administration), les nœuds de données (ndbd en mono-thread ou ndbmtd en multi-thread, stockent les données en mémoire avec réplication synchrone) et les nœuds SQL (mysqld, exposent les données via le protocole MySQL classique).
Cette page documente le script d'administration utilisé sur une architecture à nœuds combinés : chaque serveur physique cumule les trois rôles (gestion + données + SQL) plutôt que de les répartir sur des machines dédiées — un choix de simplicité/coût plus que de performance pure, courant sur les clusters à 2 nœuds. Voir config.ini pour le détail de la topologie.
Architecture du cluster
Sur cette installation, le cluster est réduit à 2 nœuds symétriques (typiquement sql1 et sql2) qui hébergent chacun les trois rôles :
- deux entrées
[ndb_mgmd](un nœud de gestion sur chaque serveur, pour éviter le point de défaillance unique) ; - deux entrées
[ndbd]avecNoOfReplicas=2(chaque nœud de données porte une réplique complète des données) ; - plusieurs entrées
[mysqld](les nœuds SQL nommés, plus des emplacements libres pour des connexions API supplémentaires).
Le détail des paramètres est dans config.ini (lu par ndb_mgmd) et my.cnf (lu par mysqld).
Script de démarrage/arrêt
Script SysV classique (chkconfig, RHEL/CentOS 5-6) installé en /etc/init.d/cluster ; sur des distributions plus récentes (systemd), l'équivalent serait une unité .service dédiée par démon plutôt qu'un script unique orchestrant les trois (à vérifier selon la distribution cible).
#!/bin/bash
#
# /etc/rc.d/init.d/cluster
#
# chkconfig: 345 90 10
# description: Launching script for 3 in 1 Mysql cluster node
#
# processname: ndb_mgmd
# processname: ndbmtd
# processname: mysqld_safe &
#
# config: /usr/local/mysql-cluster/config.ini
# config: /etc/my.cnf
clusterdaemons="ndb_mgmd ndbmtd mysqld_safe"
initdir=/etc/init.d
LOCKFILE=/var/lock/subsys/cluster
# Check that networking is up.
if [ ! -f /etc/sysconfig/network ]; then
echo "No Network"
exit 1
fi
. /etc/sysconfig/network
[ "${NETWORKING}" = "no" ] && exit 1
# Source function library
if [ -r $initdir/functions ]; then
. $initdir/functions
fi
# Check that all daemons exists
if ! which $clusterdaemons >/dev/null 2>&1
then
echo_failure
echo "One or more of { $clusterdaemons } missing"
exit 1
fi
function start() {
local RETVAL=1
if [ -f $LOCKFILE ]; then
echo "Already running or lockfile not deleted."
echo "Try \"stop\" or \"restart\""
return 1
fi
for prog in $clusterdaemons ; do
if ps ax | grep $prog | grep -vq "grep"
then
echo_failure
echo "$prog already launched"
else
echo -n $"Starting $prog: "
if [ $prog = "mysqld_safe" ]; then
$prog >/dev/null &
RETVAL=$?
else
# si --initial : la sortie du démon reste affichée
if [ -n "$1" ] && [ $1 = "--initial" ]; then
$prog $1
else
$prog >/dev/null
fi
RETVAL=$?
fi
if [ $RETVAL -eq 0 ] ; then
success "$prog startup"
echo
else
failure "$prog startup"
echo
break
fi
fi
done
[ $RETVAL -eq 0 ] && touch $LOCKFILE
return $RETVAL
}
function stop() {
for prog in $clusterdaemons ; do
echo -n $"Stopping $prog: "
# Exception : le signal doit être envoyé à mysqld, pas au wrapper mysqld_safe
[ $prog = "mysqld_safe" ] && prog="mysqld"
count=0
while [ -n "`pidof $prog`" -a $count -lt 15 ] ; do
killproc $prog -TERM >& /dev/null
RETVAL=$?
[ $RETVAL = 0 -a -z "`pidof $prog`" ] || sleep 3
count=`expr $count + 1`
done
if [ -n "`pidof $prog`" ] ; then
failure "$prog shutdown"
else
success "$prog shutdown"
fi
echo
done
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
return $RETVAL
}
function cluster_status() {
ndb_mgm -t1 -e show
for prog in $clusterdaemons ; do
status $prog
[ $prog = "mysqld_safe" ] && status mysqld
done
}
RETVAL=0
case "$1" in
start)
start
;;
stop)
stop
;;
status)
cluster_status
;;
restart)
stop
start
;;
reload)
stop
start --initial
;;
condrestart)
[ -f $LOCKFILE ] && restart || :
;;
initialstart)
start --initial
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|condrestart|initialstart}"
exit 1;
;;
esac
exit $?
Actions disponibles
start— démarre les trois démons dans l'ordre (gestion, données, SQL).stop— arrête les trois démons (envoieTERM, jusqu'à 15 tentatives espacées de 3s).status— affiche l'état du cluster viandb_mgm -e showpuis le statut de chaque démon local.restart—stoppuisstartnormal.reload—stoppuisstart --initial. Attention : l'option--initiald'un nœud de données NDB efface son système de fichiers local (redo log, checkpoints) et force une resynchronisation complète depuis l'autre nœud — une commande potentiellement longue et impactante, à ne jamais utiliser par réflexe sur unreloadde routine (à vérifier : ce comportement surreloadsemble risqué, le script original ne le documente pas).condrestart— redémarre seulement si le lockfile existe (déjà démarré).initialstart— premier démarrage du cluster (initialise les nœuds de données).
Voir aussi
- Serveur MYSQL CLUSTER config.ini — configuration lue par le nœud de gestion
- Serveur MYSQL CLUSTER my.cnf — configuration MySQL du nœud SQL
- Serveur MYSQL CLUSTER cluster backup — script de sauvegarde
- Serveur MYSQL CLUSTER cluster restore semiauto — script de restauration
- Serveur MYSQL CLUSTER removecluster — désinstallation complète
- Serveur MYSQL CLUSTER reportmemory.sh — supervision de la mémoire du cluster
- Mysql — administration MySQL générale
- Mariadb — fork MySQL, ne partage pas le moteur NDB