LINUX:Pacemaker - Configuration des services Lsyncd

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

retour aux quatre serveurs WEB en Failover, Fsyncd et ISCSI


But

Nous devons synchroniser le contenu d'un répertoire d'une machine du cluster avec le répertoire équivalent se trouvant sur les trois autres serveurs. Nous utilisons pour cela le logiciel Lsyncd que nous devrons configurer sur les quatre machines du cluster. Ce service est basé sur le logiciel Rsync et le logiciel Lsyncd entrera en relation avec service Rsyncd.

Rappelons le schéma qui illustre ces accès.

LINUX:Failover.web4.lsyncd.pdf

Lsyncd possède deux modes de transfert principaux qui utilisent Rsync. Le premier met en relation un processus Rsync local avec son homologue distant au travers d'une connexion SSH. La seconde façon est basée sur une connexion Client/Serveur entre un client Rsync local et un serveur Rsync distant (Rsyncd). Nous avons choisi la seconde solution.

Nous devons aborder successivement le démon Rsyncd et ensuite les services Lsyncd.


Création des répertoires

Sur les quatre machines du cluster, nous créons l'arborescence de répertoires suivante:

mkdir /site
mkdir /site/cluster5
mkdir /site/cluster6
mkdir /site/cluster7
mkdir /site/cluster8

N'oublions pas de leur affecter les droits nécessaires en fonction de leur utilisation.


Rsyncd

Le service Rsyncd permettra à un client distant d'ajouter, supprimer ou modifier des fichiers ou des répertoires mis en accès localement. La configuration présentée devra se faire de façon identique sur les quatre machines du cluster.


Installation

Le logiciel "rsync" est normalement installé d'office. Il nous faut installer la partie service:

dnf install rsync-daemon 
dnf install rsync


Configuration

Le fichier de configuration se nomme "/etc/rsyncd.conf". Voici son contenu pour notre utilisation:


# Options globales
max connections = 10
# limiter à IPV4
address=0.0.0.0
uid = root
gid = root
use chroot = true
log file = /var/log/rsyncd.log
lock file = /run/rsyncd.lock
pid file = /run/rsyncd.pid
 
# Partages
[cluster5]
  path = /site/cluster5
  comment = Espace pour Cluster 5
  hosts allow = 192.168.1.71 192.168.1.72 192.168.1.73 192.168.1.74
  read only = false
  write only = true
  list = true
 
[cluster6]
  path = /site/cluster6
  comment = Espace pour Cluster 6
  hosts allow = 192.168.1.71 192.168.1.72 192.168.1.73 192.168.1.74
  read only = false
  write only = true
  list = true
 
[cluster7]
  path = /site/cluster7
  comment = Espace pour Cluster 7
  hosts allow = 192.168.1.71 192.168.1.72 192.168.1.73 192.168.1.74
  read only = false
  write only = true
  list = true
 
[cluster8]
  path = /site/cluster8
  comment = Espace pour Cluster 8
  hosts allow = 192.168.1.71 192.168.1.72 192.168.1.73 192.168.1.74
  read only = false
  write only = true
  list = true

On y retrouve les quatre répertoires nouvellement créés; ils sont mis en accès en écriture pour nos quatre machines du cluster via leur adresse IP.


Configurer le mur de feu ou FireWall

Si vous activez le Firewall, ce qui est recommandé, il faut y ajouter la règle suivante:


-A INPUT  -p tcp -m tcp --sport 873 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 873 -d 192.168.1.0/24 -j ACCEPT


Activer et lancer le service

Le service à lancer est "rsyncd.service". La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service.

systemctl enable rsyncd.service
systemctl start rsyncd.service


Lsyncd

Le service Lsyncd permet de synchroniser les fichiers ou répertoires locaux avec le contenu d'un partage distant mis à disposition par le service Rsyncd. La configuration présentée devra se faire de façon identique sur les quatre machines du cluster. Remarquons que cette synchronisation est unidirectionnelle et non bidirectionnelle.


Principe

Il faut préciser que Lsyncd va gérer des fichiers et répertoires physiquement localisés sur la machine hôte du service. En effet il intercepte les événements et notifications locaux concernant toute création, suppression ou modification de fichier ou répertoire intervenant sous le répertoire qu'il surveille.

Le service commence par exécuter le fichier de configuration écrit en LUA, langage de script. Suite à cette exécution, il en déduit le nécessaire pour faire l'exécution et le suivi d'un ou plusieurs processus Rsync.

La première exécution du processus Rsync est une synchronisation complète de la cible qui devient l'exacte image de la source locale.

Toutes les exécutions qui suivent n'affecteront que les fichiers et répertoires de la source locale qui subissent un ajout, une suppression ou une modification. Donc si après ce démarrage, on ajoute, supprime ou modifie un fichier ou un répertoire sur la cible, il restera en place tel quel jusqu'à un redémarrage du service Lsyncd.


Fonctionnement

Nous devons gérer individuellement les quatre répertoires. Chacune de ces tâches se trouvant normalement sur les machines différentes mais pouvant migrer à tout moment sur une autre et pouvant alors se retrouver en présence d'une autre tâche. Nous devons donc effectuer quatre configurations similaires, se différenciant que par leur numéro.

Comme cette configuration se singularise par un chiffre dans le nom du répertoire à gérer, toute la configuration suivra le même canevas. Par exemple le répertoire "/site/cluster5" comporte le chiffre "5". Nous présenterons la configuration pour ce répertoire. Pour les autres répertoires, il suffira de substituer partout ce chiffre "5" par celui que l'on rencontrera suivant le nom des trois autres répertoires:

  • le "6" pour le répertoire "/site/cluster6"
  • le "7" pour le répertoire "/site/cluster7"
  • le "8" pour le répertoire "/site/cluster8"


Installation

Nous installons les paquets suivants:

dnf install lsyncd
dnf install lua
dnf install lus-socket

Normalement le paquet "lua" est installé comme dépendance du paquet "lsyncd" mais pour notre script de configuration, nous avons besoin du module de LUA "socket" que nous installons en plus.

Cette installation est a faire sur les quatre machines du cluster.


Fichiers de configuration LUA

Nous présentons la configuration pour le répertoire "/site/cluster5".

En premier on crée le répertoire "/etc/lsyncd.d". A l'intérieur, on crée le fichier "hosts.txt" qui va contenir la liste des serveurs du cluster. Voici son contenu:


sv1.home.dom
sv2.home.dom
sv3.home.dom
sv4.home.dom

Ce fichier sera lu par le script qui suit afin de garnir une matrice, ce qui permettra au script d'entrer en connexion avec les autres machines du cluster pour une synchronisation Rsync.

On crée également le fichier "lsyncd5.conf" dont voici le contenu:


socketbase = require("socket")
sockettcp = socketbase.tcp()
sockettcp:settimeout(3)
port = 873
 
nomfichier="/var/log/lsyncd/lsyncd5.txt"
fichier=io.open(nomfichier,"w")
 
settings {
 logfile = "/var/log/lsyncd/lsyncd5.log",
 statusFile = "/var/log/lsyncd/lsyncd5.status",
 statusInterval = 10
}
 
nomfichierhost="/etc/lsyncd.d/hosts.txt"
fichierhost=io.open(nomfichierhost,"r")
 
machines = {}
i=0
 
for ligne in fichierhost:lines()
do
 i=i+1
 machines[i] = ligne
end
fichierhost:close()
 
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
   sync{
    default.rsync,
    source="/site/cluster5",
    target=machine.."::cluster5/",
--    target="rsync://"..machine.."/cluster5/",
    rsync = {
     perms=true,
     owner=true,
     group=true
    }
   }
   log("Normal", machine..": Connected to Rsyncd")
   fichier:write("OK "..machine.."\n")
   sockettcp:close()
  else
   log("Error", machine..": Cannot connect to Rsyncd: ", errRsync)
   fichier:write("KO "..machine.."\n")
  end
 end
end
fichier:close()

Ce script ne va créer des sous-processus Rsync que pour les machines distantes et non pour la machine locale pour autant que le service distant Rsyncd y soit actif. On comprend dès lors que s'il n'y a pas de machine distante accessible, il n'y a pas de sous-processus Rsync et donc le service Lsyncd rentre en erreur. Pour cette raison, il nous faut au moins deux machines actives. Un "quorum" minimum de "2" est donc requis.

Note: un double tiret ("--") en début de ligne correspond à un commentaire. Il reprend simplement un syntaxe alternative pour l'accès au service Rsyncd.


Ce fichier est spécifique à la gestion du répertoire "/site/cluster5". Il suffit de recopier ce fichier dans les fichiers "lsyncd6.conf", "lsyncd7.conf" et "lsyncd8.conf" et comme spécifié plus haut, on y substitue respectivement le chiffre "5" (en gras) par un "6", un "7" ou un "8".

Ce répertoire et ces quatre fichiers sont à recopier sur les trois autres machines du cluster.


Détail sur le script de configuration LUA

Pour les plus curieux, nous donnons quelques détails sur ce programme écrit en LUA.


Fichiers de configuration des services Lsyncd

Un fichier de configuration générique pour le service Lsyncd est installé par défaut. Nous allons le personnaliser.

Nous recopions le fichier "/etc/systemd/system/lsyncd.service" dans les fichiers "/etc/systemd/system/lsyncd5.service", "/etc/systemd/system/lsyncd6.service", "/etc/systemd/system/lsyncd7.service" et "/etc/systemd/system/lsyncd8.service".

Nous modifions chacun de ces fichiers pour tenir compte de nos fichiers de configuration LUA créés au point précédent.

Voici le contenu du fichier "/etc/systemd/system/lsyncd5.service":


[Unit]
Description=Live Syncing (Mirror) Daemon - Cluster5
Documentation=man:lsyncd(1) file://usr/share/doc/lsyncd/README.md https://axkibe.github.io/lsyncd/
After=network.target
 
[Service]
Type=simple
Nice=19
#EnvironmentFile=-/etc/sysconfig/lsyncd
ExecStart=/usr/bin/lsyncd -nodaemon "/etc/lsyncd.d/lsyncd5.conf"
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
SuccessExitStatus=143
 
[Install]
WantedBy=multi-user.target

En gras, nous avons les modifications apportées. On désactive les options par défaut reprises dans le fichier "/etc/sysconfig/lsyncd" pour le remplacer par notre propre fichier de configuration LUA.

Nous effectuons le même genre de manipulation dans les trois autres fichiers mais où on remplace également le chiffre "5" respectivement par un "6", un "7" et un "8".

Ces quatre fichiers sont à recopier sur les trois autres machines du cluster.


Réactualisation de Systemd

En effectuant la manipulation du point précédent, nous avons modifié la configuration de Systemd, gestionnaire des services,... Il nous faut soit redémarrer nos quatre machines du cluster soit exécuter la commande suivante sur ces quatre machines:

dnf daemon-reload

qui recharge les paramètres de Systemd.


Précautions

Cette configuration peut présenter un problème lors de son utilisation suite à une limitation de ses fonctionnalités. En mode d'utilisation complet du système, il n'y a pas de problèmes; en cas de défaillance d'une ou plusieurs machines du cluster, le système reste intègre.

Là où les problèmes peuvent survenir se situent lors de la remise en route de la machine défectueuse. Si on n'y prend pas garde, c'est le répertoire de cette machine qui redevient la référence avant d'avoir pu être resynchronisé à partir de la machine de substitution et ces modifications seront écrasées et perdues. Il est donc conseillé de faire une sauvegarde auparavant et de les recopier sur la machine qui vient de redémarrer. S'il n'y a pas eu de modification pendant la période de défaillance, le problème est évité.

Une autre solution, consiste à désactiver Pacemaker sur la machine défectueuse et maintenant réparée avant de la brancher sur le réseau et de redémarrer le service Lsyncd concerné sur la machine de substitution. La synchronisation effectuée, on peut réactiver et lancer Pacemaker sur la machine réparée.

Par exemple, selon le schéma vu précédemment, si la machine "sv2.home.dom" s'arrête, c'est la machine "sv3.home.dom" qui devient la référence pour le répertoire "/site/cluster6" et c'est le service "lsyncd6.service" qui gère sa synchronisation sur cette machine.


En cas d'erreurs affichées pour les ressources LSYNCD dans l'état de Pacemaker avec la commande "crm_mon", utilisez en premier lieu et de préférence la commande de nettoyage de la commande "pcs". Elle relance les ressources incriminées et les re-répartit efficacement:

pcs resource cleanup ClusterLsyncd5

par exemple.


Script de correction des connexions des services Lsyncd

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.






retour aux quatre serveurs WEB en Failover, Fsyncd et ISCSI