首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

Nginx作负载均衡相当不稳定

2012-07-23 
Nginx做负载均衡相当不稳定!开始我在虚拟机上做负载均衡,后端三台服务器,前端用Nginx,配置大概如下:引用wo

Nginx做负载均衡相当不稳定!
开始我在虚拟机上做负载均衡,后端三台服务器,前端用Nginx,

配置大概如下:

引用worker_processes  8;
worker_rlimit_nofile 102400;

error_log  /var/log/nginx/error.log error;
pid        /var/run/nginx.pid;

events {
    use epoll;
    worker_connections  102400;
}

结果跑出来的TPS图是很大的波浪线,一会高一会儿低,响应时快时慢。有时TPS能上到3000多,有时就几百,最后失去响应。

开始我以为是后端的三台应用服务器响应慢,于是对后端的每台应用单独压了一下,结果每台的TPS都很平稳的跑在1500左右。
打开ifstat工具可以看到网卡接收数据包一会儿有流量一会没有流量,难道是网卡问题?我单独压nginx的index页面可是相当平稳啊,网卡肯定没问题。
用netstat查看,一会儿有连接一会儿没连接,变态!

换apache做负载均衡试试,除了性能很差,速度很慢之外,没有响应时高时低的问题。
换台实体机做nginx负载均衡服务器,还是一样。靠,nginx是不是我不会玩啊,还是我玩的太变态了?

17 楼 CharlesCui 2009-03-02   不是代理程序的问题,是操作系统配置的问题。 18 楼 CharlesCui 2009-03-03   见我这个帖子:
http://charlescui.iteye.com/blog/341713

19 楼 whaosoft 2009-03-04   呃 负载均衡 我一点不会弄~!~ 20 楼 richyzhang 2009-03-08   nginx要是不稳定,这世上也没有靠得住的东西了.

nginx里面既然配了worker_rlimit_nofile 102400;
那么os最大允许打开的fileno数配成多少了? 21 楼 CharlesCui 2009-03-08   richyzhang 写道nginx要是不稳定,这世上也没有靠得住的东西了.

nginx里面既然配了worker_rlimit_nofile 102400;
那么os最大允许打开的fileno数配成多少了?

无语,我上面说了找到问题的根源了,你看我给出的帖子的链接。

ulimit -n 这个参数我记得我配置的是无限大,或者一个很大很大的数,不用质疑这个。
22 楼 ubotutwin 2009-03-08   <p>?????<span style="font-size: small;">?? 直接?lvs不可以吗?过分迷信硬件均衡了吧~~。</span></p>
<p><span style="font-size: small;">????? 象f5这些硬均衡器用的都是相当于lvs里的隧道模式的均衡方式,优点是拓补环境兼容好,配置调试简便,但在同样的硬件配置情况下却是各种连接模式里速度最慢的(因为出、进都要拆包,均衡器压力较大)。</span></p>
<p><span style="font-size: small;">????? 至于你说的不能做高层协议(大部分应该是http、ftp什么的吧?)的均衡,那又有什么影响呢?那些所谓能走高层协议的技术或设备发的东西底层就不走tcp/ip了?</span></p>
<p><span style="font-size: small;">????? 以我的经验来讲,lvs、硬均衡、webserver均衡三者的优缺点是这样的(完全相同的硬件情况下):</span></p>
<p><span style="font-size: small;">????? 性能:lvs&gt;硬均衡&gt;webserver均衡</span></p>
<p><span style="font-size: small;">????? 使用方便维护简单:硬均衡&gt;webserver均衡&gt;lvs(用这个的基本没有买来的,都是自己配。日后维护、扩展等需要专业点的人)</span></p>
<p><span style="font-size: small;">????? 总体讲,有技术能力上lvs的,或者没钱的就上lvs。有钱(一般大一点的项目都不会在乎这几台设备的钱的)、求稳(买硬均衡有厂商的技术支持,可安枕)、或对自己的技术没有太大的把握的就上个硬均衡。至于webserver均衡一般都是小一点的项目吧~~</span></p> 23 楼 sdh5724 2009-03-08   楼上说得的不错。 一般来说硬件均衡设备使用上比较方便, 也便于业务扩展。 在机器多的情况下, 业务复杂的情况下, 用硬件设备还是划得来的。 当然对于单一业务,我还是推荐LVS,节约费用。 LVS也没有想象的难, 如果有SA团队, 肯定有人能研究使用。 24 楼 CharlesCui 2009-03-08   <div class="quote_title">ubotutwin 写道</div>
<div class="quote_div">
<p>?????<span style="font-size: small;">?? 直接?lvs不可以吗?过分迷信硬件均衡了吧~~。</span></p>
<p><span style="font-size: small;">????? 象f5这些硬均衡器用的都是相当于lvs里的隧道模式的均衡方式,优点是拓补环境兼容好,配置调试简便,但在同样的硬件配置情况下却是各种连接模式里速度最慢的(因为出、进都要拆包,均衡器压力较大)。</span></p>
<p><span style="font-size: small;">????? 至于你说的不能做高层协议(大部分应该是http、ftp什么的吧?)的均衡,那又有什么影响呢?那些所谓能走高层协议的技术或设备发的东西底层就不走tcp/ip了?</span></p>
<p><span style="font-size: small;">????? 以我的经验来讲,lvs、硬均衡、webserver均衡三者的优缺点是这样的(完全相同的硬件情况下):</span></p>
<p><span style="font-size: small;">????? 性能:lvs&gt;硬均衡&gt;webserver均衡</span></p>
<p><span style="font-size: small;">????? 使用方便维护简单:硬均衡&gt;webserver均衡&gt;lvs(用这个的基本没有买来的,都是自己配。日后维护、扩展等需要专业点的人)</span></p>
<p><span style="font-size: small;">????? 总体讲,有技术能力上lvs的,或者没钱的就上lvs。有钱(一般大一点的项目都不会在乎这几台设备的钱的)、求稳(买硬均衡有厂商的技术支持,可安枕)、或对自己的技术没有太大的把握的就上个硬均衡。至于webserver均衡一般都是小一点的项目吧~~</span></p>
</div>
<p>这哥们说的挺多,但不是这个帖子的主题,讨论lvs我有另外一个帖子,本帖子里面有链接。这个帖子要和大家讨论的问题是:用nginx为什么会有tps波浪线出现。不是说我非要用nginx,是我用了nginx发现了一个问题,所以就很想知道答案。O(∩_∩)O哈哈~</p>
<p>?</p>
<p>lvs&gt;硬均衡(f5),你肯定么?我不是sa所以我不专业,但我不知道你是不是做sa的,如果你肯定,就请帮忙深入点的解释一下,最好有数据。</p> 25 楼 sdh5724 2009-03-08   LVS性能高应该是有理论依据的, F5要走高层协议, 而LVS走IP包, 这是个差异。 26 楼 ubotutwin 2009-03-09   <p><span style="font-size: small;">CharlesCui说道:</span></p>
<p><span style="font-size: small;">?????? lvs&gt;硬均衡(f5),你肯定么?我不是sa所以我不专业,但我不知道你是不是做sa的,如果你肯定,就请帮忙深入点的解释一下,最好有数据。</span></p>
<p>?</p>
<p><span style="font-size: small;">首先更正:进、出都需要拆包的应该是nat模式。</span></p>
<p>?</p>
<p><span style="font-size: small;">?????? lvs&gt;硬均衡的前提是使用同样的硬件,比如同样的cpu和内存为前提的。至于其原理,并不是lvs</span></p>
<p><span style="font-size: small;">比硬均衡先进,而是lvs可以根据网络拓补使用针对性的包封装技术,比如隧道和dr都只拆进的不拆出的,而dr</span></p>
<p><span style="font-size: small;">和隧道比又少了二次封ip的开销(每个包很小但流量大了积少成多就明显了),但dr要在完整的统一网段,而隧道要地下的机器都有tun协议的支持。</span></p>
<p><span style="font-size: small;">当然还有很多其他的细节上的区别。</span></p>
<p><span style="font-size: small;">?????? 而硬均衡为了屏蔽这些细节,做到:“对不同拓补形状的最好支持,对real server的最小要求”,肯定会多一些工作由均衡器自己做,这样就加大了</span></p>
<p><span style="font-size: small;">均衡器的负担。</span></p>
<p>?</p>
<p><span style="font-size: small;">?????? 最后要说的是,“lvs&gt;硬均衡”确实有点太绝对了,因为现在硬均衡已经多了很多配置,应该也可以让客户使用一种适合自身条件的模式了。但无论从</span></p>
<p><span style="font-size: small;">理论还是实际应用上来讲,完全相同的硬件配置和操作系统(os的速度影响不在我们讨论的范围),lvs可以做到linux集群的极限性能,而硬均衡能接近或</span></p>
<p><span style="font-size: small;">部分达到极限性能(因为客户的实际需要不同)。</span></p>
<p><span style="font-size: small;">?????? </span></p>
<p><span style="font-size: small;">?????? 我本人在01到03年做过部署实施的工作,现在做开发了,但还是一直很喜欢硬件方面的东西的:),所以一直都有一些涉猎,也希望能和大家多多</span></p>
<p><span style="font-size: small;">讨论、互相学习吧,呵呵~~</span></p>
<p>?</p> 27 楼 CharlesCui 2009-03-09   给楼上鼓掌! 28 楼 suxy 2009-03-09   我们用nginx作负载均衡,后面两个tomcat,压力测试用户的登录操作,并发3000个很稳定,最高4500,响应时间< 2s.

lz再找找原因吧. 29 楼 CharlesCui 2009-03-09   兄弟们啊,原因我都找到了,帖子里面不是给出答案了么。。。。看我另一篇帖子啊,是tcp fin timeout的问题,而且还和linux下可以用套接字数量有关。

怎么看帖子那么不认真呢?是不是专门跑我这里灌水啊? 30 楼 joshzhu 2009-03-09   我看有必要扫一下盲。
1、负载均衡分为L4 switch(四层交换),即在OSI第4层工作,就是TCP层啦。此种Load Balance不理解应用协议(如HTTP/FTP/MySQL等等)。例子:
LVS,F5
2、另一种叫做L7 switch(七层交换),OSI的最高层,应用层。此时,该Load Balancer能理解应用协议。例子:
haproxy,MySQL Proxy
注意:上面的很多Load Balancer既可以做四层交换,也可以做七层交换。

如果单纯要做HTTP的负载均衡,用haproxy好了。性能很强。
另外,F5和Alteon这样的硬件LB是LVS等软件赶不上,这个不用问了。

很显然,楼主的这个问题是benchmark时,做benchmark的客户端先遇上了瓶颈(TIME_WAIT以及客户端无端口可用了都算是)。Benchmark的一个基本原则是,揍人的要强于被揍的。 31 楼 richyzhang 2009-03-10   joshzhu 写道我看有必要扫一下盲。
1、负载均衡分为L4 switch(四层交换),即在OSI第4层工作,就是TCP层啦。此种Load Balance不理解应用协议(如HTTP/FTP/MySQL等等)。例子:
LVS,F5
2、另一种叫做L7 switch(七层交换),OSI的最高层,应用层。此时,该Load Balancer能理解应用协议。例子:
haproxy,MySQL Proxy
注意:上面的很多Load Balancer既可以做四层交换,也可以做七层交换。

如果单纯要做HTTP的负载均衡,用haproxy好了。性能很强。
另外,F5和Alteon这样的硬件LB是LVS等软件赶不上,这个不用问了。

很显然,楼主的这个问题是benchmark时,做benchmark的客户端先遇上了瓶颈(TIME_WAIT以及客户端无端口可用了都算是)。Benchmark的一个基本原则是,揍人的要强于被揍的。

一直只从服务端想楼主的问题,所以一直没明白他的解决方法怎么起作用的.现在清楚了,前面的方法是调高了揍人的能力. 32 楼 zhuyx808 2009-03-15   对这个不是很清楚,不过这篇文章说:引用在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx 0.7.30 + PHP 5.2.8 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。
http://blog.s135.com/post/366/ 33 楼 bugx 2009-05-31   nginx跑起来稳定性不用说了,我实际环境下跑的比以前apache还要好。

上面这些大牛对负载均衡的辩论,小弟受益匪浅啊 34 楼 墓里活人 2009-06-12   交流电 与 直流电的 区别。 35 楼 andrew913 2009-08-08   公司最近说要用Nginx替代apache了,哭。。。以前的apache模块白写了。

不过我觉的可以直接写一个内核的7层解析。

最近的一点想法在这个帖子里:
http://www.iteye.com/topic/443080
希望大牛过来帮我看看。

我没搞过负载均衡,乱想的,想做点这方面的毕业设计。

36 楼 elmar 2009-08-19   问一个非常土的问题:所谓的并发数多少多少,是指服务器在某个时间点上的活跃连接吗?还是一段时间里的链接?

热点排行