2009-08-31 5 views
4

Notre installation est standard nginx (ver 0.7.59) + serveurs en amont légers sur Debian lenny. En ce moment, nous sommes sur 1 boîte costaude pour web/application et 1 boîte de db. Récemment, nous avons commencé à remarquer que ceux-ci finiront par "se suspendre", c'est-à-dire qu'ils ne recevront plus de demandes de la part de nginx. Nous avons 15 thins en cours d'exécution, et après 10-15 minutes, le premier 1 ou 2 sera accroché. Si elle est laissée toute la journée, ces mêmes minces et quelques autres resteront accrochés. Le seul correctif que nous avons vu jusqu'à présent est le redémarrage de nginx. Après un redémarrage, les minces accrochés commencent à recevoir des demandes à nouveau tout de suite. Pour cette raison, il semble que ces liens aient pu être retirés du pool en amont. Si je comprends bien les docs (http://wiki.nginx.org/NginxHttpUpstreamModule#server), avec les valeurs par défaut (que nous avons), si nginx ne peut pas "communiquer" avec un serveur backend 3 fois dans les 10 secondes, il mettra ce serveur en amont à un " état "inopérant". Il attend alors 10 secondes, puis réessaye ce serveur. Cela a du sens, mais nous voyons la fin indéfiniment. J'ai essayé de mettre max_fails à 0 pour chacun des thins, mais cela n'a pas aidé. Je ne peux pas savoir ce qui pourrait rendre un serveur en amont "inopérant" en permanence.Nginx Suppression des serveurs en amont du pool

Nous avons observé récemment une forte augmentation des taux de croissance. Nous ne savons donc pas si cela pourrait être lié à cela, ou tout simplement plus évident à cause d'une augmentation du trafic sur une période plus courte.

Existe-t-il quelque chose d'autre (une directive changeble ou d'autres conditions) dans nginx qui ferait sortir complètement un serveur du pool?

Répondre

5

Nous avons eu de nombreux problèmes avec la prise en charge du proxy inverse de nginx et avons finalement obtenu une meilleure architecture en mettant HAProxy entre Mongrel et nginx. Donc, notre architecture est:

web => nginx => haproxy => Mongrels

Ce que nous avons vu plus tôt (avant HAProxy) était que nginx serait Mongrels inondation avec trop de demandes et la file d'attente de demande de Mongrel n'a pas été solide et serait rapidement coincé avec trop de demandes en file d'attente. La file d'attente HAProxys est beaucoup plus stable et il vaut mieux équilibrer toutes les requêtes entre backends que nginx. nginx ne propose un équilibrage circulaire que lorsqu'un algorithme comme les connexions minimales est meilleur. Je ne sais pas si Thin souffre du même problème (s) que Mongrel.

Dans notre nouvelle configuration nginx seuls les proxies à une seule instance haproxy et haproxy ont tous les Mongrels enregistrés configurés. HAProxy a un meilleur support pour la détection ok/fail en amont et peut également limiter chaque serveur d'application à 1 connexion (directive maxconn) qui est la clé pour Mongrel, pas sûr de Thin. La directive maxconn est si essentielle que EngineYard a un correctif pour nginx qui le rend natif à nginx, donc vous n'avez pas besoin de déployer HAProxy juste pour en profiter.

Voir: nginx-ey-balancer

+0

Oui, nous avions vu ça avant et j'oublié de mentionner que nous utilisons le plugin équilibreur proxy juste (http://brainspl.at/articles/2007/11/09/a-fair- proxy-balancer-for-nginx-and-mongrel; http://wiki.nginx.org/NginxHttpUpstreamFairModule), qui utilise un algo moins occupé au lieu de round-robin. Cela fonctionne bien et le # demandes/mince est très proche de même au fil du temps. J'espérais ne pas devoir introduire une autre couche comme HAProxy si nous pouvions juste comprendre ce qui cause que les thin ne reçoivent plus de requêtes de nginx. Donc nginx-ey-balancer imite fondamentalement l'algo maxconn de HAProxy avec HAProxy? –

+1

Oui, nginx-ey-balancer imite l'algo maxconn de HAProxy avec HAProxy. Ce qui est à peu près la raison pour laquelle nous sommes passés à l'haproxy pour commencer, maintenant c'est juste une partie de notre architecture pour de bon. –

+0

Un grand merci pour votre aide. Je pense que je vais essayer nginx-ey-balancer. Bien qu'il ne dispose que de correctifs pour nginx v 0.6.34/35 et 0.8.0. Je vais voir lequel correspond le plus à 0.7.59 et espérer le meilleur .. ou attendre que 0.8.x devienne stable. –

Questions connexes