负载平衡器静静地处理服务器错误

我正在寻找一个HTTP负载平衡器,可以静静地处理服务器错误。 我想要的是负载平衡每一个请求,以便它可以解决,在最坏的情况下有一点超时。

  • 如果正在工作的Web节点返回HTTP 500服务器错误,则负载平衡器将不得不与另一个Web节点重试该请求。 如果第二个节点确实返回了另一个500错误,那么对最后一个节点(我假设有3个节点)也是如此。 如果最后一个节点返回500错误,则将其显示给最终用户。

  • 如果服务器节点超时(需要超过1秒或2秒的时间来回答)请求将被路由到另一台服务器,客户端应该在2秒内收到一个好的答案。

你可以用HttpProxyModule (它是非常标准的模块,通常在nginx里面)来实现这种负载平衡器。

Nginx轻巧,快速,并且有很多function(甚至可以embeddedlua代码)。

示例configuration为您的用例将是

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指令,它决定了在什么情况下请求将被传送到下一个服务器。 可能的值是:

  • 错误 – 连接到服务器,发送请求或读取响应时发生错误;
  • 超时 – 在与服务器连接期间发生的超时,传送请求或从服务器读取响应;
  • invalid_header – 服务器返回一个空的或不正确的答案;
  • http_500 – 服务器返回代码为500的答案
  • http_502 – 服务器返回代码502的答案
  • http_503 – 服务器返回代码为503的答案
  • http_504 – 服务器返回代码504的答案
  • http_404 – 服务器返回代码为404的答案
  • closures – 它禁止请求转移到下一台服务器

我猜你想要服务HTTP?

Nginx提供了很多function,包括所有你正在寻找的function: http : //wiki.nginx.org

检查特别是上游和代理设置,那里你可以实现你的所有要求: http : //wiki.nginx.org/HttpUpstreamModule http://wiki.nginx.org/HttpProxyModule

实现您的需求的另一个可能的解决scheme是LVS (Linux虚拟服务器),它是在Linux内核本身实现的。 如果你只是谷歌的LVS tutorial你会得到吨的结果。

你在这里寻找的是一个代理或一个相当昂贵的负载平衡器。

在代理方面,鱿鱼/ nginx可以相对合理地完成这项工作 – 你的select有点偏好,但是让厨房下沉是多么重要(如果不是这样,nginx可以说是最好的select)

在硬件方面… F5负载平衡器可以做这种事情,同时也确保高可扩展性。