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

De Wiki1000

version700-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, LV4) 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.

Tip-20px.png Tip : Si vous avez le choix il est préférable d'utiliser un load balancer capable de gérer les sessions.

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éterminer 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


Les services dialoguent entre eux via un port HTTP distinct : le port privé

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 configuration par une valeur passée sur la ligne de commande du service.

exemple : ".\server\ServiceL1000.exe" -name SF_700 /HTTPPORT 81 /HTTPPRIVATEPORT 84> ".\logs\log1.txt"

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:

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 
LoadModule proxy_module modules/mod_proxy.so

....

####
##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 
	BalancerMember http://syfrehost2 
	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>




Whos here now:   Members 0   Guests 0   Bots & Crawlers 1
 
Outils personnels