Comment configurer le load balancing sur un serveur apache.

plus de 4 an(s)

Description

Dans ce tuto, nous allons voir comment configurer le load balancing sur un serveur apache. 

Prérequis  

  • Activer les modules mod_proxy et mod_proxy_balancer 

Pour information, il faut savoir qu'il y'a 4 algorithmes de  planification de la répartition de la charge sur apache:  

L'abonnement à un serveur backend : le mode sticky :  

Consiste à associer le trafic d'un utilisateur à un server spécifique de votre load balancer. C'est-a-dire que lorsque la requête est mandaté par un serveur back-end, toutes les autres requêtes de ce même utilisateur seront  renvoyé vers ce même serveur. 

Ce mode d'abonnement peut entrainer quelques problématiques  à savoir par exemple : 

  • La distribution inégale de la charge si les clients sont derrière un mandataire (avec un seul IP) 

  • Des erreurs d'abonnement lorsque le client possède une adresse IP dynamique. 

  • Des pertes d'abonnement en cas de dépassement de la table de correspondance 

Diffèrent types d'abonnement : 

Le module mod_proxy_balancer implémente l'abonnement selon deux alternatives : 

  • Les cookies (fourni par le serveur backend ou apache) 

  • Le codage d'url (effectué par le serveur backend) 

Abonnement avec cookie 

Si l'abonnement s'appuie sur un cookie, il faut définir le nom de ce cookie dans les directive ProxyPass et ProxySet comme suit. (Le nom du cookie est sensible à la casse) 

ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On 
 

Cas du serveur TOMCAT: 

Le serveur TOMCATutilise une forme sensiblement différente de cookie, il ajoute le nom de l'instance TOMCAT à la fin  de son identifiant de session précédé par un point.  

Ainsi si le serveur apache trouve un point  dans le nom du cookie, il n'utilisera que la partie situe après le point pour rechercher la route du serveur backend. 

Pour que Tomcat puisse connaitre sa valeur d'instance, il faut définir l'attribut jvmRoute dans son fichier serveur.xml. 

      

La valeur de cookie utilisé par Tomcat s'appelle en général JSESSIONID (il peut être modifier) 

 

Abonnement avec url 

Le serveur Apache recherche dans l'url un paramètre spécifique définit dans la directive ProxyPass : 

ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On 
 

Pour trouver un serveur membre, Apache recherche un serveur dont la route est égale à la valeur du paramètre. Le paramètre en question peut être ajouter à toutes les URL de manière transparent par le serveur backend ou ajouter par le serveur apache en utilisant les modules mod_substitute ou mod_sed, (mais attention cette méthode peut dégrader les performances). 

Pour permettre à apache de trouver les informations encode dans l'url il faut activer le paramètre :  vous devez définir scolonpathdelim à On 

 

En résumé pour configurer le load balancer avec mod_proxy_balancer 

  1. Activer les modules mod_proxy et mod_proxy_balancer 

    sudo a2enmod proxy  

    sudo a2enmod proxy_http  

    sudo a2enmod proxy_balancer  

    sudo a2enmod lbmethod_byrequests (comptage des requetes pour la repartition de la charge ) 

     

  2. Configuration du load-balancer 

Dans votre virtual host ajouter la configuration comme suit, adapter le en fonction de votre configuration (adresse ip et port)

 
    BalancerMember "http://192.168.1.50:80" 
    BalancerMember "http://192.168.1.51:80" 
 
ProxyPass        /test balancer://mycluster/ 
ProxyPassReverse /test balancer://mycluster/ 

 

Attention : Ne pas oublier le "/" à la fin de  balancer://mycluster/