Equilibrage de charge avec haProxy


Article du 23/10/2008


Problématique


Lorsque la charge d'un système évolue, deux solutions sont possibles :

  • Installer la solution sur une machine plus puissante
  • Installer la solution sur une grappe de serveurs.

Aujourd'hui la deuxième solution est la plus performante et la moins coûteuse. De plus ce genre d'infrastructure permet aussi d'améliorer la qualité de service grace à une plus grande tolérance aux pannes.

Solutions du marché

Pour répondre à cette problématique diverses solutions sont à notre disposition :

Des solutions de type appliances (boitier spécialisés) de type BigIP ou Alteon.

Des solutions logicielles de type le mod_jk apache ou haproxy.

La première catégorie bien que très adaptée et simple à mettre en oeuvre nécessite cependant un investissement supplémentaire.

La deuxième catégorie peut être mise en place sur un serveur dédié ou sur un ou plusieurs serveurs de la grappe. Dans ce cas on s'assurera d'accéder à ce serveur via une IP-FailOver afin de ne pas avoir de « Single Point of Failure ».

Pour le clustering tomcat, le mod_jk est assez simple à mettre en oeuvre, cependant nous avons remarqué que lors de fortes charges des problèmes de stabilité peuvent apparaître.

Une solution du style haproxy permet de fonctionner avec n'importe quel type de serveur d'application étant donné qui peut agir de manière totalement transparente.

HaProxy, un logiciel très performant

Lors de nos tests et même en production ce produit nous a agréablement surpris. En effet non seulement il tient formidablement bien la charge et de plus il est très stable. En plus d'un an de production il n'est jamais tombé. Pourtant cette solution tourne pour un de nos client qui a de fortes contraintes de charges : (2 Millions de visiteurs par mois) avec des pics de 1000 connexions simultanées.

Installation

Afin d'installer la solution, il vous suffit de récupérer la dernière version stable de HaProxy. Il s'agit de la version 1.2.18.

Il vous suffit ensuite de créer le fichier de configuration /etc/haproxy.conf comme suit :


 
global
  daemon 
  nbproc 1  
listen application 192.168.0.100:80
   mode http
   cookie SERVERID insert nocache
   balance roundrobin
   server serveur1 192.168.0.101:8080 cookie CK1 weight 1 check
   server serveur2 192.168.0.102:8080 cookie CK2 weight 1 check
   option httpclose
   redispatch
   stats uri /monUrlSecreteDeMonitoring
   clitimeout 60000
   srvtimeout 60000
   contimeout 60000
Modifiez les champs serveur en fonction de vos adresses IP.

Dans cette configuration haproxy rajoutera un cookie nommé SERVERID et lui attribuera CK1 ou CK2 en fonction du serveur sur lequel il est redirigé. En cas de panne d'un des deux service haproxy redirigera de manière transparente sur le deuxième serveur.

Attention cependant aux sessions qui seront perdues si vous n'avez pas configuré vos serveurs Tomcat en mode cluster.

HaProxy vous donne aussi des statistiques sur vos serveurs, pensez à changer l'URL définie dans stats uri pour une Url personnalisée.

HaProxy offre une multitude de fonctionnalité, toutes ne peuvent pas être décrites ici pour plus d'information consultez la documentation qui est très complète. La version 1.3 est aussi très prometteuse en terme de nouvelles fonctionnalités.

Lancement de haProxy


Afin de lancer haproxy, lancez la commande suivante (n'oubliez pas de le lancer en mode nohup )

haproxy-1.2.18-linux-i586 -f /etc/haproxy.conf


HaProxy vous offre la possibilité de relire le fichier de configuration sans interruption de service. Pour cela relevez le PID du process (commande ps -eafH) et remplacez le dans la commande suivante :
haproxy-1.2.18-linux-i586 -f /etc/haproxy.conf -sf PID
captcha