« LINUX:Loadbalancing - Router de répartition (masq) » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 51 : | Ligne 51 : | ||
dnf install ipvsadm | dnf install ipvsadm | ||
Par contre, tout un ensemble de paquets Perl ne sont pas | 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-Hostname | ||
dnf install perl-Sys-Syslog | dnf install perl-Sys-Syslog | ||
Ligne 66 : | Ligne 66 : | ||
Il suffit de reprendre la configuration de l'article sur les [[LINUX:Pacemaker - Routers inter LAN en Failover|Routers inter LAN en Failover]]. A la configuration de Pacemaker, on ajoute une ressource activant le service "ldirectord.service". | Il suffit de reprendre la configuration de l'article sur les [[LINUX:Pacemaker - Routers inter LAN en Failover|Routers inter LAN en Failover]]. A la configuration de Pacemaker, on ajoute une ressource activant le service "ldirectord.service". | ||
pcs resource create ClusterLdirectord | pcs resource create ClusterLdirectord systemd:ldirectord op monitor interval=30s | ||
ou | ou | ||
pcs resource create ClusterLdirectord ocf:heartbeat:ldirectord configfile=/etc/ha.d/ldirectord.cf ldirectord=/usr/sbin/ldirectord op monitor interval=30s | pcs resource create ClusterLdirectord ocf:heartbeat:ldirectord configfile=/etc/ha.d/ldirectord.cf ldirectord=/usr/sbin/ldirectord op monitor interval=30s | ||
Ligne 77 : | Ligne 77 : | ||
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é. | 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. | |||
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. | |||
La pièce principale consiste à ajouter une fonction. | |||
Voici le fichier qui sert à patcher: | |||
---- | |||
--- ldirectord 2023-02-21 19:10:20.226935744 +0100 | |||
+++ ldirectord.new.fc37 2023-02-21 19:10:20.251934144 +0100 | |||
@@ -459,7 +459,7 @@ | |||
On means no checking will take place and real servers will always be | |||
activated. Default is I<negotiate>. | |||
| |||
-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<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>''' | |||
| |||
The type of service to monitor when using checktype=negotiate. None denotes | |||
a service that will not be monitored. | |||
@@ -493,6 +493,8 @@ | |||
| |||
=item * Virtual server port is 587: submission | |||
| |||
+'''=item * Virtual server port is 465: smtps, submissions''' | |||
+ | |||
=item * Virtual server port is 636 ldaps | |||
| |||
=item * Virtual server port is 993: imaps | |||
@@ -1560,6 +1562,8 @@ | |||
$1 eq "sip" || | |||
$1 eq "smtp" || | |||
$1 eq "submission" || | |||
+ $1 eq "smtps" || | |||
+ $1 eq "submissions" || | |||
$1 eq "simpletcp") | |||
or &config_error($line, | |||
"service must " . | |||
@@ -1575,6 +1579,7 @@ | |||
"pgsql, " . | |||
"simpletcp, " . | |||
"sip, smtp " . | |||
+ '''"submissions, smtps " .''' | |||
"or submission"); | |||
$vsrv{service} = $1; | |||
if($vsrv{service} eq "ftp" and | |||
@@ -1870,6 +1875,7 @@ | |||
if ($port eq 143) { return "imap"; } | |||
if ($port eq 389) { return "ldap"; } | |||
if ($port eq 443) { return "https"; } | |||
+ '''if ($port eq 465) { return "smtps"; }''' | |||
if ($port eq 587) { return "submission"; } | |||
if ($port eq 636) { return "ldaps"; } | |||
if ($port eq 995) { return "pops"; } | |||
@@ -1895,6 +1901,7 @@ | |||
| |||
if ($service eq "ftp") { return 21; } | |||
if ($service eq "smtp") { return 25; } | |||
+ '''if ($service eq "smtps") { return 465; }''' | |||
if ($service eq "dns") { return 53; } | |||
if ($service eq "http") { return 80; } | |||
if ($service eq "pop") { return 110; } | |||
@@ -1895,6 +1901,7 @@ | |||
| |||
if ($service eq "ftp") { return 21; } | |||
if ($service eq "smtp") { return 25; } | |||
+ '''if ($service eq "smtps") { return 465; }''' | |||
if ($service eq "dns") { return 53; } | |||
if ($service eq "http") { return 80; } | |||
if ($service eq "pop") { return 110; } | |||
@@ -1903,6 +1910,7 @@ | |||
if ($service eq "ldap") { return 389; } | |||
if ($service eq "https") { return 443; } | |||
if ($service eq "submission") { return 587; } | |||
+ '''if ($service eq "submissions") { return 587; }''' | |||
if ($service eq "ldaps") { return 636; } | |||
if ($service eq "imaps") { return 993; } | |||
if ($service eq "pops") { return 995; } | |||
@@ -2880,6 +2888,8 @@ | |||
$$r{num_connects} = 0 if (check_imaps($v, $r) == $SERVICE_UP); | |||
} elsif ($$v{service} eq "smtp" or $$v{service} eq "submission") { | |||
$$r{num_connects} = 0 if (check_smtp($v, $r) == $SERVICE_UP); | |||
+ '''} elsif ($$v{service} eq "smtps" or $$v{service} eq "submissions") {''' | |||
+ '''$$r{num_connects} = 0 if (check_smtps($v, $r) == $SERVICE_UP);''' | |||
} elsif ($$v{service} eq "ftp") { | |||
$$r{num_connects} = 0 if (check_ftp($v, $r) == $SERVICE_UP); | |||
} elsif ($$v{service} eq "ldap") { | |||
@@ -5463,3 +5473,26 @@ | |||
| |||
return $str; | |||
} | |||
+ | |||
+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; | |||
+ } | |||
+} | |||
---- | |||