Apache Load Balancer

Il est possible d'utiliser Apache en tant que Load Balancer (répartisseur de charge). Voici comment installer ce genre d'environnement.

L'exemple suivant va vous monter comment répartir le contenu de deux répertoires d'un site web sur deux serveurs distincts de celui qui héberge le site proprement dit. Ensuite je vous monterai comment permettre un load balancing de l'un de ces répertoires sur deux serveurs !

Lexique :

- Frontal : héberge le site www.monsite.com et a pour IP : 192.168.0.1

- Data1 : hébergera le contenu du répertoire Videos du site www.monsite.com et a pour IP : 192.168.0.2

- Data2 : hébergera le contenu du répertoire Intranet du site www.monsite.com et a pour IP : 192.168.0.3

- Data1bis : sera la copie conforme de Data1 et aura pour IP : 192.168.0.20

- Data2bis : sera la copie conforme du Data2 et aura pour IP : 192.168.0.30

Les configuration apache de ces serveurs ne seront pas détaillées ici. Pour voir comment on configure apache reportez vous à la page d'aide de mon site à ce sujet que vous trouverez en cliquant ici.

Installation & configuration sur Frontal :

Après l'installation de Debian il faut installer apache2 de façon traditionnelle. Afin de pouvoir utiliser le mode load balancer vous devez installer également ce paquet : libapache2-mod-proxy-html ( apt-get install libapache2-mod-proxy-html )

Il faut ensuite configurer un module qui se trouve dans le répertoire /etc/apache2/mods-available : proxy.conf

Dans un shell lancez, vi /etc/apache2/mods-available/proxy.conf

Vous devez modifier la ligne : Deny from all et mettre All from all

Vous devez obtenir un fichier proxy.conf semblable à celui-ci

<IfModule mod_proxy.c>
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.

ProxyRequests Off

<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
#Allow from .example.com
</Proxy>

# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block

ProxyVia On
</IfModule>

Je concidère ici que le site internet est installé sur le fichier default et qu'il a été activé (voir configuration de apache2)

Vous devez ensuite activer les diffèrents modules nécessaires au fonctionnement du load balancer :

Frontal: # a2enmod proxy
Frontal: # a2enmod proxy_http

Il faut ensuite ajouter quleques lignes au fichier de conf de votre site : vi /etc/apache2/sites-available/default

<VirtualHost *:80>
ServerAdmin webmaster@localhost

ProxyRequests off
ProxyPass / http://192.168.0.1/
ProxyPass /videos/ http://192.168.0.2/
ProxyPass /intranet/ http://192.168.0.20/

../..

On relance Apache (/etc/init.d/apache2 restart)

Lorsque vous lancez dans votre navigateur http://www.monsite.com vous vous trouvez bien sur Frontal. Quand vous lancez http://www.monsite.com/vidéos vous vous trouvez sur Data1 et quand vous tapez http://www.monsite.com/intranet. vous vous trouvez sur Data2.

Cette étape de répartition en fonction des URL finie, il faut maintenant implémenté la répartition de charge (load balancer) proprement dite.

Il faut activer un nouveau module :

Frontal: # a2enmod proxy_balancer

En tout premier lieu on va activer l'interface d'administration du load balancer dans le fichier de conf du site (default).

<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168.0.0/24
</Location>

Ce bloc doit être placé avant les lignes "ProxyPass" mais après la ligne "ProxyRequest"

Notez que le allow from peut être adapté à votre utilisation. J'ai ici autorisé tout le réseau 192.168.0.x a accèder à l'interface d'administration.

Il faut ensuite modifier quelques peu les règles de renvois et ajouter les "pools" de serveurs. Ici deux pools distincts seront configurés : celui de l'intranet et celui des vidéos.

Editez le fichier default et ajouter et modifier comme suit :



<Proxy balancer://my-pool-videos>
BalancerMember http://192.168.0.2:80
BalancerMember http://192.168.0.20:80
</Proxy>

<Proxy balancer://my-pool-intranet>
BalancerMember http://192.168.0.3:80
BalancerMember http://192.168.0.30:80
</Proxy>

ProxyPass /videos/ balancer://my-pool-videos/
ProxyPass /intranet/ balancer://my-pool-intranet/

ProxyPass / http://192.168.0.1/

Pour une raison obscure que je ne me m'explique pas, il faut placer le ProxyPass de la racine du site à la fin, sinon elle prends le pas sur les autres. Je n'ai pas testé sur toutes les version d'apache ni de linux, en tout cas les deux configurations que j'ai testé (sous Lenny et sous Etch) m'ont fait ce coup là.

Les noms "my-pool-videos" et "my-pool-intranet" sont complètement arbitraires, vous pouvez les appeler comme vous voulez (toto, titi, etc...). La seule contrainte se trouve dans la ligne du ProxyPass ou vous devez avoir :

/repertoire_balancer/ balancer://nom_du_pool

 

Il faut relancer apache de nouveau (apache2ctl restart) et tout est ok.

Le balancer est maintenant opérationnel. Afin d'accèder à l'interface d'administration, ouvrez l'URL : http://www.monsite.com/balancer-manager/

Vous arrivez à une page semblable à celle-ci :

Vous m'excuserez si certaines parties ont été effacé, mais le screenshit a été réalisé sur un balancer en production et pour des raisons de sécurité évidentes, j'ai retiré les IP ainsi que le nom du balancer et des polls qui avait des noms trop "explicites"

Pour administrer un pool, il suffit de cliquer sur le lien ; balancer://pool-name

Ceci donne :

 

Vous pouvez choisir le seuil de failover (nombre d'echec avant désactivation) ici 3 ; le time out, et la méthode de répartition de charge, deux choix :

- byrequest : 1 accès par serveur

- bytraffic : en fonction du nombre d'utilisateurs par serveur

En cliquant sur l'un des Serveurs (colonne Worker URL) vous pouvez désactiver un des serveur :

Pour désactiver un serveur il suffit de cliquer sur le bouton radio "Disabled" et de faire "Submit"

 

Voilà vous n'avez plus qu'à mettre en pratique.

 

Retour à l'index Linux