Haute disponibilité avec Linux Version imprimable
Un système de haute disponibilité peut être requis pour un service de vente en ligne par exemple.
LVS et les outils associés tels que heartbeat et ldirectord permettent de gérer la disponibilité d'un service réseau.
En gros :
LVS correspond à l'ensemble des outils de gestion de "routage" du service au niveau du noyau.
Heartbeat permet de maintenir l'adresse IP du service : tests réseaux (ex. ICMP) et basculement de celle-ci en cas de problème.
Ldirectord gère la liste des machines cibles associées au service en effectuant des tests sur celles-ci.
 
Exemple de topologie réseau 
 
 
 
 VIP : Virtual IP : adresse IP de l'interface virtuelle du service HTTP en load balancing
DIP : Director IP : adresse IP de l'interface virtuelle de la passerelle des WWWs
 
Installation
Est décrite ici, une installation à partir d'une distribution RedHat 8 avec les packages
UltraMonkey
- Réaliser une install minimale de l'OS.
- Installer les packages UltraMonkey :
# rpm -Uhv \
heartbeat-1.0.4-2.rh.8.0.um.1.i386.rpm \
heartbeat-ldirectord-1.0.4-2.rh.8.0.um.1.i386.rpm \
heartbeat-pils-1.0.4-2.rh.8.0.um.1.i386.rpm \
heartbeat-stonith-1.0.4-2.rh.8.0.um.1.i386.rpm \
ipvsadm-1.21-1.rh.8.0.um.1.i386.rpm \
libnet-1.1.0-1.rh.8.0.um.1.i386.rpm \
perl-Authen-SASL-2.03-1.rh.8.0.um.1.noarch.rpm \
perl-Convert-ASN1-0.16-2.rh.8.0.um.1.noarch.rpm \
perl-IO-Socket-SSL-0.92-1.rh.8.0.um.1.noarch.rpm \
perl-Mail-IMAPClient-2.2.7-1.rh.8.0.um.1.noarch.rpm \ 
perl-Net-SSLeay-1.22-1.rh.8.0.um.1.i386.rpm \
perl-Parse-RecDescent-1.80-1.rh.8.0.um.1.noarch.rpm \
perl-XML-NamespaceSupport-1.08-1.rh.8.0.um.1.noarch.rpm \
perl-XML-SAX-0.12-1.rh.8.0.um.1.noarch.rpm \
perl-ldap-0.2701-1.rh.8.0.um.1.noarch.rpm 
 
 Configuration
 
 Heartbeat
 Heartbeat détermine quel "directeur" est actif. Ceux-ci communiquent via l'interface et la méthode precisées dans la config.

Ex. capture avec lvs1 directeur actif :
12:46:55.085068 10.0.0.1.32770 > 10.0.0.2.694: udp 120 (DF) [tos 0x10]
0x0000 4510 0094 0000 4000 4011 2647 0a00 0001 E.....@.@.&G....
0x0010 0a00 0002 8002 02b6 0080 36c2 3e3e 3e0a ..........6.>>>.
0x0020 743d 7374 6174 7573 0a73 743d 6163 7469 t=status.st=acti
0x0030 7665 0a73 7263 3d73 656d 7661 742d 6c76 ve.src=nom-du-lv
0x0040 7331 0a73 6571 3d32 6131 3536 0a68 673d s1.seq=2a156.hg=
0x0050 380a 7473 3d33 6664 6439 6632 660a 6c64 8.ts=3fdd9f2f.ld
0x0060 3d30 2e30 3020 302e 3030 2030 2e30 3020 =0.00.0.00.0.00.
0x0070 312f 3538 2038 3537 310a 7474 6c3d 350a 1/58.8571.ttl=5.
0x0080 6175 7468 3d31 2062 3330 3733 3461 0a3c auth=1.b30734a.<
0x0090 3c3c 0a00 <<..
12:46:56.495530 10.0.0.2.32770 > 10.0.0.1.694: udp 117 (DF) [tos 0x10]
0x0000 4510 0091 0000 4000 4011 264a 0a00 0002 E.....@.@.&J....
0x0010 0a00 0001 8002 02b6 007d 6924 3e3e 3e0a .........}i$>>>.
0x0020 743d 7374 6174 7573 0a73 743d 6163 7469 t=status.st=acti
0x0030 7665 0a73 7263 3d73 656d 7661 742d 6c76 ve.src=nom-du-lv
0x0040 7332 0a73 6571 3d64 0a68 673d 380a 7473 s2.seq=d.hg=8.ts
0x0050 3d33 6664 6439 6633 300a 6c64 3d30 2e30 =3fdd9f30.ld=0.0
0x0060 3020 302e 3030 2030 2e30 3020 312f 3532 0.0.00.0.00.1/52
0x0070 2038 3038 370a 7474 6c3d 350a 6175 7468 .8087.ttl=5.auth
0x0080 3d31 2035 6662 3932 3761 390a 3c3c 3c0a =1.5fb927a9.<<<.
0x0090 00 .
Le basculement intervient quand le directeur actif constate un échec sur un des tests effectués via les interfaces VIP et DIP (ici ping sur le routeur public et le switch du réseau privé. cf plus bas).
 
 Ressources
Les "ressources" à faire basculer entre les deux directeurs sont les adresses VIP, 1.2.3.10,
et DIP, 192.168.1.254. Celles-ci doivent donc figurer dans le fichier
/etc/ha.d/haresources.
Ex. pour que lvs1 soit considéré comme directeur maitre (hostname = nom-du-lvs1) :
nom-du-lvs1 1.2.3.10/24/eth0 192.168.1.254/24/eth1
CE FICHIER DOIT ETRE IDENTIQUE SUR LES 2 DIRECTEURS
 
 Méthode de communication entre lvs1 et lvs2
La configuration général de heartbeat se trouve dans le fichier /etc/ha.d/ha.cf.
Se trouvent dans celui-ci :
  • Le systême de log : syslog facility (logfacility) ou fichier (logfile)
  • La fréquence de test heartbeat (keepalive)
  • Le temps à partir duquel un directeur est considéré "down" (deadtime)
  • Le temps à laisser avant log de message "late heartbeat" (warntime)
  • Le temps de latence qu'il peut y avoir au démarrage de la machine jusqu'à la config réseau (initdead)
  • Le flag pour savoir si le directeur primaire déclaré dans le fichier de ressources doit reprendre le contrôle après une interruption, un basculement (nice_failback : off pour reprise de contrôle).
  • Le port UDP utilise pour le communication entre les directeurs (udpport)
  • Le mode de communication entre les directeurs : broadcast, multicast, unicast (bcast, mcast, ucast)
  • Les noms des directeurs (node)
  • Les machines (ou adresses IP) à tester pour la détermination de la disponibilité (ping)
  • La commande à lancer dans le cas d'un échec.
Dans le cas présent :
logfacility local0
keepalive 2
deadtime 5
warntime 3
initdead 10
nice_failback on
udpport 694
# Sur lvs1
ucast eth2 10.0.0.2
# Sur lvs2
ucast eth2 10.0.0.1
node nom-du-lvs1 node nom-du-lvs2
ping 1.2.3.254
ping 192.168.1.253
respawn hacluster /usr/lib/heartbeat/ipfail
 
ldirectord
Ldirectord gère les accès aux serveurs pris en charge par le partage de charge.
Les directives utilisées sont :
  • Les directives globales :
  • checktimeout : timeout de check de connexion (si ce timetout est depasse le  serveur est considere "down")
  • checkinterval : nombre de secondes entre chaque check
  • autoreload : indique si ldirectord doit relire sa config apres modif (sans redemarrage)
  • logfile : systeme de log (syslog facility ou fichier)
  • quiescent : indique si les serveurs consideres "down" sont supprimes de la  table LVS (valeur=no) ou s'ils se voient affecter un poids inferieur (valeur=yes).
 
  • Les directives propres a un service : elles commencent toutes par la directive "virtual" (attention a l'indentation).
  • virtual : : du service
  • fallback : si tous les serveurs sont "down" redirection du flux vers le fallback (par exemple une page d'attente, d'excuse, ...)
  • real : : (selon la config LVS utilisee : masq (nat), ipip (tunnel), gate (direct routing))
  • service : service teste (pour un eventuel redemarrage de celui-ci)
  • request : requete a effectuer sur les serveurs.
  • receive : expression reguliere devant etre trouvee dans la reponse du serveur a la requete envoyee.
  • scheduler : algo de partage de charge utilise : wrr (defaut), rr, lc, sh, ...
  • persistent : nombre de seconde a maintenir une connexion pour un client.
  • protocol : protocole utilise : tcp ,udp , fwnm (firewall mark : cf man iptables)
  • checktype : type de check a effectuer.
 
Config utilisée :
checktimeout=10
checkinterval=2
autoreload=yes
logfile="local1"
quiescent=no
virtual=1.2.3.10:80
fallback=127.0.0.1:80 masq
real=192.168.1.1:80 masq
real=192.168.1.2:80 masq
service=http
request="test.html"
receive="Test page"
scheduler=sh
persistent=600
protocol=tcp
checktype=negotiate
 
< Précédent   Suivant >
papillon2_tn.jpg





Mot de passe oublié ?