Serveur HTTP Apache Version 2.4
Description: | Check up dynamique des membres du groupe de répartition de charge
(équipiers) pour mod_proxy |
---|---|
Statut: | Extension |
Identificateur de Module: | proxy_hcheck_module |
Fichier Source: | mod_proxy_hcheck.c |
Compatibilité: | Disponible à partir de la version 2.4.21 du serveur HTTP Apache |
Ce module permet d'effectuer un check up dynamique des membres du groupe de répartition de charge (équipiers). Ce check up peut être activé pour un ou plusieurs équipiers et il est indépendant des requêtes de mandataire inverse proprement dites.
Pour fonctionner, ce module nécessite le chargement préalable de
mod_watchdog
.
Le mécanisme de check up est activé via l'utilisation de paramètres
supplémentaires de la directive BalancerMember
configurés de manière standard
via la directive ProxyPass
:
Ce module définit un nouveau drapeau d'état status pour BalancerMember :
"C
". Lorsque l'équipier est mis hors service suite à un
disfonctionnement déterminé par le module de check up, ce drapeau est activé
et peut être lu (et modifié) via le balancer-manager
.
Paramètre | Défaut | Description | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
hcmethod | None | Aucun check up dynamique n'est effectué. Les choix possibles sont :
| |||||||||||||||||||||||||||||||||
hcpasses | 1 | Nombre de check up à passer avec succès avant de remettre en service l'équipier | |||||||||||||||||||||||||||||||||
hcfails | 1 | Nombre de check up échoués avant mettre hors service l'équipier | |||||||||||||||||||||||||||||||||
hcinterval | 30 | Intervalle entre deux check up en secondes (par défaut effectué toutes les 30 secondes) | |||||||||||||||||||||||||||||||||
hcuri | URI supplémentaire à ajouter à l'URL de l'équipier pour le check up. | ||||||||||||||||||||||||||||||||||
hctemplate | Nom du modèle créé via ProxyHCTemplate à
utiliser pour définir les paramètres de check up de cet équipier | ||||||||||||||||||||||||||||||||||
hcexpr | Nom de l'expression créée via ProxyHCExpr
utilisée pour analyser les en-têtes de la réponse du check up.Si ce paramètre est absent, un état HTTP de 2xx à 3xx est interprété comme un check up réussi. |
OPTIONS11
, HEAD11
et GET11
sont
disponibles à partir de la version 2.4.55 du serveur HTTP Apache.
L'exemple suivant montre comment configurer le check up pour différents serveurs d'arrière-plan :
ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/} ProxyHCExpr gdown {%{REQUEST_STATUS} =~ /^[5]/} ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/} <Proxy balancer://foo> BalancerMember http://www.example.com/ hcmethod=GET hcexpr=in_maint hcuri=/status.php BalancerMember http://www2.example.com/ hcmethod=HEAD hcexpr=ok234 hcinterval=10 BalancerMember http://www3.example.com/ hcmethod=TCP hcinterval=5 hcpasses=2 hcfails=3 BalancerMember http://www4.example.com/ </Proxy> ProxyPass "/" "balancer://foo" ProxyPassReverse "/" "balancer://foo"
Dans ce scénario, on teste l'équipier http://www.example.com/
en lui
envoyant une requête GET /status.php
et en regardant si la réponse
contient la chaîne Under maintenance. Si c'est le cas, le check up est
considéré comme ayant échoué et l'équipier est mis hors service. Ce check up
dynamique est effectué toutes les 30 secondes, ce qui correspond à la valeur par
défaut.
On teste l'équipier http://www2.example.com/
en lui envoyant
simplement une requête HEAD
toutes les 10 secondes et en vérifiant
que la réponse HTTP est bien un code d'état de 2xx, 3xx ou 4xx. On teste
l'équipier http://www3.example.com/
en vérifiant simplement toutes
les 5 secondes que le socket vers ce serveur est bien opérationnel. Si ce
serveur est marqué "hors service", il lui faudra 2 check up réussis pour être
réactivé et participer à nouveau à la répartition de charge. Si à ce moment-là
il échoue à 3 check up successifs, il sera à nouveau mis hors service. Enfin,
l'équipier http://www4.example.com/
ne fait l'objet d'aucun check
up.
Description: | Crée et nomme une expression conditionnelle à utiliser pour déterminer la santé d'un serveur d'arrière-plan en fonction de sa valeur |
---|---|
Syntaxe: | ProxyHCExpr name {ap_expr expression} |
Contexte: | configuration globale, serveur virtuel |
Statut: | Extension |
Module: | mod_proxy_hcheck |
La directive ProxyHCExpr
permet de créer et nommer
une expression conditionnelle dont la valeur calculée en fonction des
en-têtes de la réponse du serveur d'arrière-plan permettra d'évaluer la
santé de ce dernier. Cette expression nommée peut alors être assignée aux
serveurs d'arrière-plan via le paramètre hcexpr
.
ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/} ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www2.example.com/ hcmethod=HEAD hcexpr=ok234 hcinterval=10 </Proxy>
Si l'on utilise une méthode de check up (par exemple GET
)
qui génère un corps de réponse, ce corps peut lui-même être ausculté via
ap_expr
en utilisant la fonction associée aux expressions
hc()
spécifique à ce module.
Dans l'exemple suivant, on envoie une requête GET
au serveur
d'arrière-plan, et si le corps de la réponse contient la chaîne Under
maintenance, ce serveur d'arrière-plan est mis hors service.
ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/} ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www.example.com/ hcexpr=in_maint hcmethod=get hcuri=/status.php </Proxy>
NOTE: Comme le corps de la réponse peut être assez grand, il est recommandé de privilégier un check up basé sur les codes d'état.
Description: | Crée et nomme un modèle permettant de définir différents paramètres de check up |
---|---|
Syntaxe: | ProxyHCTemplate name parameter=setting [...] |
Contexte: | configuration globale, serveur virtuel |
Statut: | Extension |
Module: | mod_proxy_hcheck |
La directive ProxyHCTemplate
permet de créer et
nommer un modèle de paramètres de check up qui peut alors être assigné aux
équipiers via le paramètre hctemplate
.
ProxyHCTemplate tcp5 hcmethod=tcp hcinterval=5 ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www2.example.com/ hctemplate=tcp5 </Proxy>
Description: | Définit la taille totale, pour l'ensemble du serveur, du jeu de threads utilisé pour le check up des équipiers |
---|---|
Syntaxe: | ProxyHCTPsize size |
Défaut: | ProxyHCTPsize 16 |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_proxy_hcheck |
Si Apache httpd et APR ont été compilés avec le support des threads, le
module de check up peut confier ce travail à un jeu de threads associé au
processus Watchdog, ce qui permet l'exécution des check up en parallèle. La
directive ProxyHCTPsize
permet de déterminer la
taille de ce jeu de threads. Une valeur de 0
signifie qu'aucun
jeu de threads ne sera utilisé, et le check up des différents équipiers sera
alors effectué séquentiellement.
ProxyHCTPsize 32