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.

apache2_mod_proxy_1.jpg

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.

apache2_mod_proxy_2.jpg

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.

apache2_mod_proxy_3.jpg

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 ;-)