lvs、haproxy、nginx 负载均衡的比较分析

对软件实现负载均衡的几个软件,小D详细看了一下,从性能和稳定上仍是LVS最牛,基本达到了F5硬件设备的60%性能,其余几个10%都有点困难。html

     不过就由于LVS忒牛了,配置也最麻烦了,并且健康检测须要另外配置Ldirector,其余HAPROXY和NGINX本身就用,并且配置超级简单。前端

 

 

 

     因此小D建议,若是网站访问量不是门户级别的用HAPROXY或者NGINX就OK了,到了门户级别在用LVS+Idirector吧 哈哈linux

    lvs和nginx均可以用做多机负载的方案,它们各有优缺,在生产环境中须要好好分析实际状况并加以利用。

首先提醒,作技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你作垫被测试。把全部即时据说到的好东西加以钻研,从而提升本身对技术的认知和水平,乃是一个好习惯。

下面来分析一下二者:

1、lvs的优点:

一、抗负载能力强,由于lvs工做方式的逻辑是很是之简单,并且工做在网络4层仅作请求分发之用,没有流量,因此在效率上基本不须要太过考虑。在我手里的 lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和 cpu方面基本无消耗。

二、配置性低,这一般是一大劣势,但同时也是一大优点,由于没有太多可配置的选项,因此除了增减服务器,并不须要常常去触碰它,大大减小了人为出错的概率。

三、工做稳定,由于其自己抗负载能力很强,因此稳定性高也是瓜熟蒂落,另外各类lvs都有完整的双机热备方案,因此一点不用担忧均衡器自己会出什么问题,节点出现故障的话,lvs会自动判别,因此系统总体是很是稳定的。

四、无流量,上面已经有所说起了。lvs仅仅分发请求,而流量并不从它自己出去,因此能够利用它这点来作一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

五、基本上能支持全部应用,由于lvs工做在4层,因此它能够对几乎全部应用作负载均衡,包括http、数据库、聊天室等等。

另:lvs也不是彻底能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。因此,用lvs也得多多小心为妙。

2、nginx和lvs做对比的结果

一、nginx工做在网络的7层,因此它能够针对http应用自己来作分流策略,好比针对域名、目录结构等,相比之下lvs并不具有这样的功能,因此 nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,因此常常要去触碰触碰,由lvs的第2条优势 看,触碰多了,人为出问题的概率也就会大。

二、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区份内外网,若是是同时拥有内外网的 节点,就至关于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内而且lvs使用direct方式分流,效果较能获得保证。另 外注意,lvs须要向托管商至少申请多一个ip来作Visual IP,貌似是不能用自己的IP来作VIP的。要作好LVS管理员,确实得跟进学习不少有关网络通讯方面的知识,就再也不是一个HTTP那么简单了。

三、nginx安装和配置比较简单,测试起来也很方便,由于它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,由于同上所述,lvs对网络依赖比较大,不少时候不能配置成功都是由于网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。

四、nginx也一样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理全部流量因此受限于机器IO和配置;自己的bug也仍是难以免的;nginx没有现成的双机热备方案,因此跑在单机上仍是风险较大,单机上的事情全都很难说。

五、nginx能够检测到服务器内部的故障,好比根据服务器处理网页返回的状态码、超时等等,而且会把返回错误的请求从新提交到另外一个节点。目前lvs中 ldirectd也能支持针对服务器内部的状况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚 好在上传过程当中出现故障,nginx会把上传切到另外一台服务器从新处理,而lvs就直接断掉了,若是是上传一个很大的文件或者很重要的文件的话,用户可能 会所以而恼火。

六、nginx对请求的异步处理能够帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现不少的窄带连接时apache服务器将会占用大 量内存而不能释放,使用多一个nginx作apache代理的话,这些窄带连接会被nginx挡住,apache上就不会堆积过多的请求,这样就减小了相 当多的内存占用。这点使用squid也有相同的做用,即便squid自己配置为不缓存,对apache仍是有很大帮助的。lvs没有这些功能,也就没法能 比较。

七、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。

在使用上,通常最前端所采起的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优势令它很是适合作这个任务。

重要的ip地址,最好交由lvs托管,好比数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会愈来愈大,若是更换ip则故障会接踵而至。因此将这些重要ip交给lvs托管是最为稳妥的,这样作的惟一缺点是须要的VIP数量会比较多。

nginx可做为lvs节点机器使用,一是能够利用nginx的功能,二是能够利用nginx的性能。固然这一层面也能够直接使用squid,squid的功能方面就比nginx弱很多了,性能上也有所逊色于nginx。

nginx也可做为中层代理使用,这一层面nginx基本上无对手,惟一能够撼动nginx的就只有lighttpd了,不过lighttpd目前尚未 能作到nginx彻底的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,因此中层代理也拥有一个VIP和lvs是最完美的方案了。

nginx也可做为网页静态服务器,不过超出了本文讨论的范畴,简单提一下。
 ios

具体的应用还得具体分析,若是是比较小的网站(日PV<1000万),用nginx就彻底能够了,若是机器也很多,能够用DNS轮询,lvs所耗费的机器仍是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用lvs。nginx

****************************************************************************************************************web

Nginx的优势:
性能好,能够负载超过1万的并发。
功能多,除了负载均衡,还能做Web服务器,并且能够经过Geo模块来实现流量分配。
社区活跃,第三方补丁和模块不少
支持gzip proxy
缺点:
不支持session保持。
对后端realserver的健康检查功能效果很差。并且只支持经过端口来检测,不支持经过url来检测。
nginx对big request header的支持不是很好,若是client_header_buffer_size设置的比较小,就会返回400bad request页面。
Haproxy的优势:
它的优势正好能够补充nginx的缺点。支持session保持,同时支持经过获取指定的url来检测后端服务器的状态。
支持tcp模式的负载均衡。好比能够给MySQL的从服务器集群和邮件服务器作负载均衡。
缺点:
不支持虚拟主机(这个很傻啊)
目前没有nagios和cacti的性能监控模板
LVS的优势:
性能好,接近硬件设备的网络吞吐和链接负载能力。
LVS的DR模式,支持经过广域网进行负载均衡。这个其余任何负载均衡软件目前都不具有。
缺点:
比较重型。另外社区不如nginx活跃。算法

*************************************************************************************sql

 

如今网络中常见的的负载均衡主要分为两种:一种是经过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F五、Radware和Array等商用的负载均衡器,也有相似于LVS、Nginx、HAproxy的基于Linux的开源的负载均衡策略,数据库

商用负载均衡里面NetScaler从效果上比F5的效率上更高。对于负载均衡器来讲,不过商用负载均衡因为能够创建在四~七层 协议之上,所以适用 面更广因此有其不可替代性,他的优势就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,因此对于规模较小的网络服务来讲暂时尚未须要使用。apache

另外一种负载均衡的方式是经过软件:比较常见的有LVS、Nginx、HAproxy等,其中LVS是创建在四层协议上面的,而另外Nginx和HAproxy是创建在七层协议之上的,下面分别介绍关于

LVS:使用集群技术和Linux操做系统实现一个高性能、高可用的服务器,它具备很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS的特色是:

一、抗负载能力强、是工做在网络4层之上仅做分发之用,没有流量的产生;

二、配置性比较低,这是一个缺点也是一个优势,由于没有可太多配置的东西,因此并不须要太多接触,大大减小了人为出错的概率;

三、工做稳定,自身有完整的双机热备方案;

四、无流量,保证了均衡器IO的性能不会收到大流量的影响;

五、应用范围比较广,能够对全部应用作负载均衡;

六、LVS须要向IDC多申请一个IP来作Visual IP,所以须要必定的网络知识,因此对操做人的要求比较高。

Nginx的特色是:

一、工做在网络的7层之上,能够针对http应用作一些分流的策略,好比针对域名、目录结构;

二、Nginx对网络的依赖比较小;

三、Nginx安装和配置比较简单,测试起来比较方便;

四、也能够承担高的负载压力且稳定,通常能支撑超过1万次的并发;

五、Nginx能够经过端口检测到服务器内部的故障,好比根据服务器处理网页返回的状态码、超时等等,而且会把返回错误的请求从新提交到另外一个节点,不过其中缺点就是不支持url来检测;

六、Nginx对请求的异步处理能够帮助节点服务器减轻负载;

七、Nginx能支持http和Email,这样就在适用范围上面小不少;

八、不支持Session的保持、对Big request header的支持不是很好,另外默认的只有Round-robin和IP-hash两种负载均衡算法

HAProxy的特色是:

一、HAProxy是工做在网络7层之上。

二、可以补充Nginx的一些缺点好比Session的保持,Cookie的引导等工做

三、支持url检测后端的服务器出问题的检测会有很好的帮助。

四、更多的负载均衡策略好比:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现

五、单纯从效率上来说HAProxy更会比Nginx有更出色的负载均衡速度。

六、HAProxy能够对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。

***********************************************************************************************

 

如今网站发展的趋势对网络负载均衡的使用是随着网站规模的提高根据不一样的阶段来使用不一样的技术:

第一阶段:利用Nginx或者HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,须要必定的负载均衡,可是 仍然规模较小没有专业的维护团队来进行维护,也没有须要进行大规模的网站部署。这样利用Nginx或者HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就能够。这时是第一选择

第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能知足,这时使用LVS或者商用F5就是首要选择,Nginx此 时就做为LVS或者 F5的节点来使用,具体LVS或者F5的是选择是根据公司规模,人才以及资金能力来选择的,这里也不作详谈,可是通常来讲这阶段相关人才跟不上业务的提 升,因此购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提高,这时不管从开发适合自身产品的定制,以及下降成原本讲开源的LVS,已经成为首选,这时LVS会成为主流。

最终造成比较理想的状态为:F5/LVS<—>Haproxy<—>Squid/Varnish<—>AppServer。

相关文章
相关标签/搜索