Configuration du Serveur HTTP derrière un répartiteur de charge

De Wiki1000

versionlatest-32x32.png

Sommaire

Le serveur HTTP(s) intègre un re-directeur HTTP(s) permettant un fonctionnement derrière un répartiteur de charge (load balancer) ne gérant pas les sessions. C'est le cas par exemple du répartiteur intégré à Microsoft Azure qui utilise un algorithme round-robin.

Principe

Le principe est le suivant :

  • Lorsqu'un service ouvre une session il positionne dans la réponse un cookie de session (SID); ce cookie comporte différentes informations dont l'adresse interne du service ayant ouvert la session.
  • Lorsqu'un service reçoit une requête comprenant un cookie de session il analyse se cookie pour déterminé le service tenant la session. Si ce service n'est pas lui même il redirige la requête vers ce service.
Tip-20px.png Tip : Les requêtes statiques concernant le site ne sont pas redirigées

Redirect sequence diagram.jpg

Architecture

Plusieurs architectures sont possibles mais dans le cas d'une virtualisation le plus simple est d'utiliser une machine virtuelle par service.

Architecure-loadbalancer.png

Il est possible de configurer plusieurs services sur une même machine virtuelle (ou physique) en modifiant le port HTTP de chaque service.

Tip-20px.png Tip : Vous pouvez partager le même fichier de configuration et remplacer le port du serveur HTTP défini dans le fichier de oncfiguration par une valeur passée sur la ligne de commande du service.

Configuration

Pour fonctionner le paramétrage suivant est nécessaire :

  • Le paramètre KeepAlive doit être à faux.

Configuration d'un serveur Apache en répartiteur

Un serveur Apache peut être configuré comme répartiteur, ceci peut être utile pour tester une configuration.

Voici un exemple de fichier de configuration d'Apache:

####
##Definition of the proxy
###
ProxyRequests off

#TODO Change the from part in production mode!!!
<Proxy *>
	Order deny,allow
	Allow from all
</Proxy>

#Cluster of ESB
#Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

<Proxy balancer://syfrecluster/>
	BalancerMember http://syfrehost1 route=1
	BalancerMember http://syfrehost2 route=2
	ProxySet lbmethod=byrequests
</Proxy>

#All incoming requests will be redirected to the cluster of ESB servers exposing services
ProxyPass /balancer-manager !
ProxyPass / balancer://syfrecluster/
ProxyPassReverse / balancer://syfrecluster/

#For dynamic update of balancer members. Access to the page http://localhost:8080/balancer-manager
#TODO Change the from part in production

<Location /balancer-manager>
	SetHandler balancer-manager
	Order Deny,Allow
	Deny from all
	Allow from all
</Location>
Outils personnels