|
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).
RessourcesLes "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 lvs2La 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 ldirectordLdirectord 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
|