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. 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 :)
      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. 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. 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 :=)