« LINUX:MariaDB/Galera - Solution d'automatisation de démarrage » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 8 : | Ligne 8 : | ||
=MariaDB= | =MariaDB= | ||
Le programme est écrit script "bash" et | Le programme est écrit en script "bash" et LUA. Il sera actif sur toutes les machines du cluster MariaDB: "sv1.home.dom", "sv2.home.dom", "sv3.home.dom" et "sv4.home.dom". | ||
Ligne 226 : | Ligne 226 : | ||
On y voit l'utilisation du fichier "hosts.txt" et celle des services Rsyncd. Le fichier journal "mariadb.log" affiche l'état de la procédure. | On y voit l'utilisation du fichier "hosts.txt" et celle des services Rsyncd. Le fichier journal "mariadb.log" affiche l'état de la procédure. | ||
Remarquons que, pour s'exécuter, on doit se trouver dans le répertoire où ce script est localisé; c'est le service qui le précisera. | Remarquons que, pour s'exécuter, on doit se trouver dans le répertoire où ce script est localisé (variable "CHEMIN"); c'est le service qui le précisera. | ||
Il faut faire attention au chemin (variable " | Il faut faire attention au chemin (variable "CHEMINDB") où se trouve la base de données MariaDB; il faut adapter en conséquence la variable "CHEMINDB". Dans notre cas, elle se trouve dans le répertoire voisin "/produc/mysql". Si cette procédure devait être utilisée par le système Cron, il faudrait faudrait les spécifier en absolu et non en relatif. | ||
Ligne 274 : | Ligne 274 : | ||
=Garb= | |||
Il reste à régler le cas du service Garb qui tourne sur la machine "sv0.home.dom". Le programme est écrit en script "bash" et LUA. | |||
==Principe== | |||
La seule contrainte est que ce service doive démarrer après qu'au moins une instance de MariaDB s'exécute sur une des machines du cluster si ce n'est pas le cas, il ne doit pas s'exécuter. Il va donc repérer s'il y a au moins une machine du cluster où s'exécute le service MariaDB grâce au scrip LUA "mariadb.lua". | |||
==Localisation des scripts== | |||
Comme précédemment, nous avions placé la base de données dans le répertoire "/produc/mysql". Et nous plaçons les scripts dans le répertoire "/produc/mysql.bat". | |||
==Fichier "hosts.txt"== | |||
Nous utiliserons le même fichier comme décrit ci-dessus. | |||
==Script LUA== | |||
Nous utiliserons également le même script LUA "mariadb.lua" que ci-dessus. Ce logiciel nécessite les mêmes paquets. | |||
==Script Bash== | |||
Voici le script principal écrit en langage Bash. Nous avons nommé ce script "/produc/mysql.bat/checkgarb.bat": | |||
---- | |||
#!/bin/bash | |||
| |||
CHEMIN="./" | |||
cd $CHEMIN | |||
| |||
/usr/bin/lua mariadb.lua | |||
TAILLE=`/usr/bin/wc -c mariadb.txt | /usr/bin/awk '{printf("%s",$1)}' ` | |||
PS=`/usr/bin/ps ax | /usr/bin/grep garbd | /usr/bin/grep -v grep` | |||
| |||
if [ "$PS" != "" ] | |||
then | |||
if [ "$TAILLE" != "0" ] | |||
then | |||
echo "Garbd en activité" > mariadb.log | |||
exit 0 | |||
else | |||
/usr/bin/echo "Arret de Garbd" > mariadb.log | |||
/usr/bin/systemctl stop garbd.service | |||
fi | |||
else | |||
if [ "$TAILLE" != "0" ] | |||
then | |||
/usr/bin/echo "Lancement de Garbd" > mariadb.log | |||
/usr/bin/systemctl start garbd.service | |||
exit 0 | |||
fi | |||
fi | |||
---- | |||
Le fichier journal "mariadb.log" affiche l'état de la procédure. | |||
Remarquons que, pour s'exécuter, on doit se trouver dans le répertoire où ce script est localisé (variable "CHEMIN"); c'est le service qui le précisera. | |||
==Services== | |||
Les procédures ci-dessus seront lancées à intervalles réguliers par Systemd. Mais on pourrait utiliser à sa place le système Cron. | |||
En premier, on crée le service "checkgarb.service" dans le répertoire de Systemd "/usr/lib/systemd/system" dont voici le contenu: | |||
---- | |||
[Unit] | |||
Description=Check Garbd | |||
After=network.target | |||
| |||
[Service] | |||
Type=simple | |||
WorkingDirectory=/produc/mysql.bat | |||
ExecStart=/produc/mysql.bat/checkgarb.bat | |||
| |||
[Install] | |||
WantedBy=multi-user.target | |||
---- | |||
Adaptez le répertoire où se trouve les procédures selon votre situation. | |||
Comme cette procédure s'exécute et s'arrête rapidement, il faut la relancer à intervalle régulier. On crée un autre service de type "Timer". On nomme ce fichier sur la même base "checkgarb.timer" dans le même répertoire de Systemd "/usr/lib/systemd/system" dont voici le contenu: | |||
---- | |||
[Unit] | |||
Description=Timer for the checkgarb service | |||
[Timer] | |||
OnBootSec=4min | |||
OnUnitActiveSec=5min | |||
[Install] | |||
WantedBy=timers.target | |||
---- | |||
Le service ne s'activera que 4 minutes après le démarrage de la machine et s'exécutera toutes les 5 minutes. Ces temps sont indicatifs. | |||
Comme le paramétrage de Systemd a été modifié, il faut le recharger: | |||
systemctl daemon-reload | |||
On active et lance le service: | |||
systemctl enable checkgarb.timer | |||
systemctl start checkgarb.timer | |||