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