« 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 installé mais sont nécessaires:
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         systemd:ldirectord       op monitor interval=30s
  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>.
&nbsp;
-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>'''
&nbsp;
  The type of service to monitor when using checktype=negotiate. None denotes
  a service that will not be monitored.
@@ -493,6 +493,8 @@
&nbsp;
  =item * Virtual server port is 587: submission
&nbsp;
+'''=item * Virtual server port is 465: smtps, submissions'''
+
  =item * Virtual server port is 636 ldaps
&nbsp;
=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 @@
&nbsp;
        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 @@
&nbsp;
        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 @@
&nbsp;
        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;
+      }
+}
----