Repartition de charge basique avec ldirector

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.

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

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

  1. > RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 10.156.249.111:80 rr persistent 600

  1. > 192.168.1.2:80 Route 1 0 0
  2. > 192.168.1.1:80 Route 1 0 0

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

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.

  • repartition_de_charge_basique.txt
  • Dernière modification : 2012/10/30 22:47
  • de 127.0.0.1