Introduction à l'utilisation de apache2 en repartiteur de charge / load balanceur (mod_proxy & mod_proxy_balancer)
Par Yoann le jeudi, 30 avril 2009, 19:05 - L1nuX and c0 - Lien permanent
Je vous présente dans la suite de ce billet une introduction à l'utilisation de apache2 (=> 2.1) en repartiteur de charge / load balanceur (mod_proxy, mod_proxy_http & mod_proxy_balancer).
J'ai essayé de faire une approche assez didactic. (Les problématiques seraient différents sur un cas concret)
Repartiteur de charge / Load balanceur avec apache2 par l'exemple
Nous avons un site web diffusant du contenu images et videos (media) hébergé sur un serveur.

Ayant une grand quantité d'image et de medias à servir, ca consomme beaucoup de ressources processeurs et on aimerais pouvoir avoir les images, les medias, et le site web sur des machines différents.
Ce site web est bien consu, car nous avons :
- un dossier /images/
- un dossier /media/
Nous allons donc ici mettre en place un système de proxy, grace a apache2.

Après avoir installer une Distribution Debian 5.0 Lenny (qui dispose d'un apache2 supérieur à la version 2.1), nous allons avoir quelques configuration à effectuer.
On installe le module mod_proxy de apache2
# aptitude install apache2 libapache2-mod-proxy-html
On active les modules proxy & proxy_http de apache2
# a2enmod proxy # a2enmod proxy_http
Par default les droits sur le mod_proxy est très limitatif, on edite le fichier /etc/apache2/mods-available/proxy.conf en remplacant
Deny from all
par
Allow from all
Puis nous allons editer le fichier /etc/apache2/sites-enabled/000-default et ajouter
ProxyRequests off ProxyPass / http://10.0.0.1/ ProxyPass /images/ http://10.0.0.10/ ProxyPass /medias/ http://10.0.0.20/
Après un rédemarrage de apache2 (apache2ctl restart) notre système de proxy est fonctionnel.
- http://monsite.com/ arrive bien sur le serveur web
- http://monsite.com/images/ arrive bien sur le serveur images
- http://monsite.com/medias/ arrive bien sur le serveur medias
Aie !!!
Nos images et videos sont tellement consommatrices de ressources processeurs coté serveurs, qu'il serait interessant de dupliquer les serveurs images & medias et de faire du loadbalancing.

Il va nous falloir activer le module proxy_balancer de apache2
# a2enmod proxy_balancer
Et bien sûr adapter notre configuration dans le fichier /etc/apache2/sites-enabled/000-default
ProxyRequests off
ProxyPass / http://10.0.0.1/
<Proxy balancer://monClusterImages>
BalancerMember http://10.0.0.10:80
BalancerMember http://10.0.0.11:80
</Proxy>
<Proxy balancer://monClusterMedias>
BalancerMember http://10.0.0.20:80
BalancerMember http://10.0.0.21:80
</Proxy>
ProxyPass /images/ balancer://monClusterImages/
ProxyPass /medias/ balancer://monClusterMedias/
Nous avons ici créé 2 groupes de machines (monClusterImages & monClusterMedias) qui sont utiliser par la suite dans la regle de ProxyPass.
- http://monsite.com/ arrive bien sur le serveur web
- http://monsite.com/images/ arrive bien sur l'un des deux serveurs images
- http://monsite.com/medias/ arrive bien sur l'un des deux serveurs medias
Pou gérer ce load balanceur, vous pouvez rajouter a ce même fichier :
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from host.monfai.net
</Location>
N'oubliez pas de changer le "host.monfai.net" par votre adresse IP, ou votre hostname ou *.votredomaine.tld.
Il vous suffit maintenant de vous rendre a l'adresse http://monsite.com/balancer-manager pour voir le status de chaque serveur. Vous avez également la possibilité de "Désactiver" un serveur.
Si un des serveurs d'un groupe de machine, ne repond plus, notre proxy sera capable de le detecter et d'envoyer les requêtes a celui encore debout ;-)
Commentaires
Très interessant ! N'hésitez pas à continuer avec de tels articles :)
oui oui super intéressant :)
Flux RSS ajouté ^^
Très beau wiki, mais quand est t-il des sites qui on une db mysql ??
de plus j'ai vu sur d'autre tuto l'utilisation de cookie et pas sur cette conf quelle intérêt ?
Merci pour vos wiki que je lie avec attention.
Librement, CE
Super ! y a plus qu'a tester ! Je pense que ca va bien m'aider. Mon projet consiste a mettre un frontal web puis 2 PC derriere lui en load balancing pour la disponibilité. Reste à trouver la solution pour dupliquer en temps réel les datas des 2 PC.
Merci encore.
Fonctionne très bien. Excellent tuto!
@Cedric : Il y a le RAID 1 sur IP qui fonction bien dans ce cas (DRBD)