Configuration HAPROXY Lod Balancing

Résolu
0_d -  
evilcairn Messages postés 422 Statut Membre -
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. wtarreau
     
    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
  2. evilcairn Messages postés 422 Statut Membre 113
     
    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 :)
    0
  3. 0_d
     
    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
    0
  4. evilcairn Messages postés 422 Statut Membre 113
     
    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

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 0_d
     
    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 ^^
    0
    1. evilcairn Messages postés 422 Statut Membre 113
       
      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 :=)
      0