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 ue 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.
remember that when we created the haproxy configuration that we set the
auth credentials to myuser:mypass so lets use those.
* Apache not logging x-forwarded-for
If we tail the apache log file:
tail -f /var/log/httpd-access.log
we'll realize that the source ip for all requests has become 127.0.0.1
We can alter the apache log format to log x-forwarded-for as well as
the source address.
# vi /usr/local/etc/apache2/httpd.conf
look for the line:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" com
bined
change it to:
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" com
bined
test your apache configuration
apachectl -t
if it works restart apache
apachectl restart
now your apache server logs the X-Forwarded-For header.
* handing the client a cookie
Si vous définissez un cookie, vous pouvez utiliser le cookie à la broche ultérieure
connexions au même serveur, si le serveur tourne avec un
application qui est stateful (comme un client webmail par exemple) ce
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
aregistrer 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