LINUX:Pacemaker - Script de correction des connexions des services Lsyncd
→ retour à la Configuration des services Lsyncd
But
Dans les cas d'erreur de connexion ou de non connexion aux services distant RSYNCD, on peut tester et relancer les services Rsyncd régulièrement via Cron (fichier "/etc/crontab") grâce à un script. Ce script est composé de deux parties: une écrite en LUA et l'autre en Bash. Ce script est à exécuter sur les quatre machines du cluster.
Principe
Ce script crée un nouvel état actualisé des connexions possibles vers les services distants Rsyncd. On compare cet état avec celui créé par le ou les processus Lsyncd. Si ces deux états diffèrent, on relance le service Lsyncd concerné.
Script en LUA
Pour récupérer l'état des connexions possibles vers les services distants Rsyncd, le fichier de configuration en LUA du service Lsyncd est en grande partie utilisable tel quel. Il faut le nettoyer un peu. Il va créer un fichier texte d'état nommé "/var/log/lsyncd/rsyncd.txt". Nous le nommerons "rsyncd.lua" et nous le rangerons dans le répertoire "/manager/lsyncd-lua".
#!/bin/lua socketbase = require("socket") sockettcp = socketbase.tcp() sockettcp:settimeout(1) port = 873 nomfichier="/var/log/lsyncd/rsyncd.txt" fichier=io.open(nomfichier,"w") machines = { 'sv1.home.dom', 'sv2.home.dom', 'sv3.home.dom', 'sv4.home.dom' } machinelocal = socketbase.dns.gethostname() for _, machine in ipairs( machines ) do if not (machine == machinelocal) then local SocketRsync, errRsync = sockettcp:connect(machine, port) if SocketRsync then fichier:write("OK "..machine.."\n") sockettcp:close() else fichier:write("KO "..machine.."\n") end end end fichier:close()
En le rendant exécutable:
chmod 700 rsyncd.lua
on peut y faire appel directement.
/manager/lsyncd-lua/rsyncd.lua
Script en Bash
Le script suivant fait appel au script LUA. Ensuite il repère les processus Lsyncd actifs localement et pour ceux-ci, il effectue la comparaison des deux états. Si ces états diffèrent, le service Lsyncd concerné est relancé. Nous nommerons ce script "check.bat". Nous le rangerons également dans le répertoire "/manager/lsyncd-lua".
#!/bin/bash CHEMIN="/manager/lsyncd-lua" cd $CHEMIN /usr/bin/lua rsyncd.lua PS=`/usr/bin/ps ax | /usr/bin/grep lsyncd | /usr/bin/grep -v grep` LISTE="lsyncd5.conf lsyncd6.conf lsyncd7.conf lsyncd8.conf" for NO in $LISTE do PSNO=`/usr/bin/echo $PS | /usr/bin/grep $NO` if [ "$PSNO" != "" ] then NOM=`/usr/bin/echo $NO | /usr/bin/awk -F "." '{printf("%s",$1)}' ` DIFF=`/usr/bin/diff /var/log/lsyncd/rsyncd.txt /var/log/lsyncd/${NOM}.txt | /usr/bin/wc -c` if [ "$DIFF" != "0" ] then /usr/bin/echo "Recharger: $NOM" /usr/bin/systemctl restart ${NOM}.service fi fi done
Il ne faut pas oublier de le rendre exécutable:
chmod 700 check.bat
On peut y faire appel directement:
/manager/lsyncd-lua/check.bat
Nous avons vu dans l'article concernant le Détail sur le script de configuration LUA, au dernier point, la création de ce fichier "/var/log/lsyncd/lsyncd<n°>.txt" d'état du processus Lsyncd.
CRON
Pour le rendre automatique, il suffit d'ajouter une ligne faisant appel au script "/manager/lsyncd-lua/check.bat" à la fréquence désirée au fichier "/etc/crontab". S'il relance un service, vous serez avertit par mail car il affiche une ligne reprenant quel service est relancé. Assurez-vous que le service "cron.service" est bien actif; il l'est par défaut; ainsi que le service de messagerie "postfix.service".
→ retour à la Configuration des services Lsyncd