我正在寻找一个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指令,它决定了在什么情况下请求将被传送到下一个服务器。 可能的值是:
我猜你想要服务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负载平衡器可以做这种事情,同时也确保高可扩展性。