Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

HAProxy pour la rapidité et la sécurité :
Répartition de charge et mandataire applicatif
Un article de Willy Tarreau pour MISC
Article mis en ligne le 14 septembre 2017

par Laurent Bloch

Les sites Web importants dont le fonctionnement est vital pour l’entreprise sont habituellement répartis sur plusieurs serveurs, de préférence dans des centres de calcul (datacenters) géographiquement distincts, c’est une précaution essentielle. Une entreprise dont l’activité est mondiale aura de surcroît intérêt à recopier son site sur des serveurs répartis au plus près de ses clients actuels ou espérés, sur les différents continents. Cette répartition pose d’intéressants problèmes de synchronisation et de sauvegarde des données, ainsi que d’aiguillage des requêtes des internautes vers le serveur le mieux à même de répondre vite et bien. Et bien sûr en cas de panne d’un serveur il faut rediriger le trafic vers un serveur survivant judicieusement choisi. L’ensemble des techniques qui permettent de répartir le trafic des requêtes entre différents serveurs se nomme répartition de charge (load balancing).

Willy Tarreau a consacré un article de la revue MISC [1] au logiciel HAProxy, introduit en 2001 et depuis régulièrement perfectionné, qui procure les fonctions d’équilibrage de charge et de mandataire applicatif pour les flux Http et TCP ; il est disponible sous licence GPL v2, ou sous licence commerciale, ou incorporé à des boîtiers (appliances) qu’il est possible d’installer directement dans un réseau.

Willy Tarreau expose pour commencer les problèmes soulevés par la répartition de charge. Un algorithme naïf, par exemple choix du serveur au hasard, ou à tour de rôle (round robin), risque d’accroître l’indisponibilité apparente du système au fur et à mesure que l’on ajouterait des serveurs, parce que la probabilité de tomber sur un serveur en panne augmenterait. Un bon système de répartition doit donc comporter une fonction de détection des pannes de serveurs.

Les sites Web marchands à fort trafic sont visés par de très nombreuses attaques qui viennent s’ajouter au risque normal de défaillance technique d’un élément de l’infrastructure : un système de répartition de charge doit donc non seulement aiguiller chaque requête vers le serveur le plus à même de répondre rapidement, mais aussi s’assurer qu’il est en bon état de marche, tant du point de vue du matériel que de celui du logiciel, ce qui suppose d’aller plus loin que le simple ping, d’émettre quelques interrogations de la base de données et de vérifier la validité des réponses obtenues.

Dans une configuration telle que celles évoquées ci-dessus, le répartiteur de charge joue le rôle de passerelle d’accès au réseau ; sa panne éventuelle est donc un risque catastrophique. Éviter le risque peut se faire par la redondance, en installant plusieurs répartiteurs. Willy Tarreau nous explique que la mise en œuvre de la réplication des répartiteurs est beaucoup plus simple que ne le serait celle des serveurs, parce qu’un répartiteur ne conserve en principe aucune donnée de contexte. Il est possible, pour mettre en place une telle redondance, de s’appuyer sur le protocole Virtual Router Redundancy Protocol (protocole de redondance de routeur virtuel, VRRP), dont le but est d’augmenter la disponibilité de la passerelle par défaut des hôtes d’un même réseau. Le principe est de définir la passerelle par défaut pour les hôtes du réseau comme étant une adresse IP virtuelle référençant un groupe de routeurs.

Dans le cas de sites répartis à la surface du globe, le système de répartition doit aussi déterminer la position géographique de l’émetteur de la requête pour le diriger vers un serveur proche. Pour ce faire existent principalement deux méthodes : par l’identification du résolveur DNS qui a émis la demande de résolution, ou par la localisation de l’adresse IP du client. La première méthode est plus rapide, la seconde plus précise, Willy Tarreau conseille une combinaison des deux, parce que dans le cas de gros FAI à couverture internationale la localisation par le DNS est trop imprécise.

Notre auteur souligne que la combinaison des méthodes de répartition de charge et de la redondance des passerelles contribue non seulement à l’optimisation des temps de réponse des serveurs répartis, mais aussi à la robustesse de l’ensemble, dans la mesure où un équipement en panne peut grâce à ces techniques être automatiquement et rapidement suppléé par un autre élément de l’infrastructure. Le système de répartition joue ainsi un rôle important pour l’élaboration des plans de reprise d’activité après incident (PRA) et des plans de continuité d’activité (PCA).

La fonction de mandataire de HAProxy assure l’isolation protocolaire, et donc la protection, du serveur Web de la façon suivante : il est installé en coupure sur l’accès réseau au serveur, en d’autres termes il établit deux connexions TCP indépendantes, l’une vers le serveur, l’autre vers le client. Ainsi, écrit Willy Tarreau, « les attaques protocolaires employant par exemple des paquets malformés ou de l’usurpation d’adresse IP (IP spoofing) ne seront jamais relayées aux serveurs. Cela veut dire également que les serveurs peuvent être hébergés sur un réseau privé non accessible d’Internet, ce qui limite très fortement les risques d’intrusions, de vol de données, de récupération de codes malveillantsà l’extérieur, ou de rebonds pour attaquer d’autres sites, vu que le seul trafic qui passe est celui pour lequel des règles précises ont été configurées sur le répartiteur de charge ».