[英]Nginx bottleneck as load balancer?
我们有一个受欢迎的iPhone应用程序,人们可以在其中相互对战。 今天我们有近100万注册用户。
在高峰时段,该应用程序的响应时间非常长,而且还有很多超时时间。 我们试图找到瓶颈,但是很难做到这一点。 所有服务器上的CPU,内存和I / O都低于50%。 该问题仅在高峰时段出现。
我们的设置
1 VPS with nginx (1.1.9) as load balancer
4 front servers with Ruby (1.9.3p194) on Rails (3.2.5) / Unicorn (4.3.1)
1 database server with PostgreSQL 9.1.5
数据库日志没有显示足够长的请求时间来解释nginx错误日志中显示的所有超时。
我们还尝试直接在前端服务器上构建和运行该应用程序(在高峰时段,当所有其他用户都在负载平衡器上运行时)。 令人惊讶的是,即使在高峰时段,绕过负载平衡器的应用程序也能像子弹般快速运行。
NGINX设置
worker_processes=16
worker_connections=4096
multi_accept=on
LINUX设置
fs.file-max=13184484
net.ipv4.tcp_rmem="4096 87380 4194304"
net.ipv4.tcp_wmem="4096 16384 4194304"
net.ipv4.ip_local_port_range="32768 61000"
为什么应用程序绕过负载均衡器的速度如此之快? Nginx作为负载均衡器能否成为瓶颈? 有什么好方法可以将nginx中的超时与独角兽中的超时进行比较,以查看问题所在?
根据您的设置,nginx可能是瓶颈...
检查/调整Nginx中的以下设置:
worker_processes
设置(应等于内核数/ cpus) worker_connections
设置(如果高峰时有很多连接,应该很高) multi_accept on;
use epoll;
-directive) 检查/调整以下操作系统设置:
sysctl -w fs.file-max=999999
) sysctl -w net.ipv4.tcp_rmem="4096 4096 16777216"
和sysctl - net.ipv4.tcp_wmem="4096 4096 16777216"
) sysctl -w net.ipv4.ip_local_port_range="1024 65536"
) 更新:
允许并发用户略超过16,000,这足以满足您的峰值需求吗?
您如何设置上游服务器组以及使用的负载平衡方法是什么?
很难想象Nginx本身就是瓶颈。 某些上游应用服务器受到的打击可能比其他服务器严重得多,并由于积压已满而开始拒绝连接吗? 在Heroku上查看此负载平衡问题,然后查看是否可以在此处获得更多帮助。
在nginx版本1.2.2之后,nginx提供此least_conn
。 那可能很容易解决。 我还没有尝试过。
指定组应使用负载平衡方法,其中将请求传递到活动连接数最少的服务器,同时考虑服务器的权重。 如果有多个这样的服务器,则使用加权循环平衡方法尝试它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.