ha-proxy install procedure
* goals:
1. Installer et procéder à la configuration de ha.
2. Configurer deux instances virtuelle d'apache écoutant sur deux ports différents.
3. Démontrer une partage de charge entre les deux instances
4. Log X-Forwarded-For.
4. Bonus: use a cookie to pin a requesting host to one server or
another.
* Installation:
# cd /usr/ports/net/haproxy
# make
accept defaults.
accept defaults with pcre
# make install
* configuration:
# vi /etc/rc.conf
add the line:
haproxy_enable="YES"
at the end of the file.
# cd /usr/local/etc/
vi haproxy.conf
Ajouter le texte ci--dessous
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen LOADBALANCER myipaddress:8080
mode http
balance roundrobin
option httpclose
option forwardfor
stats enable
stats auth myuser:mypass
server WEB1 127.0.0.1:8081
server WEB2 127.0.0.1:8082
remplacer "replace myipaddress" par l'IP de votre VM
Enregister et quiter
* start and verify operation
Vérifier que vous pouvez démarrer l'instance ha-proxy
# /usr/local/etc/rc.d/haproxy start
# /usr/local/etc/rc.d/haproxy status
Et qu'il écoute sur le bon port and that it's listening on the correct port
# netstat -a |grep 8080
* modifier apache
# cd /usr/local/etc/apache2/Includes
# vi lb-vhosts.conf
Pour ajouter le texte ci-dessoust
listen 8081
listen 8082
DocumentRoot /usr/local/www/apache2/data/1
ServerName web1.vmXX.sse.ws.afnog.org
Order deny,allow
Allow from all
DocumentRoot /usr/local/www/apache2/data/2
ServerName web2.vmXX.sse.ws.afnog.org
Order deny,allow
Allow from all
Remplacer vmXX par le numéro de votre VM.
Enregistrer et quitter.
Nous avons besoin de créer les répertoires spécifiés dans la configuration ci-dessous
pour le DocumentRoot et aussi nous allons injecter le fichier spécial null dans chaque répertoire afin de pouvoir contacter chaque serveur séparément
# mkdir /usr/local/www/apache2/data/1
# mkdir /usr/local/www/apache2/data/2
# touch /usr/local/www/apache2/data/1/1
# touch /usr/local/www/apache2/data/2/2
Tester l'intégrité du fichier de configuration d'apache
# apachectl -t
Si ça marche sans erreur fatale, redémarer apache avec cette nouvelle configuration.
# apachectl restart
Maintenant regarder combien de serveurs sont en écoutent
# netstat -a |grep 808
Tester les deux serveurs
# curl localhost:8081
# curl localhost:8082
* Tester le répartiteur de charge
Si tout fonctionne bien essayer ce qui suit
# curl /ipdevotrevm:8080
Remplacer ipdevotrevm l'IP de votre VM
Qu'est-ce que vous constatez?
Si ça ontre une alternance entre les index du répertoires web1 et du repertoire web2 alors vous avez un répartiteur de charge
Maintenant tester une navigation intensive sur le port 8080 de votre machine virtuelle. Que voyez-vous
* Statistics
Pour obtenir les statistiques de haproxy en temps réel :
Pointer son navigateur vers
http://ipdevotrevm:8080/haproxy?stats
remplacer ipdevotrevm avec l'ip de votre VM.
rappeler-vous lorsque nous avons créé la configuration haproxy que nous avons mis les
paramètres d'authentufucation à MyUser: mypass permet alors utilisons-les.
* Apache ne journalise (mettre dans les log) pas x-forwarded-for Si nous utilisons tail pour consulter les log d'Apache:
tail -f /var/log/httpd-access.log
Nous réaliserons ue l'IP source de toutes les requêtes a changé et est devenue 127.0.0.1
Nous pouvons modifier le format de log d'Apache pour prendre en compte les log x-transmis aussi bien que l'adresse IP source.
# vi /usr/local/etc/apache2/httpd.conf
look for the line:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Changer ça en :
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
tester la configuration d'Apache
apachectl -t
Si ça fonctionne redémarrer apache
apachectl restart
Maintenant votre serveur apache journalise les entêtes X-Forwarded-For.
* transmettre au client un cookie
Si vous définissez d'un cookie, vous pouvez utiliser le cookie à la prochaine connexion au même serveur, si le serveur tourne avec un
application qui est stateful (comme un client webmail par exemple) c'est très utile.
# cd /usr/local/etc/
# vi haproxy.conf
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen LOADBALANCER 192.168.191.131:8080
mode http
balance roundrobin
option httpclose
option forwardfor
stats enable
stats auth myuser:mypass
cookie LOADBALANCER insert
server WEB1 127.0.0.1:8081 cookie LOADBALANCER_01 check
server WEB2 127.0.0.1:8082 cookie LOADBALANCER_02 check
Enregistrer et quitter
/usr/local/etc/rc.d/haproxy restart
# curl /theipofyourvm:8080
rien ne change ?
Faire:
# curl -v /theipofyourvm:8080
Pouvez-vous voir le Cookie?
Ok essayez avec votre navigateur.
Bibliographie:
Dérivé d'une partie de :
http://www.softwareprojects.com/resources/programming/t-how-to-install-and-configure-haproxy-as-an-http-loa-1752.html
ha-proxy site officiel:
http://haproxy.1wt.eu/
guide de configuration ha-proxy
http://cbonte.github.com/haproxy-dconv/configuration-1.5.html#2.1