Nginx Удаление вышестоящих серверов из пула - PullRequest
4 голосов
/ 31 августа 2009

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

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

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

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

1 Ответ

5 голосов
/ 31 августа 2009

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

web => nginx => haproxy => Mongrels

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

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

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

См .: nginx-ey-балансировщик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...