Comment configurer un équilibreur de charge HAProxy

0
216

HAProxy est un équilibreur de charge open source, capable d'équilibrer n'importe quel service basé sur TCP. Il est couramment utilisé pour équilibrer HTTP et peut aider à résoudre les problèmes de trafic sur votre serveur Web. Voici comment le configurer.

Qu'est-ce que HAProxy ?

Les équilibreurs de charge comme HAProxy vous permettent de répartir le trafic sur plusieurs serveurs, ce qui le rend plus facile à gérer. Au lieu de pointer votre adresse IP vers votre serveur Web, vous la pointez vers un serveur HAProxy, qui déciderait où l'envoyer à partir de là. HAProxy est très léger et n'a pas besoin de beaucoup de ressources pour fonctionner, vous pouvez donc utiliser un seul équilibreur de charge pour de nombreux serveurs principaux. Idéalement, vous souhaitez que votre serveur HAProxy et vos serveurs Web soient hébergés dans le même centre de données, à partir du même fournisseur de cloud, afin de réduire la latence.

HAProxy permet également à votre réseau d'être plus résilient. Si un serveur Web tombe en panne, HAProxy peut acheminer le trafic vers le reste pendant que vous diagnostiquez le problème. Pour qu'il soit vraiment résilient, vous aurez besoin d'un serveur HAProxy de secours, au cas où votre équilibreur de charge tomberait en panne.

Même avec HAProxy, vous souhaiterez toujours un CDN de site complet devant lui, à la fois pour gérer une charge supplémentaire et pour avoir plusieurs points de présence plus proches de l'utilisateur final.

Comment configurer l'équilibrage de charge HAProxy

Tout d'abord, installez HAProxy à partir du gestionnaire de packages de votre distribution. Pour les systèmes basés sur Debian comme Ubuntu, ce serait :

apt-get install haproxy Publicité

Ensuite, vous devrez l'activer en modifiant le script d'initialisation dans /etc/default/haproxy et en définissant ENABLED sur 1 :

ENABLED=1

Maintenant, si vous exécutez le service haproxy, vous devriez voir qu'il est activé et prêt à être configuré. Nous commençons par archiver le fichier de configuration par défaut :

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.old

Créez un nouveau fichier de configuration à sa place, et démarrez en ajoutant quelques paramètres globaux :

global     log 127.0.0.1 local0 notice     maxconn 2000     user haproxy     group haproxy stats enable stats uri /haproxy?stats stats realm HAProxy Statistics stats auth admin:password

Le paramètre de journal spécifie le serveur syslog que HAProxy. Vous aurez besoin d'avoir un serveur comme rsyslog en cours d'exécution pour l'utiliser. Le paramètre maxconn spécifie le nombre maximal de connexions simultanées, et l'utilisateur et le groupe spécifient sous quel utilisateur Unix HAProxy fonctionne.

Les dernières lignes activent la page de statistiques intégrée de HAProxy, que vous pouvez afficher en accédant à l'URI dans votre navigateur. Dans ce cas, ce serait http://your_ip/haproxy?stats, mais vous pouvez en voir une démo ici.

Ensuite, nous allons définir la configuration par défaut qui s'appliquera à tous écouter les blocs s'ils n'y apportent aucune modification :

par défaut journal mode global option http option httplog dontlognull réessaye 3 option redispatch timeout connect 5000 timeout client 10000 timeout server 10000

Nous réglons le paramètre la valeur par défaut pour utiliser le paramètre de journal global, fonctionner sur HTTP et définir certains paramètres liés aux délais d'attente de connexion.

Nous allons créer un bloc frontal qui fera le gros du travail et transférera les connexions au backend :

proxy frontend bind *:80 # Déclarations de fonction ACL acl is_abuse src_http_req_rate(Abuse) ge 10 acl inc_abuse_cnt src_inc_gpc0(Abuse) gt 0 acl abuse_cnt src_get_gpc0(Abuse) gt 0 # Règles tcp-request connexion connexion tracker-request rejeter si abuse_cnt http-request deny if abuse_cnt http-request deny if is_abuse inc_abuse_cnt option httpclose option forwardfor use_backend appname Advertisement

La première ligne lie cette interface au port 80, où HAProxy écoutera.

< p>Les deux sections suivantes concernent la limitation du débit. Tout d'abord, les fonctions de liste de contrôle d'accès (ACL) sont déclarées, qui déterminent si une adresse IP est abusive. Ensuite, un ensemble de règles rejettera une connexion si elle fait trop de demandes.

L'option forwardfor transmettra l'adresse IP du client au serveur. Étant donné que HAProxy agit comme un proxy inverse, votre serveur nginx ne verra que l'adresse IP de votre serveur HAProxy. Cette option définit l'en-tête HTTP X-Forwarded-For sur l'adresse IP du client.

Et enfin, nous définissons ce bloc d'interface pour utiliser le backend “appname,” que nous devrons créer. Le bloc backend définit simplement les serveurs vers lesquels transférer, ainsi que quelques options :

backend appname your_ip:80 balance roundrobin cookie SERVERNAME insert server web1 web1_ip:80 check cookie web1 server web2 web2_ip:80 check cookie web2

La directive d'équilibrage définit la manière dont HAProxy équilibre les requêtes entre les serveurs. L'option la plus courante est le roundrobin, qui fera tourner les connexions à travers chaque serveur dans l'ordre. Si vous rencontrez des problèmes d'équilibre, vous pouvez essayer d'utiliser l'option leastconn, qui sélectionne en fonction des connexions simultanées. Si vous avez besoin que les utilisateurs accèdent au même serveur via plusieurs connexions, vous pouvez utiliser l'option source, qui sélectionne en fonction d'un hachage de l'adresse IP du client.

Publicité

Les deux dernières lignes allouent des serveurs à ce bloc d'écoute. Vous leur donnez un nom (web1 et web2), spécifiez leurs adresses, puis répertoriez quelques options. Ici, nous utilisons le paramètre de vérification pour nous assurer que le serveur est sain et accepte les connexions, et le paramètre de cookie pour définir le cookie SERVERNAME (que nous avons inséré directement ci-dessus) sur le nom du serveur, qui est utilisé pour la persistance de la session (donc le l'utilisateur ne change pas de serveur lorsqu'il utilise votre site). L'option de source d'équilibre produit le même effet.

Et parce que nous utilisons la limitation de débit, nous aurons en fait besoin d'un autre backend pour stocker les adresses IP :

backend Abus stick-table type ip taille 100K expire 30m store gpc0,http_req_rate(10s)

Cela ne transfère réellement aucune connexion ; il fonctionne comme une table dans laquelle stocker les adresses. Les adresses sont vidées après 30 minutes, donc les adresses jugées abusives seront bloquées pendant 30 minutes.

Enfin, vous pouvez démarrer le service HAProxy en exécutant :

démarrage du service haproxy