La répartition de charge  est un ensemble de techniques permettant de distribuer une charge de travail entre différents ordinateurs d’un groupe. Ces techniques permettent à la fois de répondre à une charge trop importante d’un service en la répartissant sur plusieurs serveurs, et de réduire l’indisponibilité potentielle de ce service que pourrait provoquer la panne logicielle ou matérielle d’un unique serveur.

Ces techniques sont par exemple très utilisées dans le domaine des services HTTP où un site à forte audience doit pouvoir gérer des centaines de milliers de requêtes par seconde.

La répartition de charge est issue de la recherche dans le domaine des ordinateurs parallèles. L’architecture la plus courante est constituée de plusieurs répartiteurs de charge (genres de routeurs dédiés à cette tâche), un principal, et un ou plusieurs de secours pouvant prendre le relais, et d’une collection d’ordinateurs similaires effectuant les calculs. On peut appeler cet ensemble de serveurs une ferme de serveurs (anglais server farm) ou de façon plus générique, une grappe de serveurs (anglais server cluster). On parle encore de server pool (littéralement, « groupe de serveurs »).

Réglages et paramètres des répartiteurs de charge

Sur les répartiteurs de charge les plus courants, on peut pondérer la charge de chaque serveur indépendamment. Cela est utile lorsque, par exemple, on veut mettre, à la suite d’un pic ponctuel de charge, un serveur de puissance différente dans la grappe pour alléger sa surcharge. On peut ainsi y ajouter un serveur moins puissant, si cela suffit, ou un serveur plus puissant en adaptant le poids.

Il est généralement également possible de choisir entre plusieurs algorithmes d’ordonnancement :

  • Round-Robin : C’est l’algorithme le plus simple, une requête est envoyée au premier serveur, puis une au second, et ainsi de suite jusqu’au dernier, puis un tour est recommencé avec une première requête au premier serveur, etc.
  • Round-Robin pondéré : Les serveurs de poids fort prennent les premières requêtes et en prennent davantage que ceux de poids faible.
  • Moins de connexion : Assigne davantage de requêtes aux serveurs en exécutant le moins.
  • Moins de connexion, pondéré : Assigne davantage de requêtes aux serveurs en exécutant le moins en tenant compte de leur poids.
  • Hachage de destination : Répartit les requêtes en fonction d’une table de hachage contenant les adresses IP des serveurs.
  • Hachage de source : Répartit les requêtes en fonction d’une table de hachage basée sur les adresses IP d’où proviennent les requêtes.

Il y a deux façons de router les paquets, lors des requêtes :

  • Network address translation (NAT, traduction d’adresse réseau) : Dans ce cas, le répartiteur reçoit les requêtes, les renvoie aux différents serveurs de calcul en adresse IP privée, reçoit les réponses et les renvoie aux demandeurs. Cette technique est très simple à mettre en place, mais demande au répartiteur d’assumer toute la charge du trafic réseau.
  • Routage direct (DR, Direct Routing) : Dans ce cas, les requêtes arrivent sur le répartiteurs, sont renvoyées aux serveurs de calcul, qui renvoient directement les réponses au demandeur. Cela oblige à monopoliser davantage d’adresses IP (les adresses IPv4 sont limitées et de plus en plus difficiles à obtenir auprès du RIPE), mais allège considérablement le trafic réseau du répartiteur de charge et enlève donc par là-même un goulot d’étranglement. Dans la majorité des cas, pour le HTTP, les requêtes (URL et quelques variables) sont beaucoup plus petites que les réponses, qui sont généralement des fichiers dynamiques (XHTML) produits par un langage de script ou des fichiers statiques (JavaScript, CSS, images, sons, vidéos).

Le protocole Virtual Router Redundancy Protocol (VRRP, protocole de redondance de routeur virtuel), permet de gérer la reprise sur panne d’un des répartiteurs de charge.

Mise en œuvre

La répartition de charge permet de distribuer des applications à travers un réseau. Cette technique permet de distribuer n’importe quel service entre différents ordinateurs et emplacements géographiques. Elle est principalement utilisée pour les serveurs web, ainsi que les points d’accès VPN, les proxy ou les pare-feu.

La visite d’un site web provoque l’émission de requêtes HTTP. Chaque requête contient le nom du serveur à qui elle est destinée, qui devra alors la traiter. Le travail du serveur peut être allégé en envoyant les requêtes suivantes à d’autres serveurs à tour de rôle. Une technique consiste à faire correspondre le nom du serveur avec plusieurs ordinateurs en modifiant continuellement les tables de correspondance du service DNS. La distribution par le DNS ne tient cependant pas compte de l’état des serveurs, en particulier de la disponibilité et des pannes éventuelles. Les demandes peuvent alors être envoyées à des serveurs qui sont déjà 100 % occupés, ou à des serveurs en panne. L’utilisation d’un dispositif de répartition permet de résoudre ces deux problèmes.

Le répartiteur peut être un routeur, un switch, un système d’exploitation ou un logiciel applicatif. Il répartit les demandes en les distribuant uniquement aux serveurs disponibles. Le destinataire des demandes peut également être imposé : dans un site de vente en ligne, lorsqu’une demande sécurisée est faite par un acheteur – par exemple l’achat d’un produit – les demandes suivantes provenant de cet acheteur seront toutes envoyées au même serveur. Le répartiteur simule la présence d’un serveur : les clients communiquent avec le répartiteur comme s’il s’agissait d’un serveur. Celui-ci répartit les demandes provenant des clients, les transmets aux différents serveurs. Lorsqu’un serveur répond à une demande, celle-ci est transmise au répartiteur ; puis le répartiteur transmet la réponse au client en modifiant l’adresse IP de l’expéditeur pour faire comme si cette réponse provenait du serveur.

Les machines de la ferme doivent avoir accès au même lot de fichiers, ceci peut être réalisé à l’aide d’un système de fichiers distribué ou à l’aide d’un réseau de stockage (abr. SAN). Les serveurs ne vérifient pas individuellement les sessions parce que, du fait de la répartition, plusieurs serveurs peuvent être impliqués lors d’une même session.

Gateway Load Balancing Protocol

Gateway Load Balancing Protocol est un protocole propriétaire Cisco permettant de la redondance et de la répartition de charge sur plusieurs routeurs en utilisant une seule adresse IP virtuelle, associée à plusieurs adresses MAC virtuelles.

Le protocole GLBP élit un Active Virtual Gateway (AVG) qui va répondre aux requêtes ARP pour l’adresse IP virtuelle. GLBP permet de donner un poids variable à chacun des routeurs participants pour la répartition de la charge entre ces routeurs. La charge est donc répartie par hôte dans le sous-réseau.

Par défaut, GLBP utilise l’adresse IP multicast 224.0.0.102 pour l’envoi des paquets Hello et le numéro de port UDP 3222. IPv6 est pris en charge à partir d’IOS 12.2(33) SXI.

Principe

Sur une architecture réseaux où il existe plusieurs pattes de sortie vers le WAN, le GLBP permet de faire de la répartition de charge (load balancing) par session et aussi de la redondance. Le GLBP se base sur une adresse IP virtuelle unique mais plusieurs adresses MAC virtuelles. Un des routeurs est élu AVG (active virtual gateway), mais il aura aussi et avec tous les autres routeurs le role d’AVF (active virtual forwarder), qui auront eux-mêmes une adresse MAC virtuelle.

Fonctionnement

Le client va envoyer ses trames sur l’adresse de gateway (virtuelle), et grâce aux requêtes ARP le routeur AVG va envoyer l’adresse MAC virtuelle du routeur choisi.