Formation
Vous souhaitez introduire dans votre infrastructure Web un serveur capable de gérer la répartition de charges en garantissant toujours des performances accrue ? C'est à ce moment que HAProxy intervient ! HAProxy est tout d'abord un produit français ! C'est une solution gratuite qui propose une mise en relation directe entre le client et le serveur en tant que Proxy. Sa réputation fut démarquée par sa flexibilité et ses performances, il est utilisé par de nombreux sites réputés comme Netflix, Stack Overflow, GitHub, mais encore Twitter.
Ăcrit en langage C, HAProxy est grandement utilisĂ© pour sa fonctionnalitĂ© de rĂ©partition de charge rĂ©seau (communĂ©ment appelĂ© load-balancing) qui permets de rĂ©partir les charges du trafic sur un site internet entre plusieurs machines qui seront positionnĂ©s derriĂšre le proxy. Il fournit un Ă©quilibreur de charge haute disponibilitĂ© pour les applications TCP et HTTP qui sâexĂ©cutent sur plusieurs serveurs.
Il propose également de nombreuses fonctionnalités additionnelles comme la protection des attaques directes, ajoutant ainsi une couche intermédiaire transparente entre le client et les véritables serveurs Web, pouvant donner ainsi à l'ajout d'un certificat SSL ou la mise en place d'un serveur WAF (Web Application Firewall).
Au lieu de se connecter à un serveur unique qui traite toutes les demandes, le client se connectera à une instance HAProxy, qui utilisera un proxy inverse pour transmettre la demande à l'un des points d'extrémité disponibles, sur la base d'un algorithme d'équilibrage de charge.
Pour rappel, un serveur reverse-proxy est un serveur que l'on va placer devant un ou plusieurs serveurs d'applications. Son rĂŽle principal est de fournir une passerelle d'accĂšs entre le rĂ©seau Internet et le rĂ©seau de serveur accessible en DMZ (rĂ©seau contenant des machines accessibles depuis Internet) oĂč sont hĂ©bergĂ©es les serveurs de ressources comme un serveur de messagerie, de jeu par exemple. L'avantage de disposer d'un serveur Reverse-Proxy est de permettre avec une seule adresse IP publique de "dispatcher" les diffĂ©rents serveurs de ressources en un serveur de gestion ouvert en front sur Internet.
Dans le schĂ©ma de reprĂ©sentation, un utilisateur lambda souhaite accĂ©der au site Web www.vemotech.fr, qui est un serveur Web interne. Il va dans un premier temps envoyer une requĂȘte Ă destination du reverse proxy, reprĂ©sentĂ© en vert entre la requĂȘte client et le firewall, puis la DMZ, qui se chargera d'associer le sous domaine www vers le serveur interne configurĂ© dans le reverse proxy.
Entre deux, un firewall effectue un contrÎle d'accÚs aux ressources nécessaires au serveur reverse proxy (services HTTPS & HTTPS) afin de gérer au mieux le niveau de sécurité du réseau DMZ. Enfin, en retour, l'utilisateur obtient en retour le site internet demandé. Le serveur reverse proxy ouvert sur Internet, avec redirection des ports HTTP (80) & HTTPS (443). Il est donc à noter que seul ce serveur sera accessible depuis Internet depuis les service HTTP & HTTPS et qu'un aucun cas l'internaute n'aura accÚs directement au serveur d'application hébergé dans la DMZ.
Maintenant que nous comprenons les composants de base utilisĂ©s dans lâĂ©quilibrage de charge, passons aux types de base de lâĂ©quilibrage de charge. Le principe du load balacing repose sur l'Ă©quilibre de charge et est grandement utile dans les cas oĂč un trop grand nombre de connexions simultanĂ©es survient sur un mĂȘme serveur, oĂč dans ce cas le site internet hĂ©bergĂ© dessus serait inaccessible.
HAProxy prends en charge pas mal d'algorithmes de Load Balacing comme le Round Robin, le HDR, Least, First, Source, URI...
Un environnement dâapplication Web simple sans Ă©quilibrage de charge peut ressembler Ă ce qui suit :
Dans cet exemple, l'utilisateur se connecte directement à votre serveur web, à l'adresse cosmotech.fr, et il n'y a pas d'équilibrage de charge entre le client et le serveur d'origine. Si le serveur web unique de CosmoTech tombe en panne, l'utilisateur ne pourra plus accéder au serveur web. En outre, si de nombreux utilisateurs essaient d'accéder simultanément au serveur Web et que celui-ci n'est pas en mesure de gérer la charge (soit en maintenance, hors-service, surcharge...), ils risquent d'avoir une expérience lente ou de ne pas pouvoir se connecter du tout. C'est pour cela que le principe du Load Balancing est né.
La façon la plus simple d'Ă©quilibrer la charge du trafic rĂ©seau vers plusieurs serveurs est d'utiliser l'Ă©quilibrage de charge de couche 4 (couche transport du modĂšle OSI). Cette mĂ©thode d'Ă©quilibrage de la charge permet d'acheminer le trafic utilisateur en fonction de la plage d'adresses IP et du port (par exemple, si une requĂȘte arrive pour https://cosmotech.cf, le trafic sera acheminĂ© vers le backend qui traite toutes les requĂȘtes pour cosmotech.fr sur le port 443).
L'utilisateur accĂšde Ă l'Ă©quilibreur de charge, qui transmet la demande de l'utilisateur au groupe de serveurs dorsaux web-backend. Quel que soit le serveur backend sĂ©lectionnĂ©, il rĂ©pondra directement Ă la demande de l'utilisateur. En gĂ©nĂ©ral, tous les serveurs du backend web doivent servir un contenu identique, sinon l'utilisateur risque de recevoir un contenu incohĂ©rent. Notez que les deux serveurs Web se connectent au mĂȘme serveur de base de donnĂ©es.
HAProxy propose un large panneau de fonctionnalité comme un service de Monitoring des services : il est possible de visualiser une série de statistiques du trafic entrant remontant vers les ressources Backend et en Frontend ; et une supervision des protocoles applicatifs comme le SMTP, SQL, LDAP...
Ce qui fait la force de HAProxy sont les performances qu'il propose : la plupart des serveurs Proxy comme Apache ou Nginx se repose sur un processus par connexion entrante client/serveur.
HAProxy gĂšre les connexions en un seul service et Ă©tablie une table des diffĂ©rentes connexions et vĂ©rifie que si une connexion client/serveur est Ă©tablie, sa connexion est enregistrĂ©e dans cette table. De mĂȘme si cette connexion est fermĂ©e, alors la table des connexions est mise Ă jour. Ce processus de gestion des connexions permets de fournir plus de performances pour plus de connexions entrantes sur HAProxy.