HAProxy aléatoire HTTP 503 erreurs
Nous avons le programme d'installation 3 serveurs:
- Serveur Un avec Nginx + HAproxy pour effectuer l'équilibrage de la charge
- serveur d'arrière-plan B
- serveur d'arrière-plan C
Voici notre /etc/haproxy/haproxy.cfg
:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 40096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 50000
clitimeout 50000
srvtimeout 50000
stats enable
stats uri /lb?stats
stats realm Haproxy\ Statistics
stats auth admin:admin
listen statslb :5054 # choose different names for the 2 nodes
mode http
stats enable
stats hide-version
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:admin
listen Server-A 0.0.0.0:80
mode http
balance roundrobin
cookie JSESSIONID prefix
option httpchk HEAD /check.txt HTTP/1.0
server Server-B <server.ip>:80 cookie app1inst2 check inter 1000 rise 2 fall 2
server Server-C <server.ip>:80 cookie app1inst2 check inter 1000 rise 2 fall 3
Tous les trois serveurs ont une bonne quantité de RAM et de CPU cores pour gérer les demandes
Aléatoire HTTP 503 erreurs sont affichées lors de la navigation: 503 Service Unavailable - No server is available to handle this request.
Et également sur la console du serveur:
Message from syslogd@server-a at Dec 21 18:27:20 ...
haproxy[1650]: proxy Server-A has no server available!
Noter que 90% du temps il n'y a pas d'erreurs. Ces erreurs se produit de façon aléatoire.
source d'informationauteur BnW | 2012-12-21
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. Après des jours de tirant mes cheveux, j'ai trouvé le problème.
J'ai eu deux HAProxy les instances en cours d'exécution. L'un était un zombie qui en quelque sorte ne l'ai jamais tué pendant peut-être une mise à jour ou un haproxy redémarrer. Je l'ai remarqué lors de l'actualisation de l' /haproxy page de statistiques et le PID allait changer entre deux numéros différents. La page avec l'un des numéros avaient absurde statistiques de connexion. Pour confirmer, je n'ai
et a vu deux haproxy processus d'écoute sur le port 80.
Pour résoudre le problème j'ai fait un "kill xxxx" où xxxx est le pid avec le suspect de la statistique.
Il est possible que vos serveurs de partager, peut-être, une ressource commune qui est la synchronisation à certains moments, et que votre bilan de santé de demandes sont faites en même temps (et donc de tirer le serveur d'arrière-plan en même temps).
Vous pouvez essayer d'utiliser le HAProxy option
spread-checks
de randomiser les contrôles de santé.Ajouter ma réponse ici pour quelqu'un d'autre qui rencontre exactement le même problème, mais aucune des solutions énumérées ci-dessus sont applicables. Veuillez noter que ma réponse ne s'applique pas à l'original du code ci-dessus.
Pour quelqu'un d'autre qui ont ce problème, vérifiez que votre config et voir si vous avez accidentellement mis le même "lier" la ligne dans plusieurs sections de votre config. Haproxy ne pas vérifier cela lors du démarrage, et j'ai l'intention de soumettre un recommandé de contrôle de validation pour les développeurs. Dans mon cas, j'ai 3 différentes sections de la config, et j'ai malencontreusement mis la même adresse IP de liaison à deux endroits différents. Il était sur un 50/50 sur si oui ou non la bonne section serait utilisé ou que le mauvais article a été utilisé. Même quand la bonne section, environ la moitié des demandes encore un 503.
Difficile à dire sans plus de détails, mais est-il possible que vous dépassez la configuration de la maxconn pour chaque backend? Les Statistiques de l'INTERFACE utilisateur montre ces stats sur le frontend et sur les différents backends.
J'ai eu le même problème, en raison de 2 HAProxy services en cours d'exécution dans la boîte linux, mais avec un nom différent/pid/ressources. À moins que j'ai arrêter les indésirables, les différentes instances jette erreur 503 au hasard, disons 1 à 5 fois.
A essayé de l'utiliser seul linux pour plusieurs le routage d'URL, mais ressemble à une limitation dans haproxy ou le fichier de config de haproxy je l'ai défini.