使用nginx实现负载平衡

使用nginx实现负载平衡,nginx,load-balancing,Nginx,Load Balancing,如果后端服务器上的负载超过某个级别,我希望停止向这些服务器提供请求。任何已经在网站上冲浪的人仍然会被路由,但是新的连接将被发送到静态服务器繁忙页面,直到负载下降到预先确定的水平以下 我可以使用cookies让当前的客户进来,但我找不到关于如何基于自定义负载度量路由的信息 谁能给我指出正确的方向吗 Nginx有一个用于负载平衡的模块。使用max\u fails和fail\u timeout选项检查后端服务器的响应性。使用backup选项可以在没有后端可用时路由到备用页面。我建议将您的负载度量转换为

如果后端服务器上的负载超过某个级别,我希望停止向这些服务器提供请求。任何已经在网站上冲浪的人仍然会被路由,但是新的连接将被发送到静态服务器繁忙页面,直到负载下降到预先确定的水平以下

我可以使用cookies让当前的客户进来,但我找不到关于如何基于自定义负载度量路由的信息

谁能给我指出正确的方向吗

Nginx有一个用于负载平衡的模块。使用
max\u fails
fail\u timeout
选项检查后端服务器的响应性。使用
backup
选项可以在没有后端可用时路由到备用页面。我建议将您的负载度量转换为Nginx提供的选项


假设Nginx在负载高于您所希望的情况下仍将后端视为“启动”。您可以通过调整后端服务器的最大连接数来进一步调整。因此,在负载过高之前,后端服务器可能只能处理5个连接,因此您可以对其进行调优,只允许5个连接。然后在前端,Nginx将在尝试发送第六个连接时立即超时,并将该服务器标记为不工作

另一个选择是在Nginx之外处理这个问题。像Nagios这样的软件不仅可以监控负载,还可以基于它所做的监控

您可以从一个模板生成Nginx配置,该模板具有将每个上游节点标记为向上或向下的选项。当监视器检测到上游负载过高时,它可以根据需要从模板重新生成Nginx配置,然后重新加载Nginx


同样想法的轻量级版本也可以使用与Nagios服务器在同一台机器上运行的脚本来完成,并执行简单的监视和配置文件更新

谢谢你的回答-也许我可以用$upstream\u response\u时间来处理这个问题。我可以计算所有服务器的平均响应时间,如果响应时间下降到某个不可接受的水平,则将请求路由到繁忙页面,否则就让它通过。使用“least_conn”平衡选项,请求将被传递到连接最少的服务器,希望负载最少。听起来不错。我认为,如果您能够根据自己的需要调整标准解决方案,那么让标准解决方案为您工作的简单性将是一个成功的选择。我无法找到一种方法,让nginx停止在某个预定义的负载级别上服务,而不必分叉负载平衡模块并对此进行处理。我不希望后端服务器返回服务器繁忙,因为届时负载将过高……后端服务器返回“繁忙”并不一定意味着负载过高。通过对max进程的良好调优,它可以在达到可以轻松处理的级别(而不是过载级别)时开始拒绝新连接。