Назад | Перейти на главную страницу

Балансировщик нагрузки для автоматической обработки ошибок сервера

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

Вы можете использовать nginx HttpProxyModule (это довольно стандартный модуль и обычно находится внутри nginx) для реализации такого балансировщика нагрузки.

Nginx легкий, быстрый и имеет много функций (вы даже можете встраивать в него код lua).

Пример конфигурации для вашего варианта использования будет

upstream backend { 
 server 10.0.0.1; 
 server 10.0.0.2;
 server 10.0.0.3;
}
server {
   listen      80;
   server_name _;

   location / {
        proxy_pass  http://backend;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Секретный соус proxy_next_upstream директива, определяющая, в каких случаях запрос будет передан на следующий сервер. Возможные значения:

  • error - произошла ошибка при подключении к серверу, отправке к нему запроса или чтении его ответа;
  • таймаут - произошел таймаут при соединении с сервером, передаче запроса или при чтении ответа с сервера;
  • invalid_header - сервер вернул пустой или неверный ответ;
  • http_500 - сервер вернул ответ с кодом 500
  • http_502 - сервер вернул ответ с кодом 502
  • http_503 - сервер вернул ответ с кодом 503
  • http_504 - сервер вернул ответ с кодом 504
  • http_404 - сервер вернул ответ с кодом 404
  • off - запрещает передачу запроса на следующий сервер

Я предполагаю, что вы хотите обслуживать HTTP?

Nginx предоставляет множество функций, включая все те, которые вам нужны: http://wiki.nginx.org

особенно проверьте настройки апстрима и прокси, там вы можете реализовать все свои требования: http://wiki.nginx.org/HttpUpstreamModule http://wiki.nginx.org/HttpProxyModule

Еще одно возможное решение для реализации ваших требований: LVS (Виртуальные серверы Linux), которые реализованы в самом ядре Linux. если вы просто погуглите LVS tutorial вы получите массу результатов.

Здесь вы ищете либо прокси, либо достаточно дорогой балансировщик нагрузки.

Что касается проксирования, то squid / nginx может выполнять эту работу относительно разумно - выбор того, что вы выберете, является в некоторой степени вопросом предпочтений, но также насколько важно иметь кухонную мойку в вашем распоряжении (если это не так, nginx, возможно, лучший выбор)

Что касается аппаратного обеспечения ... балансировщик нагрузки F5 может делать такие вещи, при этом обеспечивая высокую масштабируемость.