lvs和nginx均可以用做多机负载方案,他们各有优缺点,在生产环境中须要好好分析实际状况并加以利用。
1、lvs的优点:
1.抗负载能力强,由于lvs工做方式的逻辑是很是简单的,并且工做再网络层第4层,仅做请求分发用,没有流量,因此在效率上基本不须要太过考虑。lvs通常不多出现故障,即便出现故障通常也是其余地方(如内存、CPU等)出现问题致使lvs出现问题。
2.配置性地,这一般是一大劣势同时也是一大优点,由于没有太多的可配置的选项,因此除了增减服务器,并不须要常常去触碰它,大大减小了人为出错的概率。
3.工做稳定,由于其本省抗负载能力很强,因此稳定性高也是瓜熟蒂落的事,另外各类lvs都有完整的双机热备方案,因此一点不用担忧均衡器自己会出什么问题,节点出现故障的话,lvs会自动判别,因此系统总体式很是稳定的。
4.无流量,lvs仅仅分发请求,而流量并不从它自己出去,因此能够利用它这点来作一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。
5.lvs基本上能支持全部应用,由于绿色工做在第4层,因此它能够对几乎全部应用作负载均衡,包括http、数据库、聊天室等。
另外:lvs也不是彻底能判别节点故障的,好比在wlc分配方式下,集群里有一个节点没有配置vip,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机器。目前这个问题还在进一步测试中。因此用lvs也得多多小心为妙。
2、nginx和lvs做对比的结果:
1.nginx工做在网络的第7层,因此它能够针对http应用自己来作分流策略,好比针对域名、目录结构等,相比之下lvs并不具有这样的功能,因此nginx单凭这点能够利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,因此常常要去触碰触碰,由lvs的第2条优势来看,触碰多了,人为出现问题的概率也就会大。
2.nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区份内外网,若是是同时拥有内外网的节点,就至关于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内而且lvs使用direct方式分流,效果较能获得保证。另外注意,lvs须要向托管商至少申请多于一个ip来作visual ip,貌似是不能用本省的ip来作VIP的。要作好lvs管理员,确实得跟进学习不少有关网络通讯方面的知识,就再也不是一个http那么简单了。
3.nginx安装和配置比较简单,测试起来也很方便,由于它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间,由于同上所述,lvs对网络依赖性比较大,不少时候不能配置成功都是由于网络问题而不是配置问题,出了问题要解决也相应的会麻烦的多。
4.nginx也一样能承受很高负载且稳定,但负载度很稳定度差lvs还有几个等级:nginx处理全部流量因此受限于机器IO和配置;自己的bug也仍是难以免的;nginx没有现成的双机热备方案,因此跑在单机上仍是风险比较大,单机上的事情全都很难说。
5.nginx能够检测到服务器内部的故障,好比根据服务器处理网页返回的状态码、超时等等,而且会把返回错误的请求从新提交到另外一个节点。目前lvs中ldirectd也能支持针对服务器内部的状况来监控,但lvs的原理使其不能重发请求。重发请求这点,好比用户正在上传一个文件,而处理该上传的节点恰好在上传过程当中出现故障,nginx会把上传切到另外一台服务器从新处理,而lvs就直接断掉了,若是是上传一个很大的文件或者很重要的文件的话,用户可能会所以而恼火。
6.nginx对请求的异步处理能够帮助节点服务器减轻负载,键入使用Apache直接对外服务,那么出现不少的窄带连接时Apache服务器将会占用大量内存而不能释放,使用多于一个nginx作Apache代理的话,这些窄带连接会被nginx挡住,Apache上就不会堆积过多的请求,这样就减小了至关多的内存占用。这点使用squid也有相同的做用,即便squid自己配置为不缓存,对Apache仍是有很大帮助你的。lvs没有这些功能,也就没法能比较。
7.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也能够做为网页静态服务器。
具体的应用还得具体分析,若是是比较小的网站(日pv<1000万),用nginx就彻底能够了,若是机器也很多,能够用dns轮询,lvs所耗费的机器仍是比较多的;大型网站或者重要的服务,机器不发愁的时候要多多考虑利用lvs。
说明:
使用nginx+keepalived实现负载均衡,解决单点与高流量并发问题。为何要用nginx而不用lvs?
7个理由:
1.高并发链接:官方测试可以支撑5万并发链接,在实际生产环境中跑到2——3万并发链接数。
2.内存消耗少:在3万并发链接数下,开启的10个nginx进程才消耗150M内存(150*10=150M)。
3.配置文件很是简单:风格跟程序同样通俗易懂。
4.成本低廉:nginx为开源软件,能够无偿使用。而购买F5 big-ip、netscaler等硬件负载均衡交换机则须要十多万至几十万人民币。
(使用nginx作七层负载均衡的理由?)
5.支持rewrite重写规则:可以根据域名、url的不一样,将http请求分到不一样的后端服务器群组。
6.内置的健康检查功能:若是nginx proxy后端的某台web服务器宕机了,不会影响前端访问。
7.节省带宽:支持gzip压缩,能够添加浏览器本地缓存的header头。
进一步说明:
keepalived是linux下面实现vrrp备份路由的高可靠性运行件。基于keepalived设计的服务模式可以真正作到主服务器和备份服务器故障时ip瞬间无缝交接。
nginx是基于linux2.6内核中epoll模型http服务器,与Apache进程派生模式不一样的是nginx进程基于master+slave多进程模型,自身具备很是稳定的子进程管理功能。在master进程分配模式下,master进程永远不进行业务处理,只是进行任务分发,从而达到master进程的存活高可靠性,slave进程全部的业务信号都由主进程发出,slave进城全部的超时任务都会被master终止,属于阻塞式人物模型。
服务器ip存活检测是由keepalived本身自己完成的,将2台服务器配置成keepalived互为主辅关系,任意一方机器故障对方都可以将ip接管过去。
keepalived的服务器ip经过其配置文件进行管理,依靠其自身的进程去肯定服务器的存活状态,若是在须要对服务器进程在线维护的状况下,只须要停掉被维护机器的keepalived服务进程,另一台服务器就可以接管该台服务器的全部应用。