« LINUX:Loadbalancing - Router de répartition (masq) » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(27 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
----
----
''→ [[LINUX:Pacemaker - Serveurs en Loadbalancing|retour aux Serveurs en Loadbalancing]]''
''→ [[LINUX:Pacemaker - Serveurs en Loadbalancing (masq)|retour aux Serveurs en Loadbalancing (masq)]]''
----
----
=But=
=But=
Ce router aura pour tâche de rediriger et de répartir les requêtes venant des clients en fonction des disponibilités des serveurs du cluster.  
Ce router aura pour tâche de rediriger et de répartir les requêtes venant des clients en fonction des disponibilités des serveurs du cluster.  


Nous allons utiliser une fonctionnalité de Linux, le LVS ou Linux Virtual Server. l'outil Ldirectord va nous y aider.
Nous allons utiliser une fonctionnalité de Linux, le LVS ou Linux Virtual Server. L'outil Ldirectord va nous y aider. Nous avons vu sont installation dans l'article sur [[LINUX:Ldirectord|Ldirectord]].
 
 
Cet outil vérifie la disponibilité des services des serveurs du cluster. Ensuite toute requête lui venant de la part de clients sera redirigée vers un des deux serveurs du cluster en fonction des disponibilités.




Ligne 22 : Ligne 25 :
On active cette configuration soit en redémarrant la machine, soit avec la commande suivante:
On active cette configuration soit en redémarrant la machine, soit avec la commande suivante:
  sysctl -p /etc/sysctl.d/router.conf
  sysctl -p /etc/sysctl.d/router.conf
=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-POP3Client
dnf install perl-Mail-IMAPClient
dnf install perl-Net-SMTP-SSL




Ligne 74 : Ligne 39 :




=Modification des sources=
=Fichier de configuration=
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 fichier de configuration se nomme "/etc/ha.d/ldirectord.cf". Il existe plusieurs types de configuration. Voici le contenu choisi:
 
 
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: "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.
 
 
Voici le fichier qui sert à patcher:
----
----
  --- ldirectord 2023-02-21 19:10:20.226935744 +0100
  emailalert="root"
  +++ ldirectord.new.fc37 2023-02-21 19:10:20.251934144 +0100
emailalertfreq=3600
@@ -459,7 +459,7 @@
emailalertstatus=all
  On means no checking will take place and real servers will always be
quiescent=yes
  activated. Default is I<negotiate>.
  checkinterval=20
  fork=yes
&nbsp;
virtual=192.168.1.73:80
        real=192.168.3.71:80 masq 650
        real=192.168.3.72:80 masq 65000
        request="vivant.html"
        receive="Je suis vivant."
        checktype=negotiate
        service=http
        scheduler=lblcr
        persistent=3600
        protocol=tcp
        checkport=80
  &nbsp;
  &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>
  virtual=192.168.1.73:443
+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>'''
        real=192.168.3.71:443 masq 650
        real=192.168.3.72:443 masq 65000
        request="vivant.html"
        receive="Je suis vivant."
        checktype=negotiate
        service=https
        scheduler=lblcr
        persistent=3600
        protocol=tcp
        checkport=443
  &nbsp;
  &nbsp;
  The type of service to monitor when using checktype=negotiate. None denotes
virtual=192.168.1.73:110
  a service that will not be monitored.
        real=192.168.3.71:110 masq 65000
@@ -493,6 +493,8 @@
        real=192.168.3.72:110 masq 65000
        service=pop
        scheduler=lblcr
        persistent=3600
        protocol=tcp
        checktype=negotiate
        checkport=110
        login="testmail"
        passwd="Bateau52Ivre"
  &nbsp;
  &nbsp;
  =item * Virtual server port is 587: submission
virtual=192.168.1.73:143
        real=192.168.3.71:143 masq 65000
        real=192.168.3.72:143 masq 65000
        service=imap
        scheduler=lblcr
        persistent=3600
        protocol=tcp
        checktype=negotiate
        checkport=143
        login="testmail"
        passwd="Bateau52Ivre"
  &nbsp;
  &nbsp;
  +'''=item * Virtual server port is 465: smtps, submissions'''
  virtual=192.168.1.73:993
+
        real=192.168.3.71:993 masq 65000
  =item * Virtual server port is 636 ldaps
        real=192.168.3.72:993 masq 65000
        service=imaps
        scheduler=lblcr
        persistent=3600
        protocol=tcp
        checktype=negotiate
        checkport=993
        login="testmail"
        passwd="Bateau52Ivre"
  &nbsp;
  &nbsp;
  =item * Virtual server port is 993: imaps
  virtual=192.168.1.73:995
@@ -1560,6 +1562,8 @@
        real=192.168.3.71:995 masq 65000
                                                          $1 eq "sip"  ||
        real=192.168.3.72:995 masq 65000
                                                          $1 eq "smtp"  ||
        service=pops
                                                          $1 eq "submission"    ||
        scheduler=lblcr
+                                                        '''$1 eq "smtps" ||'''
        persistent=3600
+                                                        '''$1 eq "submissions"  ||'''
        protocol=tcp
                                                          $1 eq "simpletcp")
        checktype=negotiate
                                            or &config_error($line,
        checkport=995
                                                              "service must " .
        login="testmail"
@@ -1575,6 +1579,7 @@
        passwd="Bateau52Ivre"
                                                              "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;
  &nbsp;
        if ($service eq "ftp")          { return 21; }
virtual=192.168.1.73:25
        if ($service eq "smtp")         { return 25; }
        real=192.168.3.71:25 masq 65000
+      '''if ($service eq "smtps")        { return 465; }'''
         real=192.168.3.72:25 masq 650
        if ($service eq "dns")          { return 53; }
        service=smtp
        if ($service eq "http")         { return 80; }
        scheduler=lblcr
        if ($service eq "pop")          { return 110; }
        persistent=3600
@@ -1895,6 +1901,7 @@
         protocol=tcp
        checktype=negotiate
        checkport=25
  &nbsp;
  &nbsp;
        if ($service eq "ftp")          { return 21; }
virtual=192.168.1.73:587
        if ($service eq "smtp")         { return 25; }
         real=192.168.3.71:587 masq 65000
+      '''if ($service eq "smtps")        { return 465; }'''
         real=192.168.3.72:587 masq 650
        if ($service eq "dns")          { return 53; }
         service=submission
        if ($service eq "http")         { return 80; }
        scheduler=lblcr
        if ($service eq "pop")          { return 110; }
         persistent=3600
@@ -1903,6 +1910,7 @@
        protocol=tcp
        if ($service eq "ldap")         { return 389; }
        checktype=negotiate
        if ($service eq "https")        { return 443; }
        checkport=587
        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;
  &nbsp;
        return $str;
  virtual=192.168.1.73:465
  }
        real=192.168.3.71:465 masq 65000
  +
        real=192.168.3.72:465 masq 650
+'''sub check_smtps'''
        service=smtps
+'''{'''
        scheduler=lblcr
+      '''require Net::SMTP;'''
        persistent=3600
+      '''require Net::SMTP::SSL;'''
        protocol=tcp
+
        checktype=negotiate
+      '''my ($v, $r) = @_;'''
        checkport=465
+      '''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;'''
+      '''}'''
+'''}'''
----
----
En début, diverses options générales sont reprises. Les noms de variables sont parlantes. Voyez l'aide pour plus de détails; il existe d'autres options.
Par exemple:
* '''checkinterval''' : définit en secondes l'interval entre deux vérifications. La réactivité du système dépend de ce paramètre.
Ensuite viennent divers blocs, un par protocol analysé:
* '''virtual''' : chaque bloc débute par ce mot; il est suivi de l'adresse IP virtuelle utilisée par le client qui fait sa requête suivie du port du protocol utilisé par le client. Cette adresse correspond au nom de machine du router "cluster.home.dom" et à l'adresse IP du router "192.168.1.73".
* '''real''' : est présent plusieurs fois, une ligne par serveur qui procure ce service. Dans notre cas, nous avons deux serveurs dans le cluster. Le premier paramètre est l'adresse IP réelle du serveur suivie par le n° du port de ce service sur ce serveur. Elle est suvie du type de redirection; nous utilisons le type "'''masq'''" ou "masquerading" qui est le plus simple et qui correspond à notre schéma. Enfin on attribue un poids pour la sélection; par exemple, pour le protocole HTTP (port 80), la machine "fo1.home.dom" ("192.168.3.71") recevra 100 fois moins de requêtes que la machine "fo2.home.dom" ("192.168.3.72").
* '''checktype''' : définit le type de traitement; nous utilisons le type "negotiate"; ce type va utiliser les routines de vérification incluses dans le programme. On peut utiliser le type "external" qui va utiliser un script externe créé par vous-même pour faire la vérification du bon fonctionnement du service sur la machine désignée.
* '''service''' : dans cas de "checktype=negotiate", il définit la routine interne qui sera utilisée.
* '''checkport''' : est là au cas où vous n'utilieriez pas un port standard.
* '''protocol''' : se passe de commentaire; nos services utilisent le protocole "tcp".
* '''scheduler''' : spécifie le mode de répartition; il y en a beaucoup; nous avons choisi "lblcr". Il utilise le système des poids; tous ne le permettent pas. La répartition est aléatoire mais il veille à ce que la charge par machine respecte les poids. Si pour un client donné (adresse IP source), une connexion est envoyée à un serveur, les suivantes suivront le même chemin.
* '''persistent''' : temps en secondes gardant la connexion en mémoire
Ensuite nous trouvons plusieurs options spécifiques à chaque protocole:
* HTTP et HTTPS
** '''request''' : fourni l'URL à interroger; le paramètre donné est "vivant.html"; c'est pour cette raison que nous avons créé le fichier "/data/web/vivant.html" dans de l'article précédent.
** '''receive''' : attend la réponse "Je suis vivant.".
* POP, POPS, IMAP et IMAPS
** '''login''' : fournit le nom d'utilisateur de messagerie pour effectuer une connexion au compte; c'est pour cette raison que nous avons créé le le compte "testmail" dans de l'article précédent.
** '''passwd''' : fournit le mot de passe associé.




=SSL=
Quatre services utilisent le cryptage SSL et les certificats associés: HTTPS, SMTPS, POPS et IMAPS. Pour valiser ces connexions, Ldirectord doit aussi valider leurs certificats.


Mais les certificats utilisés n'ont pas été validés par une authorité de certification officielle (CA). Il nous faut l'intégrer à la liste officielle du router comme expliqué dans l'article sur les [[LINUX:Cryptage sous Linux|Certificats sous Linux]].


Dans l'article sur le [[LINUX:Pacemaker - Paramétrage des services en Failover|Paramétrage des services en Failover]], nous avions créé les certificats. Le certificat de l'authorité de certification (CA) se nomme "ca.home.crt". On va le copier dans le répertoire "/etc/pki/ca-trust/source/anchors" du router "cluster.home.dom". Ensuite on exécute la commande:
update-ca-trust
pour l'intégrer à la liste officielle des authorités de certification officielle (CA).




=Activation et lancement du service=
La configuration terminée, il faut activer et lancer ce service "ldirectord.service":
systemctl enable ldirectord.service
systemctl start  ldirectord.service




=Statut=
Pour visualiser l'état du système, on utilise la commande suivante:
ipvsadm
qui donne:
----
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  cluster.home.dom:smtp lblcr persistent 3600
  -> fo1.home.dom:smtp            Masq    65000  0          0
  -> fo2.home.dom:smtp            Masq    650    0          0
TCP  cluster.home.dom:http lblcr persistent 3600
  -> fo1.home.dom:http            Masq    650    0          0
  -> fo2.home.dom:http            Masq    65000  0          0
TCP  cluster.home.dom:pop3 lblcr persistent 3600
  -> fo1.home.dom:pop3            Masq    65000  0          0
  -> fo2.home.dom:pop3            Masq    65000  0          0
TCP  cluster.home.dom:imap lblcr persistent 3600
  -> fo1.home.dom:imap            Masq    65000  0          0
  -> fo2.home.dom:imap            Masq    65000  0          0
TCP  cluster.home.dom:https lblcr persistent 3600
  -> fo1.home.dom:https          Masq    650    0          0
  -> fo2.home.dom:https          Masq    65000  0          0
TCP  cluster.home.dom:smtps lblcr persistent 3600
  -> fo1.home.dom:smtps          Masq    65000  0          0
  -> fo2.home.dom:smtps          Masq    650    0          0
TCP  cluster.home.dom:submission lblcr persistent 3600
  -> fo1.home.dom:submission      Masq    65000  0          0
  -> fo2.home.dom:submission      Masq    650    0          0
TCP  cluster.home.dom:imaps lblcr persistent 3600
  -> fo1.home.dom:imaps          Masq    65000  0          0
  -> fo2.home.dom:imaps          Masq    65000  0          0
TCP  cluster.home.dom:pop3s lblcr persistent 3600
  -> fo1.home.dom:pop3s          Masq    65000  0          0
  -> fo2.home.dom:pop3s          Masq    65000  0          0
----
=Accès pour les clients=
Notons que sur les machines clients, le nom de machine "cluster.home.dom" doit être connu et lié à l'adresse IP "192.168.1.73". (serveur DNS ou fichiers "hosts" local)
Pour accéder au site Web, l'URL est:
<nowiki>https://cluster.home.dom</nowiki>
qui affichera:
----
Nom du serveur: fo1.home.dom
----




Du côté de la messagerie, Le serveur est "cluster.home.dom". Par exemple pour l'utilisateur "pdupont", l'adresse mail est "pdupont@failover.dom" et le nom de compte est "pdupont" accompagné du mot de passe Linux associé. Le reste est classique.




Ligne 213 : Ligne 251 :


----
----
''&rarr; [[LINUX:Pacemaker - Serveurs en Loadbalancing|retour aux Serveurs en Loadbalancing]]''
''&rarr; [[LINUX:Pacemaker - Serveurs en Loadbalancing (masq)|retour aux Serveurs en Loadbalancing (masq)]]''
----
----
__NOEDITSECTION__
__NOEDITSECTION__
[[Category:LINUX]]
[[Category:LINUX]]

Dernière version du 22 juin 2023 à 21:41


retour aux Serveurs en Loadbalancing (masq)


But

Ce router aura pour tâche de rediriger et de répartir les requêtes venant des clients en fonction des disponibilités des serveurs du cluster.

Nous allons utiliser une fonctionnalité de Linux, le LVS ou Linux Virtual Server. L'outil Ldirectord va nous y aider. Nous avons vu sont installation dans l'article sur Ldirectord.


Cet outil vérifie la disponibilité des services des serveurs du cluster. Ensuite toute requête lui venant de la part de clients sera redirigée vers un des deux serveurs du cluster en fonction des disponibilités.


Prérequis

Routage

Nous sommes en présence de deux LANs interconnectés par un router. Pour mettre en oeuvre correctement les différents aspects du routage; voyez l'article sur le Routage statique et spécialement le chapitre sur le "Second réseau privé".


Activation du routage

Il faut activer le routage sur le router "cluster.home.dom" en ajoutant un fichier, par exemple "router.conf", dans le répertoire "/etc/sysctl.d". Ce fichier doit contenir la ligne:


net.ipv4.ip_forward = 1

On active cette configuration soit en redémarrant la machine, soit avec la commande suivante:

sysctl -p /etc/sysctl.d/router.conf


Configuration en Failover

Nous allons utiliser cette machine de façon autonome mais il est très facile de l'utiliser dans une structure en Failover.

Il suffit de reprendre la configuration de l'article sur les 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

ou

pcs resource create ClusterLdirectord ocf:heartbeat:ldirectord configfile=/etc/ha.d/ldirectord.cf ldirectord=/usr/sbin/ldirectord op monitor interval=30s

et ensuite:

pcs constraint colocation add ClusterLdirectord  with    ClusterIPint score=INFINITY
pcs constraint order ClusterIPint then start ClusterLdirectord


Fichier de configuration

Le fichier de configuration se nomme "/etc/ha.d/ldirectord.cf". Il existe plusieurs types de configuration. Voici le contenu choisi:


emailalert="root"
emailalertfreq=3600
emailalertstatus=all
quiescent=yes
checkinterval=20
fork=yes
 
virtual=192.168.1.73:80
       real=192.168.3.71:80 masq 650
       real=192.168.3.72:80 masq 65000
       request="vivant.html"
       receive="Je suis vivant."
       checktype=negotiate
       service=http
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checkport=80
 
virtual=192.168.1.73:443
       real=192.168.3.71:443 masq 650
       real=192.168.3.72:443 masq 65000
       request="vivant.html"
       receive="Je suis vivant."
       checktype=negotiate
       service=https
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checkport=443
 
virtual=192.168.1.73:110
       real=192.168.3.71:110 masq 65000
       real=192.168.3.72:110 masq 65000
       service=pop
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checktype=negotiate
       checkport=110
       login="testmail"
       passwd="Bateau52Ivre"
 
virtual=192.168.1.73:143
       real=192.168.3.71:143 masq 65000
       real=192.168.3.72:143 masq 65000
       service=imap
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checktype=negotiate
       checkport=143
       login="testmail"
       passwd="Bateau52Ivre"
 
virtual=192.168.1.73:993
       real=192.168.3.71:993 masq 65000
       real=192.168.3.72:993 masq 65000
       service=imaps
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checktype=negotiate
       checkport=993
       login="testmail"
       passwd="Bateau52Ivre"
 
virtual=192.168.1.73:995
       real=192.168.3.71:995 masq 65000
       real=192.168.3.72:995 masq 65000
       service=pops
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checktype=negotiate
       checkport=995
       login="testmail"
       passwd="Bateau52Ivre"
 
virtual=192.168.1.73:25
       real=192.168.3.71:25 masq 65000
       real=192.168.3.72:25 masq 650
       service=smtp
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checktype=negotiate
       checkport=25
 
virtual=192.168.1.73:587
       real=192.168.3.71:587 masq 65000
       real=192.168.3.72:587 masq 650
       service=submission
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checktype=negotiate
       checkport=587
 
virtual=192.168.1.73:465
       real=192.168.3.71:465 masq 65000
       real=192.168.3.72:465 masq 650
       service=smtps
       scheduler=lblcr
       persistent=3600
       protocol=tcp
       checktype=negotiate
       checkport=465

En début, diverses options générales sont reprises. Les noms de variables sont parlantes. Voyez l'aide pour plus de détails; il existe d'autres options.

Par exemple:

  • checkinterval : définit en secondes l'interval entre deux vérifications. La réactivité du système dépend de ce paramètre.

Ensuite viennent divers blocs, un par protocol analysé:

  • virtual : chaque bloc débute par ce mot; il est suivi de l'adresse IP virtuelle utilisée par le client qui fait sa requête suivie du port du protocol utilisé par le client. Cette adresse correspond au nom de machine du router "cluster.home.dom" et à l'adresse IP du router "192.168.1.73".
  • real : est présent plusieurs fois, une ligne par serveur qui procure ce service. Dans notre cas, nous avons deux serveurs dans le cluster. Le premier paramètre est l'adresse IP réelle du serveur suivie par le n° du port de ce service sur ce serveur. Elle est suvie du type de redirection; nous utilisons le type "masq" ou "masquerading" qui est le plus simple et qui correspond à notre schéma. Enfin on attribue un poids pour la sélection; par exemple, pour le protocole HTTP (port 80), la machine "fo1.home.dom" ("192.168.3.71") recevra 100 fois moins de requêtes que la machine "fo2.home.dom" ("192.168.3.72").
  • checktype : définit le type de traitement; nous utilisons le type "negotiate"; ce type va utiliser les routines de vérification incluses dans le programme. On peut utiliser le type "external" qui va utiliser un script externe créé par vous-même pour faire la vérification du bon fonctionnement du service sur la machine désignée.
  • service : dans cas de "checktype=negotiate", il définit la routine interne qui sera utilisée.
  • checkport : est là au cas où vous n'utilieriez pas un port standard.
  • protocol : se passe de commentaire; nos services utilisent le protocole "tcp".
  • scheduler : spécifie le mode de répartition; il y en a beaucoup; nous avons choisi "lblcr". Il utilise le système des poids; tous ne le permettent pas. La répartition est aléatoire mais il veille à ce que la charge par machine respecte les poids. Si pour un client donné (adresse IP source), une connexion est envoyée à un serveur, les suivantes suivront le même chemin.
  • persistent : temps en secondes gardant la connexion en mémoire

Ensuite nous trouvons plusieurs options spécifiques à chaque protocole:

  • HTTP et HTTPS
    • request : fourni l'URL à interroger; le paramètre donné est "vivant.html"; c'est pour cette raison que nous avons créé le fichier "/data/web/vivant.html" dans de l'article précédent.
    • receive : attend la réponse "Je suis vivant.".
  • POP, POPS, IMAP et IMAPS
    • login : fournit le nom d'utilisateur de messagerie pour effectuer une connexion au compte; c'est pour cette raison que nous avons créé le le compte "testmail" dans de l'article précédent.
    • passwd : fournit le mot de passe associé.


SSL

Quatre services utilisent le cryptage SSL et les certificats associés: HTTPS, SMTPS, POPS et IMAPS. Pour valiser ces connexions, Ldirectord doit aussi valider leurs certificats.

Mais les certificats utilisés n'ont pas été validés par une authorité de certification officielle (CA). Il nous faut l'intégrer à la liste officielle du router comme expliqué dans l'article sur les Certificats sous Linux.

Dans l'article sur le Paramétrage des services en Failover, nous avions créé les certificats. Le certificat de l'authorité de certification (CA) se nomme "ca.home.crt". On va le copier dans le répertoire "/etc/pki/ca-trust/source/anchors" du router "cluster.home.dom". Ensuite on exécute la commande:

update-ca-trust

pour l'intégrer à la liste officielle des authorités de certification officielle (CA).


Activation et lancement du service

La configuration terminée, il faut activer et lancer ce service "ldirectord.service":

systemctl enable ldirectord.service
systemctl start  ldirectord.service


Statut

Pour visualiser l'état du système, on utilise la commande suivante:

ipvsadm

qui donne:


IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  cluster.home.dom:smtp lblcr persistent 3600
  -> fo1.home.dom:smtp            Masq    65000  0          0
  -> fo2.home.dom:smtp            Masq    650    0          0
TCP  cluster.home.dom:http lblcr persistent 3600
  -> fo1.home.dom:http            Masq    650    0          0
  -> fo2.home.dom:http            Masq    65000  0          0
TCP  cluster.home.dom:pop3 lblcr persistent 3600
  -> fo1.home.dom:pop3            Masq    65000  0          0
  -> fo2.home.dom:pop3            Masq    65000  0          0
TCP  cluster.home.dom:imap lblcr persistent 3600
  -> fo1.home.dom:imap            Masq    65000  0          0
  -> fo2.home.dom:imap            Masq    65000  0          0
TCP  cluster.home.dom:https lblcr persistent 3600
  -> fo1.home.dom:https           Masq    650    0          0
  -> fo2.home.dom:https           Masq    65000  0          0
TCP  cluster.home.dom:smtps lblcr persistent 3600
  -> fo1.home.dom:smtps           Masq    65000  0          0
  -> fo2.home.dom:smtps           Masq    650    0          0
TCP  cluster.home.dom:submission lblcr persistent 3600
  -> fo1.home.dom:submission      Masq    65000  0          0
  -> fo2.home.dom:submission      Masq    650    0          0
TCP  cluster.home.dom:imaps lblcr persistent 3600
  -> fo1.home.dom:imaps           Masq    65000  0          0
  -> fo2.home.dom:imaps           Masq    65000  0          0
TCP  cluster.home.dom:pop3s lblcr persistent 3600
  -> fo1.home.dom:pop3s           Masq    65000  0          0
  -> fo2.home.dom:pop3s           Masq    65000  0          0


Accès pour les clients

Notons que sur les machines clients, le nom de machine "cluster.home.dom" doit être connu et lié à l'adresse IP "192.168.1.73". (serveur DNS ou fichiers "hosts" local)


Pour accéder au site Web, l'URL est:

https://cluster.home.dom

qui affichera:


Nom du serveur: fo1.home.dom 


Du côté de la messagerie, Le serveur est "cluster.home.dom". Par exemple pour l'utilisateur "pdupont", l'adresse mail est "pdupont@failover.dom" et le nom de compte est "pdupont" accompagné du mot de passe Linux associé. Le reste est classique.






retour aux Serveurs en Loadbalancing (masq)