Tutoriel HAProxy pour débutants

Tutoriel Haproxy Pour Debutants



À mesure que votre application évolue, la nécessité d’ajouter davantage de serveurs pour gérer davantage de trafic apparaît. Plus votre application reçoit de trafic, plus les chances d'être confrontée à des temps d'arrêt en cas de surcharge du serveur sont élevées. Cependant, il existe des outils tels que HAProxy qui vous permettent de définir la manière dont le trafic est géré pour équilibrer la charge sur votre serveur. L'idée est de s'assurer qu'aucun serveur ne soit surchargé. High Availability Proxy est un logiciel open source conçu pour offrir un équilibrage de charge fiable tout en agissant comme proxy inverse pour les applications TCP/HTTP.

HAProxy s'efforce de réduire la surcharge de n'importe quel serveur, et y parvient en distribuant un trafic pour garantir qu'aucune surcharge de serveur, mais que d'autres serveurs soient disponibles. Une plateforme comme Instagram a un trafic massif en raison des requêtes envoyées par seconde, d'où la nécessité d'utiliser HAProxy pour définir le frontend, le backend et les auditeurs des serveurs afin d'éviter les surcharges.

Pourquoi utiliser HAProxy

Avant de découvrir l'installation et la configuration de HAProxy, vous devez comprendre pourquoi nous en avons besoin, grâce aux fonctionnalités qu'il offre. Voici les principales fonctionnalités de HAProxy :







  1. L'équilibrage de charge - Avec HAProxy, vous pouvez répartir confortablement le trafic sur différents serveurs pour éviter de surcharger un seul serveur. De cette façon, votre application ne sera confrontée à aucun problème de temps d’arrêt et vous bénéficierez d’une réactivité, d’une fiabilité et d’une disponibilité plus rapides.
  2. Journalisation et surveillance – Vous obtiendrez des journaux de surveillance détaillés pour vos serveurs pour vous aider à résoudre les problèmes. En outre, HAProxy dispose d'une page de statistiques où vous pouvez obtenir des analyses de performances en temps réel pour votre équilibreur de charge.
  3. Bilans de santé – Même vos serveurs nécessitent un bilan de santé pour déterminer leur état. HAProxy exécute fréquemment des vérifications de l'état pour connaître l'état de votre serveur afin d'améliorer sa fiabilité. Si un serveur défectueux est détecté, il redirige le trafic vers un autre serveur.
  4. Proxy inverse – Une façon d’améliorer la sécurité consiste à masquer la structure interne. Heureusement, HAProxy vous permet de recevoir le trafic des clients et de l'acheminer vers les serveurs appropriés. De cette façon, votre structure interne est cachée aux yeux du pirate informatique.
  5. ACL (listes de contrôle d'accès) - Avec HAProxy, vous pouvez définir la manière dont le routage du trafic doit s'effectuer en utilisant divers critères tels que les chemins, les en-têtes et les adresses IP. Ainsi, définir une logique de routage personnalisée pour votre trafic devient plus facile.
  6. Résiliation SSL – Par défaut, SSL/TLS est déchargé par les serveurs backend, ce qui entraîne une réduction des performances. Cependant, avec HAProxy, la terminaison SSL/TLS se produit au niveau de l'équilibreur de charge, déchargeant ainsi la tâche sur les serveurs backend.

Installation de HAProxy

Jusqu'à présent, nous avons défini ce qu'est HAProxy et discuté des fonctionnalités qu'il offre pour vous aider à comprendre pourquoi vous en avez besoin pour votre application. L'étape suivante consiste à comprendre comment commencer en l'installant sur votre système.



Si vous utilisez les systèmes Ubuntu ou Debian, HAProxy peut être installé à partir du gestionnaire de packages APT. Exécutez la commande suivante :



$ sudo apt mise à jour
$ sudo apt installer haproxy

De même, si vous utilisez des systèmes basés sur RHEL ou CentOS, HAProxy est disponible à partir du gestionnaire de packages « yum ». Exécutez les commandes suivantes :





$ sudo miam mise à jour
$ sudo miam installer haproxy

Dans notre cas, nous utilisons Ubuntu. Ainsi, nous avons notre commande comme suit :



Nous pouvons ensuite vérifier sa version pour nous assurer que nous avons réussi à installer HAProxy avec succès.

$ haproxy --version

Comment configurer HAProxy

Une fois HAProxy installé, vous pouvez maintenant ouvrir son fichier de configuration ( / etc/haproxy/haproxy.cfg) et définissez les paramètres que vous souhaitez utiliser pour votre équilibreur de charge.

Ouvrez le fichier de configuration à l'aide d'un éditeur tel que nano ou vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Vous obtenez un fichier de configuration comme celui-ci :

À partir du fichier de configuration, vous remarquerez qu'il comprend deux sections principales :

  1. mondial - Il s'agit de la première section du fichier et ses valeurs ne doivent pas être modifiées. Il contient les paramètres de processus qui définissent le fonctionnement du HAProxy. Par exemple, il définit les détails de journalisation et les groupes ou utilisateurs pouvant exécuter les fonctions HAProxy. Notez que dans ce fichier de configuration, vous ne pouvez avoir qu'une seule section globale et ses valeurs doivent rester inchangées.
  1. valeurs par défaut – Cette section contient les valeurs par défaut des nœuds. Par exemple, vous pouvez ajouter les délais d'attente ou le mode opérationnel de votre HAProxy dans cette section. En outre, il est possible d'avoir de nombreuses sections par défaut dans votre fichier de configuration HAProxy.

Voici un exemple de section « Par défaut » :

Dans l'image donnée, le mode définit comment votre HAProxy gérera les requêtes entrantes. Vous pouvez définir le mode sur HTTP ou TCP. Quant au délai d'attente, il précise combien de temps HAProxy doit attendre. Par exemple, le délai d'attente de connexion est le temps d'attente avant qu'une connexion back-end ne soit établie. Le délai d'attente du client correspond à la durée pendant laquelle HAProxy doit attendre qu'un client envoie les données. Le serveur de délai d'attente est le temps d'attente pour que le serveur approprié envoie les données qui seront transmises au client. La façon dont vous définissez les valeurs par défaut est très importante pour améliorer le temps de réponse de votre application.

Vous devez définir trois autres sections pour que votre équilibreur de charge fonctionne comme prévu.

  1. l'extrémité avant - Cette section contient les adresses IP que vous souhaitez que vos clients utilisent pour établir la connexion.
  2. back-end – Il montre les pools de serveurs qui gèrent les requêtes telles que définies dans la section frontend.
  3. écouter - Il est utilisé successivement lorsque vous souhaitez acheminer un groupe de serveurs spécifique. Cette section combine les tâches du frontend et du backend.

Prenons un exemple

Pour cet exemple, nous définissons le frontend pour utiliser le localhost avec un port spécifique. Ensuite, nous le lions au backend qui exécute l'hôte local, puis exécutons un serveur Python pour tester si tout fonctionne comme prévu pour l'équilibrage de charge. Suivez les étapes indiquées.

Étape 1 : configuration de la section des valeurs par défaut

Dans la section « Valeurs par défaut », nous définissons les valeurs à partager entre les nœuds. Dans notre cas, nous définissons le mode sur HTTP et définissons les délais d'attente pour le client et le serveur. Vous pouvez ajuster l'heure en fonction de vos besoins.

N'oubliez pas que toutes ces modifications se trouvent dans la configuration HAProxy située dans « /etc/haproxy/haproxy.cfg ». Une fois la section des valeurs par défaut configurée, définissons le frontend.

Étape 2 : configuration de la section frontend

Dans la section frontend, nous définissons la manière dont nous souhaitons que l'application ou le site Web soit accessible par les clients en ligne. Nous donnons les adresses IP de l'application. Mais pour ce cas, nous travaillons avec le localhost. Par conséquent, notre adresse IP est l'adresse de secours 127.0.0.1 et nous souhaitons accepter les connexions via le port 80.

Vous devez ajouter le mot-clé « bind » qui fait office d'écouteur de l'adresse IP sur le port spécifié. L'adresse IP et le port que vous définissez sont ceux que l'équilibreur de charge utilise pour accepter les demandes entrantes.

Après avoir ajouté les lignes précédentes dans votre fichier de config, il faut redémarrer le « haproxy.service » avec la commande suivante :

$ sudo systemctl redémarrer haproxy

À ce stade, nous pouvons essayer d'envoyer les requêtes à notre site Web en utilisant la commande « curl ». Exécutez la commande et ajoutez l'adresse IP cible.

$ curl

Puisque nous n'avons pas encore défini comment sera le backend de notre HAProxy, nous obtenons une erreur 503 comme indiqué ci-dessous. Bien que l'équilibreur de charge ait réussi à recevoir les requêtes, aucun serveur n'est actuellement disponible pour les gérer, d'où l'erreur.

Étape 3 : configuration du backend

La section backend est l'endroit où nous définissons les serveurs qui traiteront toutes les demandes entrantes. L'équilibreur de charge se réfère à cette section pour savoir comment il doit répartir les requêtes entrantes afin de garantir qu'aucun serveur ne soit surchargé.

L’erreur 503 que nous avons eue plus tôt était due au fait que nous n’avions aucun backend pour gérer les requêtes. Commençons par définir le « default_backend » pour gérer les requêtes. Vous le définissez dans la section frontend. Nous l'avons nommé « linux_backend » pour ce cas.

Ensuite, créez une section backend portant le même nom que celle définie dans la section frontend. Vous devez ensuite utiliser le mot clé « serveur » suivi du nom de votre serveur et de son adresse IP. L'image suivante montre que nous avons défini le serveur « linuxhint1 » en utilisant l'IP 127.0.0.1 et le port 8001 :

Vous pouvez disposer d’un pool de serveurs backend, mais nous n’en avons défini qu’un seul pour ce cas. Assurez-vous d'enregistrer le fichier. Il faut à nouveau redémarrer le service HAProxy.

Pour tester l'équilibreur de charge HAProxy créé, nous créons un serveur Web à l'aide de Python3 pour lier les ports backend à l'aide de l'adresse IP que nous avons spécifiée. Nous exécutons la commande comme suit :

$ python3 -m http.server 8001 --bind 127.0.0.1

Assurez-vous de remplacer les valeurs pour qu'elles correspondent à votre adresse IP et au port que vous souhaitez lier. Remarquez comment le serveur Web est créé et écoute toutes les demandes entrantes.

Sur un autre terminal, utilisons la commande « curl » pour envoyer une requête au serveur.

$ curl

Contrairement à la façon dont nous avons obtenu l'erreur 503 plus tôt, qui montre qu'aucun serveur n'est disponible pour traiter la demande, nous obtenons cette fois une sortie qui confirme que notre équilibreur de charge HAProxy fonctionne.

Si vous revenez au terminal précédent où nous avons créé le serveur Web, vous verrez que nous obtenons une sortie de réussite 200 qui confirme que HAProxy a reçu la demande et l'a traitée en l'envoyant au serveur défini dans notre section backend.

C'est ainsi que vous pouvez définir un simple HAProxy pour votre site Web ou votre application.

Travailler avec des règles

Avant de terminer ce didacticiel HAProxy pour débutants, parlons rapidement de la façon dont vous pouvez définir les règles pour guider la manière dont les requêtes seront traitées par l'équilibreur de charge.

En suivant les mêmes étapes que précédemment, laissons notre section par défaut intacte et définissons différentes adresses IP dans la section frontend. Nous lions la même adresse IP mais acceptons les connexions provenant de différents ports.

De plus, nous avons notre « default_backend » et un autre « use_backend » qui est un pool de serveurs différent que nous utiliserons en fonction du port d'où proviennent les requêtes. Dans la configuration suivante, toutes les requêtes via le port 81 sont traitées par les serveurs dans « Linux2_backend ». Toutes les autres demandes sont traitées par « default_backend ».

Nous créons ensuite les sections backend telles que définies dans le frontend. Notez que pour chaque backend, nous avons un serveur différent que nous spécifions d'utiliser pour gérer les requêtes.

Redémarrez rapidement le service HAProxy.

Créons le serveur Web à l'aide de Python3 et lions les requêtes sur le port 8002 qui est le serveur backend alternatif.

Lors de l'envoi de requêtes, nous spécifions le port comme 81 pour inciter l'équilibreur de charge à envoyer les requêtes au serveur alternatif qui n'est pas celui par défaut.

En revérifiant notre serveur Web, nous pouvons voir qu'il parvient à recevoir et à traiter les demandes et donne une réponse 200 (succès).

C'est ainsi que vous pouvez définir les règles pour guider la manière dont votre équilibreur de charge recevra et traitera les demandes.

Conclusion

HAProxy est une solution idéale pour l'équilibrage de charge pour les applications TCP/HTTP. Une fois installé, vous pouvez facilement modifier le fichier de configuration pour définir les sections par défaut, frontend et backend afin de guider le fonctionnement de votre équilibreur de charge. Cet article est un guide du débutant sur HAProxy. Cela a commencé par définir HAProxy et ses fonctionnalités. Ensuite, il a expliqué comment configurer HAProxy et a conclu en donnant un exemple sur la façon d'utiliser HAProxy comme équilibreur de charge.