Nginx社区版,也就是我们能从官网免费下载到源码并且编译的版本,不是一个合格的商业负载均衡器。为什么这么说呢,是因为社区版在反向代理负载均衡这个功能上,很多重要的工作的解决方案是非常幼稚或者说是不成熟的。主要表现在两个方面,后端被负载均衡Web服务器的健康监测和Session回话保持功能。
首先说回话保持,nginx官方给出的解决方案是ip_hash,也就是根据访问客户的源IP地址进行分发。表看起来没什么问题,实际应用几乎不可行。比如为学校做一个选课系统,服务器放在服务网段,学生在普通网段,两个网段互通全靠NAT,Nginx收到的IP全都是同一个源IP,那么这个负载均衡没有就没有生效。
其次是后端健康检测,Nginx官方给出的解决方案是
server localhost:9191 max_fails=1 fail_timeout=40s;
意思就是如果9191这个端口某次连接超时或者失败max_fails次,就判定为不可用,然后等待fail_timeout这么长时间之后自动认为其可用,不管到底真的修复了没有。然后再次重试max_fails次。这还不算最坑爹的,更麻烦的是在Nginx上你无法查看各个后端节点的状态,不知道哪台宕机了或者卡了不好用了。如果你后端有一百台被负载均衡的服务器,光检查可用性这一点Nginx社区版就完败。
再就是连接和流量的统计功能,也适用于检查后端健康情况和当前的并发连接数的,这个功能社区版默认还是没有的,需要在编译时添加一个官方支持的模块
--with-http_stub_status_module
然后还需要在配置文件中,http下面的某个server开启这个功能,并指定访问url
location = /ngx_status
{
stub_status on;
access_log off;
}
可即使添加了这个模块,你看到的也就是下面这个简陋到爆的状态监控页面
从这个页面中,谁能告诉我哪台后端服务器宕机了,谁又能告诉我哪台后端服务器卡了,又怎么能知道哪台后端服务器的压力最大,哪台压力最轻?这些在Nginx都无从获取。
那么在对比一下同样是免费开源的专门做反向代理负载均衡的HAProxy的后台页面
每个节点的健康状况,运行时间,宕机时间,当前连接数,最大连接数,总连接数,数据进出流量是不是一目了然,马上就可以看到这个服务器的健康状况和处理能力。能看到现在哪台服务器负担最重,可以及时调整策略。提前防范风险。
再看看收费版的NGINX+的监控页面