nginx作为负载均衡在维护大量长连接时,如何做到配置最优?

网络拓扑图是这样的:

整个过程都需要保持长连接,nginx接收到新的连接后转发给后端的服务器。

确定一个连接要有4个东西:

  1. 源IP
  2. 源端口
  3. 目的IP
  4. 目的端口

现在在这个场景下,nginx到后端服务器,这里源IP和目的IP、目的端口都是固定的,只有源端口是可以变的,所以最大的连接数就是源端口的数量,即65535,按65000来计算,那么在两台后端服务的情况下,最多也只有130000条连接。远远不能满足50W用户连接。

===

所以我这边分别给两台后端服务器的网络接口增加了5个IP。
现在的最大连接数就变成了 65000 * 10 = 650000

===

增加了IP数量后,实际测试时,确实也突破了13W连接数,达到了20多万连接数。但是到了20W-30W之后(具体数量不确定),nginx就出现了卡住的情况:

htop里面最后一个画面是 CPU 100%
卡住之后没有办法创建新的连接,旧的连接仍然可用。

尝试增加了nginx这台服务器的内存大小,问题依旧存在。

问题:
一般情况下,当同时连接数达到50W这个量级的时候,nginx服务器需要什么配置
有其他排查这个问题的方法可以推荐吗?
通过什么方法可以让nginx在访问不同后端的时候,使用不同的源IP访问后端,如果这样操作的话,nginx每增加一个IP,理论连接数都能*2。

阅读 1.8k
1 个回答

最后还是把nginx换成了haproxy。因为haproxy可以在配置upstream的时候指定源IP。
使用haproxy后,测试可以支持到100W以上长连接。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏