Repartition de charge basique avec ldirector
Configuration du serveur de repartition de charge
Le serveur de repartition de charge reçoit les requetes via une adresse dite virtuelle, et s'occuppe ensuite de rediriger les requetes vers la ferme de serveurs. Il existe differents types d'algorythme de repartition (scheduler), le plus courant etant le Round Robin (répartition tournante). Une variante plus interessante etant le Weighted Round Robin qui permet de prioritiser les serveurs de la ferme n'ayant peu de charge.
Configuration de ldirector
Exemple d'un fichier de configuration de ldirector, l'adresse IP pour atteindre le serveur web est 10.156.249.111. Le serveur ldirectord redirige ensuite les requetes vers 192.168.1.1 et 192.168.1.2 qui sont les 2 serveurs web sur un reseau distinct (le repartiteur ayant bien sur une interface sur ce reseau).
Une page de test disposée à la racine des serveurs web permet à ldirector de s'assurer que le service http répond correctement.
checktimeout = 3 checkinterval = 1 autoreload = yes #logfile = /var/log/ldirectord.log quiescent = yes
virtual=10.156.249.111:80
real=192.168.1.1:80 real=192.168.1.2:80 service=http request="test_ha.html" receive="Test Page" scheduler=rr persistent=600 protocol=tcp checktype=negociate checkport=80
On peut ensuite démarrer le service ldirectord:
service ldirectord start
Verification avec ipvsadm
Et on peut verifier l'etablissement des règles de repartition grace à la commande ipvsadm (à installer si besoin, package ipvsadm):
ipvsadm -L -n
Ce qui donnerait pour notre exemple:
[root] # ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags
- > RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.156.249.111:80 rr persistent 600
- > 192.168.1.2:80 Route 1 0 0
- > 192.168.1.1:80 Route 1 0 0
Configuration des serveurs
Configuration réseau
Dans le cas d'un LVS avec une réponse direct sans re-passer par le repartiteur, les serveurs de la ferme recoivent les requetes avec comme IP de destination l'adresse virtuelle configurée sur le repartiteur. Il faut donc ajouter cette adresse à l'interface loopback des serveurs pour qu'ils repondent aux requetes.
Fichier /etc/sysconfig/network-scripts/ifcfg-vip
DEVICE=lo:0 IPADDR=10.156.249.111 NETMASK=255.255.255.255 ONBOOT=yes
Configuration du noyau
Pour eviter que le noyau Linux réponde au requetes ARP demandant qui possede l'adresse virtuelle il faut parametrer les options suivantes du noyau dans le fichier /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce = 2 net.ipv4.conf.eth1.arp_ignore = 1 net.ipv4.conf.eth1.arp_announce = 2 net.ipv4.conf.eth0.arp_announce = 2
* arp_ignore = 1 Répondre aux requêtes ARP sur ethX, uniquement si l’adresse demandée est celle configurée sur cette interface, donc ignore les requêtes avec IP destination correspondant à la VIP
* arp_announce = 2 Envois des requêtes ARP sur ethX, uniquement avec l’adresse source IP primaire de l’interface eth1, mais jamais avec la VIP comme adresse IP source.