« LINUX:Ldirectord » : différence entre les versions
(Page créée avec « ---- ''→ retour au menu de la Haute disponibilité'' ---- =But= Ldirectord est un programme qui gère la répartition de charge en utilisant fonctionnalité de Linux, le LVS ou Linux Virtual Server. Cette partie ne concerne que son installation. Son utilisation sera abordée dans les deux articles qui suivent. ---- ''→ retour au menu de la Haute disponibilité'' ---- __NOEDITSECTION__... ») |
Aucun résumé des modifications |
||
Ligne 8 : | Ligne 8 : | ||
=Installation= | |||
Nous allons utiliser l'outil Ldirectord qu'il faut installer: | |||
dnf install ldirectord | |||
Par la même occasion, il installe toute une série de modules Perl en tant que dépendances: | |||
dnf install perl-WWW-RobotRules | |||
dnf install perl-Try-Tiny | |||
dnf install perl-Tie | |||
dnf install perl-Text-Balanced | |||
dnf install perl-Parse-RecDescent | |||
dnf install perl-Net-IMAP-Simple | |||
dnf install perl-Net-IMAP-Simple-SSL | |||
dnf install perl-Socket6 | |||
dnf install perl-IO-Socket-INET6 | |||
dnf install perl-Net-SMTP-SSL | |||
dnf install perl-MailTools | |||
dnf install perl-Net-HTTP | |||
dnf install perl-HTTP-Negotiate | |||
dnf install perl-HTTP-Cookies | |||
dnf install perl-Digest-SHA | |||
dnf install perl-Digest-HMAC | |||
dnf install perl-NTLM | |||
dnf install perl-Data-Dump | |||
dnf install perl-libwww-perl | |||
dnf install perl-Socket-GetAddrInfo | |||
Il installe également le paquet suivant que nous utiliserons pour visualiser l'état du système: | |||
dnf install ipvsadm | |||
Par contre, tout un ensemble de paquets Perl ne sont pas installés mais sont nécessaires: | |||
dnf install perl-Sys-Hostname | |||
dnf install perl-Sys-Syslog | |||
dnf install perl-Net-Ping | |||
dnf install perl-LWP-Protocol-https | |||
dnf install perl-Mail-POP3Client | |||
dnf install perl-Mail-IMAPClient | |||
dnf install perl-Net-INET6Glue | |||
dnf install perl-LDAP | |||
dnf install perl-Authen-Radius | |||
dnf install perl-Net-DNS | |||
=Modification de la source= | |||
Le programme Ldirectord est installé dans le fichier "/usr/sbin/ldirectord". Il teste tout un ensemble de services. Les protocoles que l'on veut tester sur nos serveurs du cluster sont: HTTP, HTTPS, SMTP, SUBMISSION, SMTPS, POP, POPS, IMAP et IMAPS. Parmi ceux-ci, seul le protocole SMTPS n'est pas repris. Soit on crée un script externe qui fera ce travail, soit on ajoute au programme cette fonctionnalité. | |||
Nous avons choisi la seconde solution. | |||
La version actuelle pour Fedora 37 est "4.11.0-2". Il faut garder à l'esprit qu'une mise à jour entrainera un écrasement de nos modifications; il faut garder de côté notre nouvelle version et tenir à l'oeil toute mise à jour de ce paquet Ldirectord. | |||
Le fichier suivant contient un patch à appliquer sur le fichier "ldirectord": | |||
[[Media:LINUX:Ldirectord.patch.zip|Télécharger le fichier ZIP]] | |||
On doit décompresser ce fichier téléchargé: | |||
unzip Ldirectord.patch.zip | |||
Il faut avoir installé l'utilitaire "patch": | |||
dnf install patch | |||
Pour appliquer ce patch, copiez le fichier "/usr/sbin/ldirectord" dans le même répertoire que le fichier "ldirectord.patch" que vous venez de décompresser puis exécutez la commande: | |||
patch < ldirectord.patch | |||
Le fichier local "ldirectord" sera mis à jour; il suffit de le recopier dans le répertoire "/usr/sbin". | |||
Le fichier suivant contient le fichier "ldirectord" modifié: | |||
[[Media:LINUX:Ldirectord.zip|Télécharger le fichier ZIP]] | |||
On doit décompresser ce fichier téléchargé: | |||
unzip Ldirectord.zip | |||
Le fichier résultant est à placer dans le répertoire "/usr/sbin". | |||
Voici une liste des modification: | |||
*La pièce principale consiste à ajouter une fonction: "check_smtps" et ensuite il faut ajouter le nécessaire pour y faire référence et initialiser quelques mots clés et n° de protocole. | |||
---- | |||
sub check_smtps | |||
{ | |||
require Net::SMTP; | |||
require Net::SMTP::SSL; | |||
my ($v, $r) = @_; | |||
my $port = ld_checkport($v, $r); | |||
&ld_debug(2, "Checking $$v{service}: server=$$r{server} port=$port"); | |||
my $smtp = new Net::SMTP::SSL($$r{server}, Port => $port, | |||
Timeout => $$v{negotiatetimeout}); | |||
if ($smtp) { | |||
$smtp->quit; | |||
service_set($v, $r, "up", {do_log => 1}); | |||
return $SERVICE_UP; | |||
} else { | |||
service_set($v, $r, "down", {do_log => 1}); | |||
return $SERVICE_DOWN; | |||
} | |||
} | |||
---- | |||
* Ajouter les mots en gras en fin de la ligne 462: | |||
---- | |||
B<service = >B<dns> | B<ftp> | B<http> | B<https> | B<http_proxy> | B<imap> | B<imaps> | B<ldap> | B<ldaps> | B<mysql> | B<nntp> | B<none> | B<oracle> | B<pgsql> | B<pop> | B<pops> | B<radius> | B<simpletcp> | B<sip> | B<smtp> | B<submission>''' | B<smtps> | B<submissions>''' | |||
---- | |||
* Ajouter ces lignes en ligne 495: | |||
---- | |||
=item * Virtual server port is 465: smtps, submissions | |||
| |||
---- | |||
* Ajouter ces lignes en ligne 1563: | |||
---- | |||
$1 eq "smtps" || | |||
$1 eq "submissions" || | |||
---- | |||
* Ajouter cette ligne en ligne 1578: | |||
---- | |||
"submissions, smtps " . | |||
---- | |||
* Ajouter cette ligne en ligne 1873: | |||
---- | |||
if ($port eq 465) { return "smtps"; } | |||
---- | |||
* Ajouter cette ligne en ligne 1897: | |||
---- | |||
if ($service eq "smtps") { return 465; } | |||
---- | |||
* Ajouter cette ligne en ligne 1905: | |||
---- | |||
if ($service eq "submissions") { return 587; } | |||
---- | |||
* Ajouter ces lignes en ligne 2883: | |||
---- | |||
} elsif ($$v{service} eq "smtps" or $$v{service} eq "submissions") { | |||
$$r{num_connects} = 0 if (check_smtps($v, $r) == $SERVICE_UP); | |||
---- | |||
=Problème= | |||
Si vous rencontrez un problème avec un protocole donné, j'utilise cette méthode: | |||
* arrêtez le service "ldirectord.service" | |||
* dans le fichier "/etc/ha.d/ldirectord.cf", isolez le bloc concernant ce protocole et les options générales dans un autre fichier (exemple: "/etc/ha.d/test.cf") | |||
* lancez interactivement Ldirectord en mode debugger | |||
ldirectord -d -- /etc/ha.d/test.cf start | |||
* après quelques secondes, quand il a fait son premier cycle de vérifications, arrêtez-le ("^C") | |||
* analysez la sortie | |||
Dans plusieurs cas, une fonction Perl n'était pas installée; il ne la trouve pas. | |||
Par exemple, le message suivant: | |||
Can't locate Authen/Radius.pm in @INC (you may need to install the Authen::Radius module) | |||
signale que le module Authen/Radius.pm n'est pas trouvé; on l'installe: | |||
dnf install perl-Authen-Radius | |||
Dernière version du 23 février 2023 à 14:08
→ retour au menu de la Haute disponibilité
But
Ldirectord est un programme qui gère la répartition de charge en utilisant fonctionnalité de Linux, le LVS ou Linux Virtual Server.
Cette partie ne concerne que son installation. Son utilisation sera abordée dans les deux articles qui suivent.
Installation
Nous allons utiliser l'outil Ldirectord qu'il faut installer:
dnf install ldirectord
Par la même occasion, il installe toute une série de modules Perl en tant que dépendances:
dnf install perl-WWW-RobotRules dnf install perl-Try-Tiny dnf install perl-Tie dnf install perl-Text-Balanced dnf install perl-Parse-RecDescent dnf install perl-Net-IMAP-Simple dnf install perl-Net-IMAP-Simple-SSL dnf install perl-Socket6 dnf install perl-IO-Socket-INET6 dnf install perl-Net-SMTP-SSL dnf install perl-MailTools dnf install perl-Net-HTTP dnf install perl-HTTP-Negotiate dnf install perl-HTTP-Cookies dnf install perl-Digest-SHA dnf install perl-Digest-HMAC dnf install perl-NTLM dnf install perl-Data-Dump dnf install perl-libwww-perl dnf install perl-Socket-GetAddrInfo
Il installe également le paquet suivant que nous utiliserons pour visualiser l'état du système:
dnf install ipvsadm
Par contre, tout un ensemble de paquets Perl ne sont pas installés mais sont nécessaires:
dnf install perl-Sys-Hostname dnf install perl-Sys-Syslog dnf install perl-Net-Ping dnf install perl-LWP-Protocol-https dnf install perl-Mail-POP3Client dnf install perl-Mail-IMAPClient dnf install perl-Net-INET6Glue dnf install perl-LDAP dnf install perl-Authen-Radius dnf install perl-Net-DNS
Modification de la source
Le programme Ldirectord est installé dans le fichier "/usr/sbin/ldirectord". Il teste tout un ensemble de services. Les protocoles que l'on veut tester sur nos serveurs du cluster sont: HTTP, HTTPS, SMTP, SUBMISSION, SMTPS, POP, POPS, IMAP et IMAPS. Parmi ceux-ci, seul le protocole SMTPS n'est pas repris. Soit on crée un script externe qui fera ce travail, soit on ajoute au programme cette fonctionnalité.
Nous avons choisi la seconde solution.
La version actuelle pour Fedora 37 est "4.11.0-2". Il faut garder à l'esprit qu'une mise à jour entrainera un écrasement de nos modifications; il faut garder de côté notre nouvelle version et tenir à l'oeil toute mise à jour de ce paquet Ldirectord.
Le fichier suivant contient un patch à appliquer sur le fichier "ldirectord":
Télécharger le fichier ZIP
On doit décompresser ce fichier téléchargé:
unzip Ldirectord.patch.zip
Il faut avoir installé l'utilitaire "patch":
dnf install patch
Pour appliquer ce patch, copiez le fichier "/usr/sbin/ldirectord" dans le même répertoire que le fichier "ldirectord.patch" que vous venez de décompresser puis exécutez la commande:
patch < ldirectord.patch
Le fichier local "ldirectord" sera mis à jour; il suffit de le recopier dans le répertoire "/usr/sbin".
Le fichier suivant contient le fichier "ldirectord" modifié:
Télécharger le fichier ZIP
On doit décompresser ce fichier téléchargé:
unzip Ldirectord.zip
Le fichier résultant est à placer dans le répertoire "/usr/sbin".
Voici une liste des modification:
- La pièce principale consiste à ajouter une fonction: "check_smtps" et ensuite il faut ajouter le nécessaire pour y faire référence et initialiser quelques mots clés et n° de protocole.
sub check_smtps { require Net::SMTP; require Net::SMTP::SSL; my ($v, $r) = @_; my $port = ld_checkport($v, $r); &ld_debug(2, "Checking $$v{service}: server=$$r{server} port=$port"); my $smtp = new Net::SMTP::SSL($$r{server}, Port => $port, Timeout => $$v{negotiatetimeout}); if ($smtp) { $smtp->quit; service_set($v, $r, "up", {do_log => 1}); return $SERVICE_UP; } else { service_set($v, $r, "down", {do_log => 1}); return $SERVICE_DOWN; } }
- Ajouter les mots en gras en fin de la ligne 462:
B<service = >B<dns> | B<ftp> | B<http> | B<https> | B<http_proxy> | B<imap> | B<imaps> | B<ldap> | B<ldaps> | B<mysql> | B<nntp> | B<none> | B<oracle> | B<pgsql> | B<pop> | B<pops> | B<radius> | B<simpletcp> | B<sip> | B<smtp> | B<submission> | B<smtps> | B<submissions>
- Ajouter ces lignes en ligne 495:
=item * Virtual server port is 465: smtps, submissions
- Ajouter ces lignes en ligne 1563:
$1 eq "smtps" || $1 eq "submissions" ||
- Ajouter cette ligne en ligne 1578:
"submissions, smtps " .
- Ajouter cette ligne en ligne 1873:
if ($port eq 465) { return "smtps"; }
- Ajouter cette ligne en ligne 1897:
if ($service eq "smtps") { return 465; }
- Ajouter cette ligne en ligne 1905:
if ($service eq "submissions") { return 587; }
- Ajouter ces lignes en ligne 2883:
} elsif ($$v{service} eq "smtps" or $$v{service} eq "submissions") { $$r{num_connects} = 0 if (check_smtps($v, $r) == $SERVICE_UP);
Problème
Si vous rencontrez un problème avec un protocole donné, j'utilise cette méthode:
- arrêtez le service "ldirectord.service"
- dans le fichier "/etc/ha.d/ldirectord.cf", isolez le bloc concernant ce protocole et les options générales dans un autre fichier (exemple: "/etc/ha.d/test.cf")
- lancez interactivement Ldirectord en mode debugger
ldirectord -d -- /etc/ha.d/test.cf start
- après quelques secondes, quand il a fait son premier cycle de vérifications, arrêtez-le ("^C")
- analysez la sortie
Dans plusieurs cas, une fonction Perl n'était pas installée; il ne la trouve pas.
Par exemple, le message suivant:
Can't locate Authen/Radius.pm in @INC (you may need to install the Authen::Radius module)
signale que le module Authen/Radius.pm n'est pas trouvé; on l'installe:
dnf install perl-Authen-Radius
→ retour au menu de la Haute disponibilité