Configuration du Serveur HTTP derrière un répartiteur de charge
(Page créée avec « __TOC__ Le serveur HTTP intègre un re-directeur HTTP permettant un fonctionnement derrière un répartiteur de charge (load balancer) ne gérant pas les sessions. C'est l... ») |
|||
(19 révisions intermédiaires par 2 utilisateurs sont masquées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | {{Version700}} | ||
__TOC__ | __TOC__ | ||
− | Le serveur HTTP intègre un re-directeur HTTP 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é à [http://www.windowsazure.com/en-us/manage/windows/common-tasks/how-to-load-balance-virtual-machines/ Microsoft Azure] qui utilise un algorithme round-robin. | + | 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é à [http://www.windowsazure.com/en-us/manage/windows/common-tasks/how-to-load-balance-virtual-machines/ Microsoft Azure] qui utilise un algorithme round-robin. |
+ | |||
+ | {{tip|Si vous avez le choix il est préférable d'utiliser un load balancer capable de gérer les sessions.}} | ||
===Principe=== | ===Principe=== | ||
Le principe est le suivant : | 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 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 | + | * 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|Les requêtes statiques concernant le site ne sont pas redirigées}} | {{tip|Les requêtes statiques concernant le site ne sont pas redirigées}} | ||
[[image:redirect sequence diagram.jpg]] | [[image:redirect sequence diagram.jpg]] | ||
+ | |||
+ | |||
+ | Les services dialoguent entre eux via un port HTTP distinct : le [[Fichier_de_configuration_(server)#HTTP|port privé]] | ||
===Architecture=== | ===Architecture=== | ||
− | Plusieurs | + | Plusieurs architectures sont possibles mais dans le cas d'une virtualisation le plus simple est d'utiliser une machine virtuelle par service. |
[[image:architecure-loadbalancer.png]] | [[image:architecure-loadbalancer.png]] | ||
− | Il est possible de configurer plusieurs | + | Il est possible de configurer plusieurs services sur une même machine virtuelle (ou physique) en modifiant le port HTTP de chaque service. |
− | {{tip|Vous pouvez partager le même fichier de configuration et remplacer le port du serveur HTTP défini dans le fichier de | + | {{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=== | ===Configuration d'un serveur Apache en répartiteur=== | ||
Ligne 30 : | Ligne 33 : | ||
Voici un exemple de fichier de configuration d'Apache: | Voici un exemple de fichier de configuration d'Apache: | ||
+ | <pre> | ||
+ | LoadModule proxy_module modules/mod_proxy.so | ||
+ | LoadModule proxy_balancer_module modules/mod_proxy_balancer.so | ||
+ | LoadModule proxy_module modules/mod_proxy.so | ||
+ | </pre> | ||
+ | .... | ||
<pre> | <pre> | ||
#### | #### | ||
Ligne 46 : | Ligne 55 : | ||
<Proxy balancer://syfrecluster/> | <Proxy balancer://syfrecluster/> | ||
− | BalancerMember http://syfrehost1 | + | BalancerMember http://syfrehost1 |
− | BalancerMember http://syfrehost2 | + | BalancerMember http://syfrehost2 |
ProxySet lbmethod=byrequests | ProxySet lbmethod=byrequests | ||
</Proxy> | </Proxy> | ||
Ligne 54 : | Ligne 63 : | ||
ProxyPass /balancer-manager ! | ProxyPass /balancer-manager ! | ||
ProxyPass / balancer://syfrecluster/ | ProxyPass / balancer://syfrecluster/ | ||
− | ProxyPassReverse / balancer://syfrecluster/ | + | #ProxyPassReverse / balancer://syfrecluster/ |
#For dynamic update of balancer members. Access to the page http://localhost:8080/balancer-manager | #For dynamic update of balancer members. Access to the page http://localhost:8080/balancer-manager | ||
Ligne 68 : | Ligne 77 : | ||
[[Category:Serveur]] | [[Category:Serveur]] | ||
+ | [[Category:Version710]] |
Version actuelle en date du 24 novembre 2020 à 14:17
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 : 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.
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.
Il est possible de configurer plusieurs services sur une même machine virtuelle (ou physique) en modifiant le port HTTP de chaque service.
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>