Bastien Louche

Systèmes – Réseaux – Sécurité – Web | Tutoriels | CV
  • Accueil
  • CV
  • Contactez-moi

[Tutoriels] Configuration d’un cluster Apache 2 avec HAProxy

Bastien Louche | 03/05/2010 | 14:41 |

Cet article a été publié il y a plus de 6 mois. Les informations qu'il contient ne sont peut-être plus à jour.

J’ai décidé d’utiliser les machines virtuelles offertes par OVH pendant la phase de test de son offre Cloud Computing, pour vous faire un tutoriel sur la configuration d’un cluster Apache 2 avec HAProxy pour la partie équilibrage de charges.

Il faut donc 3 serveurs, 1 pour HAProxy, et minimum 2 pour le cluster Apache 2, on utilisera un système vierge sous Debian Lenny.

Voici donc un rapide schéma de la mise en place :

Les adresses IP utilisées sont des IP publiques appartenant au Cloud Computing d’OVH, il faudra donc les modifier pendant vos configurations personnelles.

Dans un premier temps on va configurer les serveurs Apache 2 (web1-cloud et web2-cloud) :

apt-get install apache2

Ensuite on créer le fichier qui sera testé par HAProxy pour vérifier que le serveur Apache 2 est opérationnel :

touch /var/www/haproxytest.txt

On va alors modifier légérement la configuration de : 

nano /etc/apache2/sites-available/default

Pour ajouter une nouvelle ligne et remplacer le CustomLog afin d’éviter que les logs d’Apache 2contiennent les checks de HAProxy :

SetEnvIf Request_URI « ^/haproxytest\.txt$ » dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog

On peut maintenant redémarrer Apache 2, les serveurs du cluster sont configurés :

/etc/init.d/apache2 restart

On se connecte sur le serveur qui va s’occuper de HAProxy :

apt-get install haproxy

On supprime la configuration par défaut de HAProxy et on re-créer le fichier pour éditer notre configuration :

rm -f /etc/haproxy/haproxy.cfg
nano /etc/haproxy/haproxy.cfg

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #debug
        #quiet
        user haproxy
        group haproxy

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen blweb 178.32.121.84:80
       mode http
       stats enable
       stats auth user:password
       balance roundrobin
       cookie SERVID prefix
       option httpclose
       option forwardfor
       option httpchk HEAD /haproxytest.txt HTTP/1.0
       server web1-cloud 178.32.114.13:80 cookie A check
       server web2-cloud 178.32.121.231:80 cookie B check

On peut maintenant lancer HAProxy :

/etc/init.d/haproxy start

Vous pouvez maintenant vous rendre sur l’adresse IP de votre serveur HAProxy via le navigateur de votre choix pour admirer le résultat !

Une petite astuce consiste à modifier le fichier /var/www/index.html pour mieux visualiser quel serveur a répondu à chaque rafraichissement de la page.

A noter que dans notre configuration nous utilisons le paramètre stats enable qui permet à l’aide des identifiants de stats auth de se connecter via http://IP-HAProxy/haproxy?stats à une interface web présentant les statistiques d’utilisation de HAProxy et des différents serveurs Apache 2.

Sources et Informations supplémentaires : [1] [2]

Catégories
Tutoriels
Tags
Apache, Debian, HAProxy, Linux, Serveur, Web
Flux rss des commentaires
Flux rss des commentaires
Trackback
Trackback

« [Tutoriels] Installation de Cherokee Web Server avec PHP 5 [Tutoriels] Benchmarker un serveur web Apache 2 avec Apachebench »

31 commentaires to “[Tutoriels] Configuration d’un cluster Apache 2 avec HAProxy”

  1. E. dit :
    13/06/2010 à 03:03

    Yop !

    apparemment ton tuto est plus à jour que celui-ci : http://www.howtoforge.com/haproxy_loadbalancer_debian_etch

    cependant je rencontre toujours le même problème, à savoir que cela ne marche pas =D

    je tente (désespérément) de monter une solution de load balancing sans succès.

    Je pense aussi que tu te trompes dans le titre de ton tuto, car un cluster permet juste la réplication d’une machine à l’autre, ici tu ne parles pas de réplication mais de répartition de charge !

    enfin, j’aimerai juste savoir si ta procédure décrite est juste celle là ou si t’as + bidouiller que ça, car bon, rien qu’en copiant/collant et changeant les IP ca ne fonctionne pas, aucune réponse de HAproxy :/

  2. Bastien Louche dit :
    13/06/2010 à 09:50

    Bonjour,

    Les tutoriels sont directement fonctionnels en copier coller, je fais toujours une vérification en réalisant le tutoriel de A à Z pour voir d’éventuelle erreur.
    J’utilise toujours des Debian Lenny vierge et j’indique les dépôts s’ils sont différents de ceux par défaut.
    Normalement il ne devrait pas y avoir de problème, mais après il faudrait analyser au cas par cas pour voir ce qui coince dans la mise en place.

    Sinon dans le cadre d’un cluster Apache, pour moi ça ne concerne pas une réplication de données mais bien une répartition de la charge.
    Je m’explique, en poussant l’architecture mise en place un peu plus loin, on pourrait imaginer que les données soient sur un serveur distinct et que chaque noeud Apache présent dans le cluster y accède via un montage NFS par exemple. Le cluster Apache serait alors dépourvu de données et l’ajout d’un noeud augmenterait alors simplement la capacité de traitement et accessoirement la répartition de charge. De plus la configuration de base de HAProxy propose du Roundrobin donc les requêtes vont être envoyées alternativement vers chaque noeud du cluster Apache, on a donc bien la aussi le concept de la répartition de charge (basique et non intelligente).

    Par contre d’autres types de cluster permettent eux d’augmenter la sécurité ou la disponibilité des données via une réplication de leurs contenus donc vous devez sûrement parler de ce type de cluster.

    Merci en tout cas pour votre commentaire, et j’espère que vous arriverez bientôt à vos fins avec la mise en place de votre Load Balancing :p

  3. E. dit :
    13/06/2010 à 12:34

    Je vais retenter aujourd’hui ^^

    tu parles de round robin, pour moi c’est pas trop de la répartition de charge à proprement parler, c’est un petit trick sur le DNS en lui affectant un NDD sur 2 machines physiques et qui repartit les connexions sur les bécanes ^^

    c’est possible que tu détailles la configuration du serveur qui host HAproxy ? car tu dis rien, mais je suppose qu’il lui faut apache2 au mini ! et comment se fait l’installation des stats sans apache2 donc ^^

    je suis intéressé pour avoir la config exacte du serveur HAproxy.

    tu parles aussi de ça : « Une petite astuce consiste à modifier le fichier /var/www/index.html pour mieux visualiser quel serveur a répondu à chaque rafraichissement de la page »

    c’est quoi la petite astuce ;p

  4. E. dit :
    13/06/2010 à 12:48

    woot !

    j’ai trouvé mon erreur grâce à la ligne de debug : /usr/sbin/haproxy -d -f /etc/haproxy/haproxy.cfg

    ca disait comme erreur : cannot bind socket

    donc le port 80 n’était pas « écoutable » par le proxy, en supprimant apache 2 j’ai résolu le problème 🙁

    merci pour ton tuto je vais aller le mettre en pratique avec le lien d’avant que j’ai mis !

    petite question vu que je m’apprête à rejoindre Orsay pour une LP sécurité & réseau, vous faites quoi en cours ? 😀

  5. Bastien Louche dit :
    13/06/2010 à 16:45

    Le Roundrobin est une pratique souvent utilisé dans le cadre des DNS mais en fait ça désigne le fait d’alterner de façon basique la destination des requêtes.

    Sinon pour le HAProxy, j’ai tout détaillé, en effet, il faut seulement HAProxy sur la machine et en aucun cas Apache ou tout autre serveur web, le site de statistiques de HAProxy est directement intégré dans l’outil.
    L’installation des statistiques est d’ailleurs expliqué à la fin du tutoriel. Pareillement pour la configuration, elle est au complet dans le tutoriel.

    Pour la petite astuce, en fait au départ si on laisse les Apache par défaut, en rafraichissant la page on ne pourra pas voir le Roundrobin mais seulement le fameux « It works! » donc j’ai simplement modifier le fichier index.html pour ajouter l’identifiant du serveur et ainsi constater le bon fonctionnement de HAProxy et des différents noeuds du cluster Apache.

  6. Bastien Louche dit :
    13/06/2010 à 16:49

    Content que le problème soit résolu, c’est mieux quand ça marche 🙂

    Pour la Licence Pro, j’étais sur Marseille à Luminy, en Administration et Sécurité des Réseaux, donc une grosse partie réseau avec du Cisco, après un bonne partie aussi administration et sécurité sur Linux Debian, une partie administration Windows et enfin une partie sécurité avec cryptage, sécurité physique, normes, piratages etc…

    Le site de l’IUT : http://www.iut-gtr.univ-mrs.fr/

    Bonne continuation 😉

  7. The_KreVarD dit :
    28/02/2011 à 01:45

    Bonjour,

    J’ai une petite question voila mes serveur backend apache2 sont sur un reseau local avec haproxy en frontend, les serveur de backend sont connecter a un serveur NFS ou sont stocker les differents site et je voudrai y mettre aussi les fichier log (access et error) des apache.

    En fait mon but c’est qu’un autre serveur avec awstats puisse utilise ses log mais voila le probleme qui se pose c’est qu’il se passe presque une minute complete avant que les log s’enregistre sur le serveur NFS

    Si vous avez une idée je suis prenneur

    —-
    Guillaume

  8. Bastien Louche dit :
    01/03/2011 à 13:09

    Bonjour,

    Il peut y avoir une limitation au niveau réseau ou des accès disques lors du transfert vers le serveur de fichiers, mais je ne sais pas vraiment comment expliquer ce phénomène surtout sur un réseau local ou les limitations matérielles sont moindres.

    En tout cas c’est une architecture web bien sympa 😉

  9. Riccardo Tacconi dit :
    11/08/2011 à 09:00

    Hi, sorry but my English is much better than my written French. I would like to do something similar but I would like to use two haproxy server with heartbeat to avoid a single point of failure. Do you know how to do that? I am pretty confused with the RIPE failover IPS…

  10. Bastien Louche dit :
    14/08/2011 à 00:06

    Hello,

    Yes it’s possible to install two or more HAproxy servers to avoid a SPOF, but you need to share an IP address between the two HAproxy servers to allow connection on the primary HAproxy server and if this server is down, to migrate the IP address on the second HAproxy server to not disturb your production.

    I found this document, I think it will be usefull for your problem.
    http://www.howtoforge.com/setting-up-a-high-availability-load-balancer-with-haproxy-heartbeat-on-debian-lenny

    Regards.

  11. Christophe dit :
    30/08/2011 à 14:17

    Bonjour,

    Merci pour cet exemple très clair, je vois un peu miex comme configurer.

    Par contre, je tourne en rond sur une « bêtise » : au niveau du serveur web, l’adresse IP qui envoit la requête est celle du loadbalancer et non l’ip officielle du browser qui interroge.

    Comment puis-je l’obtenir ?

    Merci,

    Christophe

  12. Bastien Louche dit :
    30/08/2011 à 17:46

    Bonjour,

    Je pense qu’un apt-get install libapache2-mod-rpaf peut résoudre ce problème, je l’utilise pour enregistrer les IP des visiteurs même lorsqu’ils traversent mon reverse proxy en front end, sinon il faudrait creuser dans ce sens, un module capable de conserver l’IP source même lors d’un passage transparent à travers un proxy.

    En espérant avoir pu vu aider 🙂

  13. Joe dit :
    14/09/2011 à 20:43

    Bonjour,

    Comment ce passe la gestion des sessions dans le cas de la mise en place de plusieurs serveurs web ?
    Quelle est l’option a mettre pour gerer les sessions ?

    Merci pour ton aide.
    Joe

  14. Bastien Louche dit :
    15/09/2011 à 06:25

    Bonjour,

    Il y a plusieurs solutions, soit la session n’est pas importante et elle sera sur chaque serveur web avec le risque de la perdre si le serveur plante, soit il est possible de la stocker en base de données, soit et c’est je pense la meilleure solution au niveau performance externaliser les sessions sur un service supplémentaire comme Sharedance ou Memcached.

    Bastien.

  15. abau pene dit :
    28/11/2011 à 12:32

    salut bastien. Au fait je viens juste d’installer le noyau de debian sans interface graphique ni de paquets supplementaires. J’aimerai savoir donc les miroirs que vous utilisé pour la configuration de haproxy et des serveurs web.

  16. Bastien Louche dit :
    28/11/2011 à 13:38

    Je vous invite à suivre ce tutoriel pour le maintien à jour d’une version stable de Debian (à adapter avec la version actuelle de Debian), http://www.bastien-louche.fr/2010/03/comment-avoir-debian-stable-a-jour/

  17. abau pene dit :
    29/11/2011 à 12:15

    Merci bastien. sinon est-ce-que vous avez fait des tuto sur l’installation et la configuration de jdk, apache-tomcat et le depliement d’application j2e sous debian lenny.
    Merci d’avance.

  18. Bastien Louche dit :
    29/11/2011 à 15:47

    Non désolé, tous mes tutoriels sont accessibles sur ce blog 🙂

  19. abau pene dit :
    30/11/2011 à 14:06

    Merci j’ai finalement configuré apach avec tomcat. Mais est ce que apache doit etre installé sur le serveur HAPROXY et aussi comment modifier le fichier /var/www/index.html pour avoir le resultat.
    Merci d’avance.

  20. abau pene dit :
    30/11/2011 à 17:53

    j’ai finalement reussi a voir les statistique de haproxy mais mon probème est comment les clients accedent aux serveurs web en passant par le haproxy. c’est a dire via quelle adresse ip(celle du haproxy ou celle d’une des servers web). MERCI

  21. Bastien Louche dit :
    30/11/2011 à 18:50

    Les clients accèdent uniquement à l’IP du HAProxy, c’est la seule qui doit être publique, les serveurs web peuvent même être sur un réseau local derrière, c’est le HAproxy qui gére la répartition sur les différents noeuds du cluster web.

  22. abau pene dit :
    03/12/2011 à 20:03

    cela signifie donc le srver haproxy aura deux cartes reseau; mais mon probleme est que je ne sais pas exacement l’URL par lequel les client accedent aux server web. si je tape l@ IP du server haproxy seulement j’obtiens ‘it works’. Merci d’avance.

  23. Bastien Louche dit :
    06/12/2011 à 10:51

    C’est à dire ?

    Vous cherchez à savoir sur quel serveur les clients arrivent ?

  24. abau pene dit :
    22/12/2011 à 13:02

    oui parce que en tapant l@ ip flotante sur une machine cliente, c’est à dire par exemple x.x.x.x:8080/monalication/ j’ai l’erreur Not Found.
    Merci d’avance.

  25. Bastien Louche dit :
    23/12/2011 à 15:59

    Les clients doivent accéder au site via l’IP du HAProxy normalement via le port 80, mais le site est aussi disponible via l’IP de chaque serveur web via le port 8080.

  26. haproxy dit :
    17/07/2012 à 11:48

    ce tutoriel est intéressant. je veux savoir dans le cas des machines virtuelles, comment se fait la configuration de la machine du haproxy vu qu’elle doit avoir une entre elle et le client et une autre avec les serveurs web. Concernant la configuration de haproxy, est ce qu’elle devrait etre dans le fichier haproxy.cfg (en le modifiant vu qu’il contient une configuration par défaut) ou bien créer un autre fichier haproxy.conf comme j’ai trouvé dans certains tutoriels?

  27. diablotin dit :
    12/09/2013 à 02:00

    Je me permet de faire un petit edit a ton billet pour ceux désireux d’installer haproxy sur une debian wheezy.

    Celui ci n’est plus dispo dans les depots a cause de bug non corrigé, il est cependant possible de l’installer en rajouter dans votre source.list la ligne suivante:

    deb http://ftp.debian.org/debian/ wheezy-backports main

    Faite ensuite un apt-get update puis un apt-get install haproxy.

    Ensuite il est nécessaire de modifier dans /etc/default/haproxy la ligne ENABLED=0 en ENABLED=1 sinon le script présent dans init.d ne fera rien 🙂

    voili voilou

  28. Bastien Louche dit :
    12/09/2013 à 10:04

    Bonjour,

    Merci beaucoup pour ces précisions qui pourront aider d’autres personnes !

    Bastien Louche.

  29. Jean dit :
    05/04/2014 à 08:05

    Bonjour
    J’ai tout configuré mais :
    1- oû je doit mettre mes fichiers html ?
    2- comment mettre un nom de domaine (exemple.com)

  30. Bastien Louche dit :
    05/04/2014 à 08:45

    Par défaut, les fichiers sont dans /var/www/.

    Pour le reste, il y a quelques explications ici : http://doc.ubuntu-fr.org/tutoriel/virtualhosts_avec_apache2

    Il faut chercher comment « configurer un vhost apache » afin de pouvoir réaliser ce que vous voulez faire.

    Bonne continuation !

  31. Pit dit :
    14/01/2015 à 13:22

    Bonjour,
    j’ai suivi votre tutoriel, mais j’ai rencontré un problème que haproxy n’est pas dans /etc/init.d . Où peut -on le trouver??
    Merci

Poster un commentaire

Cliquez ici pour annuler la réponse.

Recherche

Réseaux sociaux

CV Bastien Louche

Pages

  • CV
  • Contactez-moi

Catégories

  • Tutoriels (8)

Commentaires récents

  • cheikh dans [Tutoriels] Installation de Snort + Basic Analysis and Security Engine
  • Bastien Louche dans [Tutoriels] Installation de Snort + Basic Analysis and Security Engine
  • imen dans [Tutoriels] Installation de Snort + Basic Analysis and Security Engine
  • Simo, dans [Tutoriels] Installation de Snort + Basic Analysis and Security Engine
  • Pit dans [Tutoriels] Configuration d’un cluster Apache 2 avec HAProxy

Mots-clefs

Apache Apachebench Blog Cherokee Debian DNS DNSSEC HAProxy IDS IP Linux Logiciels Libres Nginx Réseaux Serveur Snort Systèmes Sécurité Web Windows YOURLS