2012-06-10 3 views
1

Я хочу прекратить подавать запросы на мои серверы, если загрузка этих серверов превышает определенный уровень. Любой, кто уже занимается серфингом на сайте, по-прежнему будет маршрутизироваться, но новое соединение будет отправлено на страницу занятости статического сервера, пока нагрузка не упадет ниже предварительно определенного уровня.Балансировка нагрузки с nginx

Я могу использовать куки-файлы, чтобы позволить текущим клиентам, но я не могу найти информацию о том, как выполнять маршрутизацию на основе пользовательской метрики загрузки.

Может ли кто-нибудь указать мне правильное направление?

ответ

5

Nginx имеет модуль HTTP Upstream для балансировки нагрузки. Проверка отзывчивости серверных серверов выполняется с параметрами max_fails и fail_timeout. Маршрутизация на альтернативную страницу при отсутствии бэкэнд выполняется с помощью опции backup. Я рекомендую перевести ваши показатели нагрузки в опции, которые поставляется Nginx.

Предположим, что Nginx все еще видит, что бэкэнд «вверх», когда нагрузка выше, чем вы хотите. Возможно, вы сможете отрегулировать это, настроив максимальные соединения серверных серверов. Таким образом, возможно, серверы бэкэнда могут обрабатывать только 5 подключений до того, как нагрузка будет слишком высокой, поэтому вы настраиваете ее только на 5 подключений. Затем в интерфейсе Nginx будет тайм-аут немедленно при попытке отправить шестое соединение и отметьте этот сервер как неработоспособный.

+1

Спасибо за ответ: возможно, я могу использовать $ upstream_response_time для управления этим. Я мог бы рассчитать среднее время отклика на всех серверах, если это опустится до некоторого неприемлемого уровня, а затем направит запрос на занятую страницу, иначе пропустит его. Используя параметр баланса «less_conn», запрос будет передан серверу с наименьшими соединениями и, надеюсь, наименьшая загрузка. –

+0

Звучит неплохо. Я думаю, что простота создания стандартного решения для вас будет выиграна, если вы сможете настроить его на свои нужды. –

+0

Я не вижу способа заставить nginx перестать обслуживать некоторый предварительно определенный уровень нагрузки, не открывая модуль балансировки нагрузки и ничего не делая с этим. Я не хочу, чтобы сервер backend сервера возвращался на сервер, так как к тому времени нагрузка будет слишком высокой ... –

2

Другим вариантом является обращение с ним за пределами Nginx. Программное обеспечение, такое как Nagios, может не только контролировать нагрузку, но также может быть proactively trigger actions на основе монитора.

Вы можете сгенерировать свои конфигурации Nginx из шаблона, у которого есть опции для отметки каждого восходящего узла вверх или вниз. Когда монитор обнаруживает, что верхняя нагрузка слишком высока, он может повторно генерировать конфигурацию Nginx из шаблона, а затем перезагружать Nginx.

Легкая версия той же идеи может быть выполнена со сценарием, который работает на той же машине, что и ваш сервер Nagios, и выполняет простой мониторинг, а также обновления файла конфигурации.

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