La répartition de charge (load balancing en anglais, littéralement équilibrage de charge) est une technique utilisée en informatique pour distribuer un travail entre plusieurs processus, ordinateurs, disques ou autres ressources.
C'est une forme d'optimisation. Les avantages sont nombreux :
Augmentation de la qualité des services.
Amélioration des temps de réponse des services.
Capacité à palier la défaillance d'une ou de plusieurs machines.
Possibilité d'ajouter des serveurs sans interruption de service.
Le principe de base consiste à interposer entre les consommateurs de la ressource et le pool de ressources un dispositif (le répartiteur) qui connaît l'état d'occupation de chaque ressource et qui est capable de diriger le consommateur vers la ressource la moins occupée, ou la plus facilement accessible. Les ressources peuvent ne pas avoir la même capacité à satisfaire les besoins du consommateur (en vitesse de traitement, en bande passante, etc.), ce qui influe sur le mode de calcul du répartiteur.
Un exemple de répartition de charge de type Round-robin est effectué au niveau des serveurs DNS : ainsi, pour un nom de domaine précis, le serveur DNS possède plusieurs adresses IP. À chaque requête, le serveur DNS choisit l'adresse IP à inclure dans la réponse de manière à ce que chaque adresse IP soit présente dans les réponses de manière équitable. Les différents accès au nom de domaine sont par conséquent répartis équitablement entre les différentes adresses IP.
Round Robin :
Round-robin est un algorithme d'ordonnancement courant dans les systèmes d'exploitation. Ce dernier attribue des tranches de temps à chaque processus en proportion égale, sans accorder de priorité aux processus.
Chaque processus reçoit du temps processeur appelé "quantum". Quand l'algorithme change de processus, cela prend du temps (de l'ordre de 1 ms). Il faut donc trouver le juste milieu entre:
Un quantum court : changements de processus réguliers donc perte d'efficacité
Un quantum long : le temps de réponse sera allongé
Solution pour un réseau :
Round Robin
ou
Linux virtual server : Site officiel de Linux Virtual Server :
http://www.linuxvirtualserver.org
Mettre en place une solution de clustering et de load balancing permet d’accroître la disponibilité de votre application tel qu’un serveur web ou encore un serveur ftp. Pour effectuer cela, il existe plusieurs techniques :
disposer d’un routeur de couche 4
de mettre en place l’option Round Robin sur votre serveur DNS
A l’aide de logiciel tel que Linux Virtual Server (LVS)
Fonctionnement LVS
LVS est un logiciel qui travaille sur les couches 3 et 4. Il fait des redirections sur différentes adresses IP et sur différents ports TCP. Nous pourrions dire que c’est un Round Robin évolué.
En effet, si l’on fait une symétrie entre LVS et Round Robin, dans le rôle du serveur ce sera le load balancer, et pour le reste cela reste la même chose.
Ainsi, lorsque l’on effectue une requête au load balancer c’est lui qui va déterminer quel serveur va répondre, en fonction de sa table répertoriant les serveurs réels et les services du serveur. Il se peut que ce load-balancer peut tomber en panne alors vous pouvez mettre un second load-balancer pour plus de sécurité. Ces deux répartiteurs de charge sont reliés par heartbeat. Les répartiteurs de charge forment un cluster, et chaque machine du cluster s’appelle un node.
Quel est l’intérêt par rapport à l’option Round Robin d’un serveur DNS ? Cela permet une meilleure adaptation au réseau et aux pannes car si un serveur réel tombe en panne, la table du load balancer est directement mis a jour par l’intermédiaire d’un logiciel nommé mon. De plus il existe beaucoup de logiciel de surveillance pour que votre application soit disponible à 99,9%.
(Pour être plus complet aller voir le site indiqué sur la première page)
Les différents algorithmes de LVS
LVS peut fonctionner sur tous les systèmes, du moment que celui-ci puisse fournir le service adéquat (comme http) car la répartition de charge se paramètre avec IPVS.
Il existe trois manières de faire du load balancing avec LVS :
1) En utilisant le NAT
2) En utilisant l’IP tunneling
3) En utilisant le routage direct
1) Le NAT
On dit qu'un routeur fait du Network Address Translation (NAT) (ce qu'on peut traduire de l'anglais en « traduction d'adresse réseau ») lorsqu'il fait correspondre les adresses IP internes non-uniques et souvent non routables d'un intranet à un ensemble d'adresses externes uniques et routables. Ce mécanisme permet notamment de faire correspondre une seule adresse externe publique visible sur Internet à toutes les adresses d'un réseau privé, et pallie ainsi la carence d'adresses IPv4 d'Internet.
Pour le cache ARP la solution la plus simple est en LVS- NAT. Ainsi pas besoin de gérer le cache ARP. Mais elle est limité car le serveur de répartition est durement mis à l’épreuve étant donné qu’il traite les paquets entrants, les réécrit et les transmet aux serveurs réels, puis reçoit leur réponse, la réécrit à nouveau avant de la renvoyer au client.
2) L’IP tunneling
ITP (Internet Tunneling Protocol) est un protocole (couche 3 du modèle OSI) permettant le transport de données sécurisées sur un réseau IP
ITP prend en charge la notion de NAT, il a été réalisé dans le but de fonctionner avec le protocole IPv6 tout en étant adapté pour l'actuel protocole IP : IPv4.
Son but est d'assurer l'intégrité et la confidentialité des données : le flux ne pourra être compréhensible que par le destinataire final (chiffrement) et la modification des données par des intermédiaires ne pourra être possible (intégrité).
ITP peut être un composant de VPN pour sa sécurité ou peut-être utilisé pour la répartition des charges.
L’intérêt est que l’IP Tuneling évite le point de congestion, c'est-à-dire que toutes les requêtes n’ont pas besoin de passer par le serveur de répartition aussi souvent qu’en mode LVS-NAT.
3) Le routage direct
Cette technique est la même que l’IP tuneling sauf que les serveurs réels se trouvent dans un même réseau local.
L’intérêt est le même que l’IP tuneling (évite le point de congestion) et l’encapsulation IP avec adressage IP virtuelle.
La solution LVS-DR (Direct Routing) est plus compliqué car il faut gérer le cache ARP, mais est beaucoup plus performante car elle ne monopolise pas le serveur de répartition dans les deux sens. Les requêtes ne sont pas retraduites lors des réponses des serveurs réels vers le client.
Il y a d'autres outils comme Heartbeat et Ldirector qui peuvent renforcer le LVS:
- Heartbeat permet d'avoir plus de deux load balancers; si le load balancer primaire tombe en panne, le secondaire prend le relais automatiquement sans interruption de service
- Ldirector permet de verifier si les serveurs reels sont disponibles; si un des serveurs reels tombe en panne, il est automatiquement retire du LVS.
Les algorithmes de routage :
Différents algorithmes de répartition de la charge sont implémentés dans LVS. Ils définissent l'ordre dans lequel le load-balancer affectera les requêtes des clients aux différents reals servers proposant un service. Chaque service hébergé dans une ferme de serveurs LVS peut posséder son propre algorithme de répartition de charge. Voici ces algorithmes existants :
Round-Robin Scheduling : Par exemple, dans une configuration avec 2 real-servers, la première requête sera affectée au 1er serveur, la seconde au second serveur, la 3ème requête au 1er server, et ainsi de suite en boucle.
Weighted Round-Robin Scheduling : même technique, mais les real-serveurs peuvent être affectés par des poids, pour tenir compte des différentes capacités de traitement.
Least-Connection Scheduling : le load-balancer possède une table des connections actives. Il renverra toute nouvelle requête au serveur possédant le moins de connexions actives, dynamiquement.
Weighted Least-Connection Scheduling : même idée que l'algorithme précédent, en ayant la possibilité d'attribuer des poids aux serveurs.
Locality-Based Least-Connection Scheduling : Le load balancer choisit un real-server dans un groupe en fonction de l'adresse IP de destination. Il est utilisé dans les clusters de cache.
Locality-Based Least-Connection with Replication scheduling : Idem que le précedent, avec une fonctionnalité supplémentaire : si tous les serveurs du groupe sont surchargés ou indisponibles, il choisit un serveur dans un autre groupe pour l'affecter au 1er groupe de serveurs.
Destination Hashing Scheduling : affecte la requête arrivant à un serveur d'un groupe fixé dans une table de hashage, en fonction de l'adresse IP de destination.
Source Hashing Scheduling : affecte la requête à un real-server en fonction de l'adresse source.
- Le Round-Robin (RR) considère avec égalité tous les serveurs réels sans se soucier du nombre de connections entrantes ou du temps de réponse de chacun. Il est qualifié d'algorithme de répartition sans condition d'état.
- Le Weighted Round-Robin (WRR) ajoute à la boucle du RR la notion de poids. Ainsi, il est plus performant que ce dernier dans le cas ou les capacités de traitement sont différentes. Cependant, il peut mener à une mauvaise gestion de la charge lorsque les puissances varient beaucoup. Il est en effet fréquent que les grosses requêtes soient dirigées vers le même serveur, déséquilibrant ainsi la balance.
- Le Least-Connection (LC) dirige les requêtes vers le serveur ayant le moins de connexions établies. Il est dit dynamique, comptant le nombre de connexion de chaque serveur pour estimer sa charge. Il garde un état du nombre de connexion, incrémentant le compteur lors de l'assignation ou le décrémentant lors d'une déconnexion ou d'un timeout. Le Least-Connection (LC) est idéal lorsque les serveurs ont une puissance de traitement similaire.
Note: TCP produit un phénomène de cache. L'état TIME_WAIT, d'une durée d'environ 2 minutes par défaut, est un état durant lesquels les requêtes reçues sont “conservées” afin d'empêcher que les paquets non-fiables ou avec des erreurs ne soient à nouveau traités. Cela surcharge ainsi virtuellement le serveur. Pendant une période d'attente de 2 minutes, un site surchargé peut recevoir des centaines de connexions. Ainsi, un serveur A (imaginons le 2 fois plus puissant qu'un serveur B) peut garder des requêtes déjà exécutées dans un état de TIME_WAIT alors que le serveur B aura du mal à se défaire de sa centaine de connexion en cours.
- Ainsi, le Weighted Least Connexion (WLC) gère bien mieux la répartition entre serveurs de puissances différentes. Les serveurs de la ferme sont classés par rapport à leur poids, et un pourcentage leur est attribué. Le système de répartition du LC s'y ajoute ensuite.
Voilà ce que j'ai trouvé pour le moment

Bonne lecture
