2009-08-31 3 views
4

Наша установка - стандартный nginx (ver 0.7.59) + тонкий сервер upstream на Debian lenny. Прямо сейчас мы находимся в 1 коробке для коробки для веб-приложений и 1 дБ. Недавно мы начали замечать, что thins в конечном итоге начнут «висит», то есть больше не будут получать запросы от nginx. У нас 15 минут, и через 10-15 минут первые 1 или 2 будут подвешены. Если оставить весь день, те же самые немногие, и еще несколько, останутся подвешенными. Единственное исправление, которое мы видели до сих пор, - перезапуск nginx. После перезапуска, повисшие thines начинают получать запросы снова сразу. Из-за этого кажется, что эти тонны могли быть выведены из восходящего пула.Nginx Удаление серверных серверов из пула

Если я правильно понимаю документы (http://wiki.nginx.org/NginxHttpUpstreamModule#server) с по умолчанию (что у нас есть), если nginx не может «обмениваться» с сервером backend 3 раза в течение 10 секунд, он установит, что сервер восходящего потока на " нерабочее "состояние. Затем он будет ждать 10 секунд, а затем снова попробуйте этот сервер. Это имеет смысл, но мы видим, что тонкий вешает бесконечно. Я попытался установить max_fails на 0 для каждого из thins, но это не помогло. Я не могу узнать, что приведет к тому, что восходящий сервер станет постоянно «неработоспособным».

В последнее время мы наблюдаем увеличение темпов роста, поэтому мы не уверены, может ли это быть связано с этим, или просто более очевидным в результате увеличения трафика за более короткий период времени.

Есть ли что-то еще (директива changeble или другие условия) в nginx, что приведет к тому, что сервер полностью выйдет из пула?

ответ

5

У нас было много проблем с обратной поддержкой прокси-сервера nginx, и в итоге они достигли лучшей архитектуры, поставив HAProxy между Mongrel и nginx. Таким образом, наша архитектура:

веб => Nginx => HAProxy => дворняг

То, что мы видели ранее (до HAProxy) было то, что Nginx затопит дворняг слишком много запросов и очереди запросов беспородных не был твердым и быстро застрял бы со слишком большим количеством запросов в очереди. Очередь HAProxys намного более стабильна и лучше балансирует все запросы между бэкэндами, чем nginx. nginx предлагает только круговую балансировку, когда лучше всего работает алгоритм, такой как минимальные соединения. Я не знаю, страдает ли Тин из той же проблемы, что и Монгрель.

В нашей новой установке nginx просто прокси-серверы для одного экземпляра haproxy и haproxy имеют все зарегистрированные Mongrels. HAProxy лучше поддерживает восходящее обнаружение ok/fail и может также ограничить каждый сервер приложений 1 соединением (директива maxconn), которая является ключевым для Mongrel, не уверен в Thin.

Директива maxconn настолько важна, что EngineYard имеет патч для nginx, который делает его родным для nginx, поэтому вам не нужно развернуть HAProxy, чтобы воспользоваться им.

См: nginx-ey-balancer

+0

Да мы видели, что раньше, и я забыл упомянуть, мы используем справедливый прокси-балансира плагин (http://brainspl.at/articles/2007/11/09/a-fair- proxy-balancer-for-nginx-and-mongrel; http://wiki.nginx.org/NginxHttpUpstreamFairModule), который использует неаккуратное слово algo вместо round-robin. Он работает хорошо, и # request/thin очень близок даже со временем. Я надеялся, что вам не нужно вводить другой слой, например HAProxy, если мы сможем просто выяснить, что заставляет thins больше не получать запросы от nginx. Итак, nginx-ey-balancer в основном имитирует maxconn algo HAProxy с HAProxy? –

+1

Да, nginx-ey-balancer имитирует maxconn algo HAProxy с HAProxy. Это в значительной степени причина, по которой мы перешли на haproxy для начала, теперь ее просто часть нашей архитектуры навсегда. –

+0

Удивительное спасибо за помощь. Подумайте, я попробую nginx-ey-balancer. Хотя у него есть только патчи для nginx v 0.6.34/35 и 0.8.0. Я посмотрю, какой еще более близко соответствует 0.7.59 и надеюсь на лучшее .. или дождитесь, пока 0.8.x станет стабильным. –

Смежные вопросы