Projet Socle ENT
Pages enfant
  • Load Balancing (esup 4)

Vous regardez une version antérieure (v. /wiki/spaces/ESUPMU/pages/260145154/Load+Balancing+esup+4) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 17) afficher la version suivante »

Le load balancing va permettre à un serveur Apache de répartir la charge de requêtes entre différents serveurs applicatifs Tomcat.

La mise en place de ce système est assez similaire à la configuration d'un serveur frontal Apache.

Attention : la configuration d'un frontal Apache et de load balancing ne peuvent pas être actives en même temps, le load balancing gérant déjà la redirection des requêtes vers un autre serveur. Si un serveur frontal Apache à déjà été configuré, il convient donc de commenter ou de supprimer les lignes décrites sur la page Apache frontal (esup 4)

Serveurs Tomcat

Chacun des serveurs Tomcat devra être configuré en effectuant les modifications suivantes dans le fichier server.xml.

Dans un premier temps, on va commenter le connecteur du port http par défaut (8080) :

serveur.xml
<!-- <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" emptySessionPath="true"/> -->

On va ensuite rajouter un connecteur AJP qui permettra de connecter le serveur Tomcat avec le serveur Apache :

serveur.xml
<Connector port="8009" address="127.0.0.1"
           enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

Le paramètre port définit celui qui sera utilisé pour la connexion entre les deux serveurs. Le paramètre address n'est pas obligatoire mais est recommandé pour plus de sécurité. Il doit désigner l'adresse IP de la machine hébergeant le serveur Apache.

Si le serveur Apache est situé sur la même machine que le serveur Tomcat, la valeur 127.0.0.1 assurera plus de sécurité que la valeur par défaut (0.0.0.0).

Si plusieurs serveurs Tomcat sont hébergés sur la même machine, il faudra ajuster le paramètre port du connecteur AJP de façon à bien différencier les serveurs.

 

Enfin, on va rajouter un nom de route pour différencier les serveurs Tomcat auprès du serveur Apache. Trouvez la ligne :

conf/server.xml
<Engine name="Catalina" defaultHost="localhost">

Et rajoutez-y le paramètre jvmRoute de cette façon :

conf/server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

 

Réglages applicatifs

Chaque Tomcat ainsi configuré va héberger une instance de l'application uPortal. Chacune de ces instance devra être configurée de façon différente, pour refléter l'adresse réelle du serveur Tomcat, en modifiant le filtre esup.properties.

filters/esup.properties
################################################################################
## uPortal server configuration properties                                    ##
################################################################################
environment.build.uportal.server=localhost:80
environment.build.real.uportal.server=localhost:8009
environment.build.uportal.protocol=http
environment.build.uportal.context=/uPortal
environment.build.real.uportal.context=/uPortal

La ligne environment.build.uportal.server désigne l'adresse (et le port si nécessaire) du serveur frontal Apache.

La ligne environment.build.real.uportal.server désigne l'adresse réelle de l'application, à savoir l'adresse et le port du serveur applicatif. Le port doit être celui défini pour le connecteur AJP.

Les lignes environment.build.uportal.context et environment.build.real.uportal.context permettent de définir la racine du contexte de l'application, respectivement sur le serveur frontal et sur le serveur applicatif.

Les lignes environment.build.real.uportal.server et environment.build.real.uportal.context devront varier d'un serveur Tomcat à l'autre. Les autres lignes resteront identiques pour chaque instance.

Enfin, le paramètre environment.build.uportal.protocol permet de définir le protocole utilisé pour se connecter à l'application (http/https).

 

Serveur Apache

Une fois que chaque Tomcat sera configuré correctement et hébergera une instance adaptée de l'application, il ne reste plus qu'à configurer le serveur Apache pour répartir la charge entre les différents serveurs.

Pour cela, on utilisera 3 modules :

  • le mod_proxy
  • le mod_proxy_ajp, pour la communication entre Apache et Tomcat
  • le mod_proxy_balancer qui assurera le transfert de charge.

L'activation de ces modules se fera en dé-commenter les trois lignes suivantes, ou en les ajoutant si elles ne sont pas présentes :

conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

A la fin de ce fichier, on rajoutera ensuite le bloc de configuration du mod suivant :

conf/httpd.conf
#Configuration du load balancing
<VirtualHost *:80>       
    ProxyRequests Off  

    <Proxy balancer://portal>
        BalancerMember ajp://tomcat1.ent.fr:8009 route=tomcat1 loadfactor=1
        BalancerMember ajp://tomcat2.ent.fr:8010 route=tomcat2 loadfactor=1
        ProxySet lbmethod=bytraffic
        ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPass / balancer://portal/  
    
     <Location /balancer-manager>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1 
      SetHandler balancer-manager
    </Location>
    
</VirtualHost>

<VirtualHost> permet de définir un hôte virtuel pour lequel les paramètres de balancing seront appliqués. Plusieurs hôtes peuvent être configurés avec des stratégies différentes.

La ligne <Proxy balancer> définit un cluster de balancement identifié par le nom situé après Proxy balancer:// . Chaque BalanceMember contenu dans cette balise définit un serveur vers lequel rediriger des requêtes. Ils sont définis via le protocole AJP par l'adresse vers laquelle renvoyer les requêtes et le nom de route défini dans la configuration de chaque serveur. On trouve également le paramètre route qui reprend la route JVM définie pour chaque serveur, et un paramètre loadfactor qui définit le seuil de balancement.

Le paramètre ProxySet lbmethod définit la stratégie de balancement. Elle peut prendre les valeurs suivantes :

  • lbmethod=byrequests : Les requêtes sont réparties entre chaque serveur en fonction du loadfactor. Si les deux serveurs ont le même loadfactor, les requêtes seront réparties également entre les deux. Si le deuxième serveur à un loadfactor deux fois plus importants, alors il traitera deux fois plus de requêtes.

  • lbmethod=bytraffic : Cette fois, ce n'est plus le nombre de requêtes qui est réparti entre le serveurs, mais le nombre de bytes échangés. Selon le même principe, si deux serveurs ont le même loadfactor, le traffic sera réparti également entre les deux. Si un des serveurs à un loadfactor deux fois supérieur à l'autre, il traitera deux fois plus de bytes.

  • lbmethod=bybusyness : Cette méthode prend en compte le nombre de requêtes en attente. Chaque nouvelle requête sera automatiquement assignée au serveur ayant le moins de requêtes à traiter à cet instant.

La ligne ProxyPass définit :

 

Le code :

<Location /balancer-manager>
     Order deny,allow
     Deny from all
     Allow from 127.0.0.1
     SetHandler balancer-manager
</Location>

définit une interface graphique permettant de visualiser la répartition des charges. Elle est accessible via l'url http://localhost/balancer-manager uniquement à partir de l'IP locale (127.0.0.1) .

 

 

  • Aucune étiquette