LINUX:Pacemaker - Script de correction des connexions des services Lsyncd

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

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