Configuration HAPROXY Lod Balancing

Résolu
Bonjour,
(j'aime bien CCM il dit bonjour a ma place lorsque je veux poster ^^ )

Bref, Étant stagiaire en informatique afin de validé mon bac+2 en info, mon entreprise d'accueil m'a proposé un "projet" qui consiste a monter un serveur HaProxy pour lod balancer plusieur serveur Web.
Bon je vous passe l'etape installation etc etc, apres m'etre pris la tete sur le fichier conf, voici ce que j'ai obtenu de "fonctionnel"
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
        option  redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
	 balance roundrobin


listen SRVHAPROX 172.16.1.5:80
       mode http
       stats enable
       stats auth user:password
       balance roundrobin
       option httpclose
       option forwardfor
       server SRVWEB1 172.16.4.194:80 cookie A check
       server SRVWEB2 172.16.4.196:80 cookie B check

Après avoir galéré avec quelque erreur par ci par la j'ai aussi vu que l'ont pouvais faire un fichier conf avec du frontend/backend a la place de listen, je vous montre le modèle au cas ou ... le début reste le même, mais la fin change légèrement.
frontend public
	bind 			        172.16.1.5:80
	default_backend 	web

backend web
        ("options a mettre ici.......")
	server SRVWEB1 172.16.4.196:80 cookie A check
	server SRVWEB2 172.16.4.194:80 cookie B check

Donc maintenant ma prochain étape est de réussir a lod balanced plusieurs serveur web diffèrent =)
en me promenant sur le web j'ai entendu parler ( en anglais donc un peu laborieux ) d'ACL a mettre dans le Frontend afin de laisser le choix entre plusieurs backend, bref une démo vaut plus que des mots...
Le débuts reste encore et toujours le même
frontend public
	bind 			172.16.1.5:80
	acl eco 		url_sub JAJA
	use_backend 		ecoweb if eco
	default_backend 	web

backend ecoweb
	server SRVWEB1 172.16.4.196:80 cookie A check
	server SRVWEB2 172.16.4.194:80 cookie B check

backend web
	server SRVWEB3 172.16.1.6:80 cookie A check
	server SRVWEB4 172.16.1.7:80 cookie B check


Donc la en gros j'integre une ACL nommée eco qui dit que si, dans l'url il y a le mot JAJA, nous iront utiliser le backend appelé ecoweb, sinon le default backend nommé web...

Malheureusement, dans le premier comme dans le deuxième cas, j'obtiens toujours les pages web de SRVWEB3/4.
Si quelqu'un a des infos sur ce qu'il manquerais a mon conf pour regler le probleme, merci de me le signaler...
En esperant avoir été assez claire et que vous pourrez m'aider.

5 réponses

  1. Je vous remercie de votre aide pour les détails technique ^^

    Mais malheureusement ce que je cherchais a faire n'étais pas le script parfait, mais dans un premier temps un script fonctionnel ^^ et ensuite voir a l'optimiser !

    J'ai réussi d'ailleurs hier après avoir essayer de multiple combinaison

    Pour info ce qui clochait était au niveau des ACL ( surement non reconnu dans ma version de Ha proxy ) bref, la syntaxe est correct d'après le manuel d'HA mais elle ne fonctionne pas, j'ai donc opter pour un autre type d'acl, le hdr_reg et la tout fonctionne parfaitement ^^

    Je vais donc m'en aller mettre tout cas en application. je "ferme" ce topic en mettant que j'ai eu la réponse a mon problème, et j'en ouvrirais un autre en cas de nécessité et d'info lors de l'optimisation de mon script.

    Merci a tous de votre aide =)

    ps : j'ai donc pour l'instant un script sur une base fonctionnel qui est

    global
            user haproxy
            group haproxy
    
    defaults
            retries 3
            
    frontend public :80
    	mode			http
    	acl eco_acl		hdr_reg econeuf
    	acl web_acl		hdr_reg web
    	use_backend		econeuf if eco_acl
    	use_backend		web if web_acl
    
    backend econeuf
    	mode 			http
    	server 		ECONEUF1 172.16.4.196:80
    	server 		ECONEUF2 172.16.4.194:80
    	balance 		roundrobin
    
    backend web
    	mode 			http
    	server 		SRVWEB1 172.16.1.6:80
    	server 		SRVWEB2 172.16.1.7:80
    	balance 		roundrobin
    


    Je vais donc me mettre a y ajouter diverse option et paramètre pour qu'il fonctionne mieux mais il fallait pour ca trouver le moyen de le faire fonctionner d'abord ^^
    1. Juste un petit conseil de sécu/opti change le port web de tes serveurs comme je le disais plus haut .
      Sinon bon courage la voie de la configuration est longue mais bonne :=)
  2. J'avais oublié le début ... pff le boulet .

    Faut pas oublier de configurer ton cookie aussi (si c'est pas déjà fait)

    cookie SERVERID insert nocache indirect

    La commande http_close étant inutile il me semble avec les cookies mais à vérifier.

    A noter que pour tracer active les traces/stats ( un check en command ) et à la fin :

    stats enable
    stats uri /lb?stats
    stats realm Haproxy\ Statistics
    stats auth tonuser:tonpass


    Ca te donnera déjà des petites infos sur les sites en HA et ça t'aidera un peu à voir.

    Petite note de sécu/habitude je te conseille de changer les ports des sites webs cibles pour plusieurs raisons ( filtrage, expertise d'observation réseau ...)

    bon courage

    1. Merci de la réponse, je sens que ca avance =)
      Malheureusement j'ai maintenant une autre erreur.

      504 Gateway Time-out
      The server didn't respond in time.

      après quelque recherche sur le net j'obtiens ce nouveau fichier conf, sachant que j'ai obtenu des problème tant que je n'avais pas mis de default backend, le default est donc la pour faire jolie, et j'y ai juste renseigner l'adresse du serveur haproxy histoire d'y mettre quelque chose, j'espere que ca ne pause pas de probleme.

      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  
              option  redispatch  
              maxconn 2000  
              contimeout      5000  
              clitimeout      50000  
              srvtimeout      50000  
          
      frontend public  
       bind    172.16.1.5:80  
       option   httpclose  
       acl ecoacl   url_sub econeuf  
       acl webacl  url_sub web  
       use_backend   econeuf if ecoacl  
       use_backend  webapache if webacl  
       default_backend haproxy  
      
      backend econeuf  
       balance roundrobin  
       server ECONEUF1 172.16.4.196:80 cookie A check  
       server ECONEUF2 172.16.4.194:80 cookie B check  
      
      backend webapache  
       balance roundrobin  
       server SRVWEB1 172.16.1.6:80 cookie A check  
       server SRVWEB2 172.16.1.7:80 cookie B check  
      
      
      backend haproxy  
       balance roundrobin 
       server HAPROXYA 172.16.1.5:80


      Vous pouvez egalement me contacter sur mon adresse de messagerie en cas de besoin =)

      Merci a tous
      1. il te manque l'option httpclose ou http-server-close dans ton frontend pour que haproxy analyse toutes les requêtes de la même session en keep-alive. Ajoute ça (tu l'as déjà dans le listen) et ça va marcher.
        1. Est ce que tu peux tester ça dans ton haproxy.cfg:

          frontend public *:80
          bind 172.16.1.5:80
          option forwardfor
          acl acl_eco url_sub JAJA
          use_backend web_eco if acl_eco
          default_backend web_normal

          puis

          section backend :

          backend web_eco
          mode http
          balance roundrobin
          server SRVWEB1 172.16.4.196:80 cookie A check
          server SRVWEB2 172.16.4.194:80 cookie B check

          backend web_normal
          mode http
          balance roundrobin
          server SRVWEB3 172.16.1.6:80 cookie A check
          server SRVWEB4 172.16.1.7:80 cookie B check

          Je pense que tu peux laisser ton fichier de log en tail -f (mais faut le renseigner dans ta conf ) ou en verbose pour voir exactement qui fait quoi.

          Sinon tu dois avoir une bonne charge d'utilisateurs pour faire de l'équilibrage :)