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