[Summer Camp] Etape 4 – Load balancing HAPROXY et stunnel

October 18th, 2011 | by | tuto, unix

Oct
18

haproxy

On continu d’avancer et on touche presque à la fin. A la fin de ce tuto, on aura une plateforme web fonctionnelle. Aujourd’hui nous allons mettre en place le load balancer HAPROXY qui aura pour objectif de répartir la charge entre les deux frontaux web installés mais aussi stunnel qui s’occupera de gérer la couche SSL (HAPROXY en étant dépourvu). Cette machine portera l’IP publique de notre site.

Le flux passera donc par HAProxy pour les connexions HTTP qui répartira la charge sur les frontaux web. Dans le cas du HTTPS, stunnel reçoit la connexion, la forward à HAProxy qui la forward au frontaux web.

J’entend d’ici : mais c’est un SPOF ! On se calme, l’étape 5 va nous permettre de clusteriser cette brique (et le MySQLProxy aussi ;) ) .

Sans plus attendre, on attaque !

Prérequis :

  • 4vCPU
  • 1024Mo de RAM
  • Un disque (j’utilise des VMDK) 8Go pour le système
  • 2 cartes réseau sur, une sur VLAN LB-Front et l’autre sur l’Internet

L’OS qui portera ce beau monde est : FreeBSD 8.2 x64. On a besoin d’une stack TCP/IP robuste et d’un OS économe en resource (je viens de donner une partie de la définition de FreeBSD).

Installation de HAPROXY :

La version de HAPROXY étant relativement récente dans les dépôts FreeBSD, on lance une installation à la FreeBSD, très classique :

root@haproxy-pts/0 [/usr/ports]# cd /usr/ports/net/haproxy
root@haproxy-pts/0 [/ports/net/haproxy]# make config && make && make clean

Et voilà ! HAProxy est déployé ! On l’ajoute aux services à lancer au démarrage du système :

root@haproxy-pts/0 [~]# echo 'haproxy_enable="YES"' >> /etc/rc.conf

Installation de stunnel :

La version de stunnel étant tout aussi récente, on utilise le même mécanisme :

root@haproxy-pts/0 [~]# cd /usr/ports/security/stunnel
root@haproxy-pts/0 [/ports/security/stunnel]# make config && make && make clean

On ajoute stunnel aux services à lancer au démarrage du système :

root@haproxy-pts/0 [~]# echo 'stunnel_enable="YES"' >> /etc/rc.conf

Configuration HAProxy

Toute la configuration de HAProxy tient dans un seul fichier : /usr/local/etc/haproxy.conf. Ci dessous ma configuration avec les commentaires qui vont bien :

global
        #On log en local
        log 127.0.0.1 syslog
        #On gere 10000 connexions sec
        maxconn  10000
        #On chroot pour plus de secu
        chroot /usr/share/haproxy
        #On lance le bousin avec le user nobody
        uid 65534
        gid 65534

defaults
        #Niveau de log
        log     global
        #On forward les requetes RFC-Compliants
        mode    http
        #On log les requete http et les timers
        option  httplog
        #Onlog pas le vide...
        option  dontlognull
        #On redistribu les session en cas de fail d un node
        option  redispatch
        #On active les X-Forwarded-For
        option  forwardfor
        #Nombre de test avant de declarer un node mort
        retries 3
        #Assez explicit...
        contimeout      1000
        clitimeout      10000
        srvtimeout      10000]

#On cree une interface uniquement pour les stats sur le port 1000
listen admin_page :1000
        mode http
	stats enable
	stats hide-version
        stats realm HA\ Proxy\ Stats\
        stats auth raff:hehehyesfdsf
        stats uri /

listen  test :80
        bind    :80
        #URL a tester
        option  httpchk /
        contimeout      1000
        clitimeout      10000
        srvtimeout      10000
        retries 5
        maxconn 10000
        balance roundrobin
        cookie  SERVERID nocache rewrite
        server oaf-prj-web01 192.168.10.1:80 cookie
        server oaf-prj-web02 192.168.10.2:80 cookie
        #On capture les new visiteurs
        capture cookie vgnvisitor= len 32

Configuration stunnel

Tout comme HAProxy, toute la configuration de stunnel tient en un fichier. On crée donc le fichier /usr/local/etc/stunnel/stunnel.conf :

;On configure le demon
setuid = stunnel
setgid = nogroup
pid = /tmp/stunnel.pid

;On met les certificats par defaut
cert = /usr/local/etc/stunnel/test.madeinsyria.fr.crt
key = /usr/local/etc/stunnel/test.madeinsyria.fr.key

;On renforce la stack SSL
options = NO_SSLv2
options = SINGLE_ECDH_USE
options = SINGLE_DH_USE

;On configure les logs
output = /var/log/stunnel.log

;On configure les services https
[https]
accept  = 443
connect = 80
TIMEOUTclose = 0

Le services est donc joignable sur sont IP publique en HTTP et HTTPS. De plus l’outil de stats est joignable sur l’IP publique sur le port 1000 avec le login et mot de passe spécifiés plus haut.

Authored by

IT pro et passionné d'UNIX âgé de 22 ans, je cherche à partager quelques points de vu et mon savoir faire. N'hésitez pas à laisser un commentaire ou votre avis, ça enrichira le débat !

One Response to “[Summer Camp] Etape 4 – Load balancing HAPROXY et stunnel”

Show / Hide Comments

Leave a Comment