Comment configurer correctement Apache Httpd en tant que Load Balancer où certains hôtes peuvent être indisponibles
Je suis en utilisant un serveur Apache Httpd l'instance du proxy en face de plusieurs Java Tomcat instances. Apache agit comme un équilibreur de charge pour les instances Tomcat.
La config d'apache ressemble fondamentalement suit
<Proxy balancer://mycluster>
BalancerMember ajp://host1:8280 route=jvmRoute-8280
BalancerMember ajp://host2:8280 route=jvmRoute-8280
BalancerMember ajp://host3:8280 route=jvmRoute-8280
</Proxy>
<VirtualHost *:80>
ProxyPass /balancer://mycluster/
ProxyPassReverse /balancer://mycluster/
</VirtualHost>
En fait cela fonctionne lorsque l'AJP ports sont configurés dans les instances Tomcat. Les demandes sont envoyées à l'un des hôtes et la charge est répartie sur les instances Tomcat.
Cependant je vois des délais très longs qui semblent être causés à l'intérieur Httpd chaque fois que l'un des hôtes n'est pas disponible, par exemple, il semble Apache ne pas rappeler que l'un des hôtes n'est pas disponible et essaie à plusieurs reprises d'envoyer des demandes aussi de l'absence d'hôtes au lieu de l'envoyer à l'un des hôtes disponibles et en essayant de l'échec d'hôte à quelque temps plus tard.
Est-il un moyen de configurer mod_proxy et.al. à partir de Apache Httpd pour soutenir un tel scénario de basculement, c'est à dire avoir plusieurs hôtes et ne pas causer d'énormes retards lorsqu'un hôte échoue? De préférence, Apache doit de vérifier régulièrement les dans le fond d'hôtes qui sont parti et non pas comme pour toutes les demandes.
Je n'ai trouver HAProxy qui semble être plus adapté pour ce genre de chose, mais je préfère rester avec Apache pour un certain nombre de raisons.
Mise à jour
Dans l'intervalle, j'ai découvert qu'une partie de mon problème a été causé par des clients qui ont gardé la connexion ouverte à l'infini et donc pas plus de connexions/threads étaient disponibles.
Donc j'ai changer la question:
Les options de configuration que vous l'utiliser pour minimiser les effets de quelque chose comme cela? I. e. de permettre à de nombreuses connexions ouvertes ou les fermer rapidement dans ce cas? Sinon, cela sonne comme un très facile à DOS-attaque avec ma config actuelle?
source d'informationauteur centic
Vous devez vous connecter pour publier un commentaire.
Les Clients ne peuvent pas garder la connexion ouverte à l'infini. Vérifiez votre serveur Apache-tuning.conf et de regarder pour la KeepAliveTimeout réglage. Le ramener à quelque chose de sensible.
Vos modifications connectiontimeout et réessayer sont en effet de ce que vous avez à faire. J'avais inférieur connectiontimeout. 10 secondes c'est toujours les âges. Si la fin est dans le même endroit, pourquoi ne pas en millisecondes? connectiontimeout=200ms devrait laisser suffisamment de temps pour établir la connexion.
Je crois que j'ai trouvé au moins un peu d'une solution de contournement ou de solution simple. mod_proxy semble avoir une très longue connectiontimeout par défaut (300 secondes). si vous ne définissez pas les choses différemment, il va prendre un certain temps jusqu'à ce que hors ligne, les nœuds sont détectés comme étant en "err" de l'état.
Par la fixation d'un court connectiontimeout et en augmentant le nombre de nouvelles tentatives j'ai pu le faire fonctionner mieux pour moi:
Cela permettra de s'assurer que les connexions défaillantes sont détectés assez rapidement et Apache ne pas réessayer trop souvent à atteindre serveurs défaillants. Malheureusement, il semble Apache utilise les demandes de vérification de la balance des membres et, partant, de temps en temps seule demande peut être lent quand il essaie de parvenir à un serveur précédemment mis en err-état. Il semble qu'il n'y est pas de rythme cardiaque ou de la fonctionnalité de surveillance. Pour quelque chose comme cela, d'autres solutions d'équilibrage de charge d'apporter de telles caractéristiques, notamment HAProxy
Lire sur mod_proxy et mod_proxy_balancer pour plus de détails.
En outre état du serveur via mod_status et de l'équilibre manager via une page fournie par mod_balancer ont été d'une grande aide dans le diagnostic de cette!
Il semble que vous avez oublié le ping tag (en Fait il s'appelle CPING - 100-continue)
Comme suit: