浅谈 Nginx和LVS的各类优缺点

VS的负载能力强,由于其工做方式逻辑很是简单,仅进行请求分发,并且工做在网络的第4层,没有流量,因此其效率不须要有过多的忧虑。html

LVS基本能支持全部应用,由于工做在第4层,因此LVS能够对几乎全部应用进行负载均衡,包括Web、数据库等。前端

注意:LVS并不能彻底判别节点故障,好比在WLC规则下,若是集群里有一个节点没有配置VIP,将会致使整个集群不能使用。还有一些其余问题,目前尚需进一步测试。linux

Nginx工做在网路第7层,因此能够对HTTP应用实施分流策略,好比域名、结构等。相比之下,LVS并不具有这样的功能,因此Nginx可以使用的场合远多于LVS。而且Nginx对网络的依赖比较小,理论上只要Ping得通,网页访问正常就能连通。LVS比较依赖网络环境。只有使用DR模式且服务器在同一网段内分流,效果才能获得保证。nginx

Nginx能够经过服务器处理网页返回的状态吗、超时等来检测服务器内部的故障,并会把返回错误的请求从新发送到另外一个节点。目前LVS和LDirectd 也支持对服务器内部状况的监控,但不能从新发送请求。web

好比用户正在上传一个文件,而处理该上传信息的节点恰好出现故障,则Nginx会把上传请求从新发送到另外一台服务器,而LVS在这种状况下会直接断掉。Nginx还能支持HTTP和Email(Email功能不多有人使用),LVS所支持的应用在这个电商比Nginx更多。数据库

Nginx一样能承受很高负载而且能稳定运行,因为处理流量受限于机器I/O等配置,因此负载能力相对较差。apache

Nginx 安装、配置及测试相对来讲比较简单,由于有相应的错误日志进行提示。LVS的安装、配置及测试所花的时间比较长,由于LVS对网络以来比较大,不少时候有可能由于网络问题而配置不能成功,出现问题时,解决的难度也相对较大。Nginx自己没有现成的热备方案,因此在单机上运行风险较大,建议KeepAlived配合使用。另外,Nginx能够做为LVS的节点机器使用,充分利用Nginx的功能和性能。固然这种状况也能够直接使用Squid等其余具有分发功能的软件。后端

具体应用具体分析。若是是比较小型的网站(每日PV小于100万),用户Nginx就彻底能够应对,若是机器也很多,能够用DNS轮询。LVS后用的机器较多,在构建大型网站或者提供重要服务且机器较多时,可多加考虑利用LVS。浏览器

 

 

关于Nginx:缓存

一.概念:

Nginx("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMCP/POP3/SMTP服务器。

二.用途:

Nginx做为负载均衡服务器:既能够在内部直接支持Rails和PHP程序对外进行服务,也能够支持做为HTTP代理服务器对外进行服务;Nginx做为邮件代理服务器。

三.优点:

1.Nginx专为性能优化而开发,实现上很是注重效率。它支持内核Poll模型,能经受高负载的考验,有报告代表能支持高达 50,000个并发链接数。

2.Nginx具备很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速链接时,也极可能会致使服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显很是缓慢了。Nginx采起了分阶段资源分配技术,使得它的CPU与内存占用率很是低。

3.Nginx支持热部署。它的启动特别容易,而且几乎能够作到7*24不间断运行,即便运行数个月也不须要从新启动。你还可以在不间断服务的状况下,对软件版本进行升级。

4.Nginx采用master-slave模型,可以充分利用SMP的优点,且可以减小工做进程在磁盘I/O的阻塞延迟。当采用select()/poll()调用时,还能够限制每一个进程的链接数。

5.Nginx代码质量很是高,代码规范,手法成熟,模块扩展也很容易。

6.Nginx采用了一些OS提供的最新特性如,从而大大提升了性能。

 

关于LVS:

一.  概念:

LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统。宗旨是使用集群技术和Linux操做系统实现一个高性能、高可用的服务器。

二.  技术:

1. 技术简介:LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具备很好的吞吐率,将请求均衡地转移到不一样的服务器上执行,且调度起自动屏蔽服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,并且无需修改客户端和服务器端的程序。

2. 集群的三层结构:

负载调度器:整个集群对外面的前端机,负责将客户的请求发送到一组服务器执行,而客户认为服务来自一个IP地址(虚拟IP地址)上的。采用IP负载均衡技术、基于内容请求分发技术或者二者相结合。

服务器池:是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

共享存储:它为服务器池提供一个共享的存储区,容易使得服务服务器拥有相同的内容。提供相同的服务。共享存储一般是数据库、网络文件系统、分布式文件系统。

3. 分布式锁管理器:

当不一样服务器上的应用程序同事读写访问分布式文件系统上同一资源时,应用程序的访问冲突须要消解才能使得资源处于一致状态,这就须要分布式锁管理器。

4. 监视器(Graphic Monitor):

Graphic Monitor是为系统管理员提供整个集群系统的监视器,它能够监视系统的状态。Graphic Monitor是基于浏览器的,因此不管管理员在本地仍是异地均可以监测系统的情况。

三.LVS三种负载均衡:

1. VS/NAT

VS/NAT是一种最简单的方式,全部的服务器只须要将本身的网关指向Director便可。

优点:服务器能够运行任何支持TCP/IP的操做系统,只须要一个IP地址配置在调度器上,服务器组能够用私有的IP地址。

缺点:伸缩能力有限,调度器自己可能称为系统的新瓶颈。

2. VS/TUN

调度器根据各个服务器的负载状况,动态地选择一台服务器,将请求报文封装在另外一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封得到原来目标地址为 VIP 的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,因此就处理这个请求,而后根据路由表将响应报文直接返回给客户。

优点:负载调度器枝江请求调度到不一样的后端服务器,后端服务器将应答直接返回给用户,极大地增长负载调度器调度的服务器数量

3. VS/DR

VS/DR方式是经过改写请求报文中的MAC地址部分来实现的。调度器和服务器必需在物理上有一个网卡经过不间断的局域网相连。在VS/DR中,调度器根据各个服务器的负载状况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改成选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。调度器的VIP地址对外可见,而服务器的VIP对外是不可见的。

优点:同VS/TUN方法同样,提升了LVS集群系统的伸缩性。这种方法没有IP隧道的开销,效率最高。可是要求负载调度器与服务器都有一块网卡连在同一物理网段上,服务器网络设备不作ARP响应。

 

补充:关于分布式文件系统:

1. 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不必定直接链接在本地节点上,而是经过计算机网络与节点相连。

2. 分布式文件系统的设计基于客户机/服务器模式。

3. 分布式文件系统能够有效解决数据的存储和管理难题:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络。

4. 系统分类:

NFS(网络文件系统):NFS的实质在于用户间计算机的共享。用户能够联结到共享计算机并像访问本地硬盘同样访问共享计算机上的文件。

Andrew系统:经过基于单元的结构生成一种可管理的分布式环境。一个单元是某个独立区域中文件服务器和客户机系统的集合,这个独立区域由特定的机构管理。

KASS系统:基于JAVA的纯分布式文件系统,功能相似于DFS、GFS、Hadoop,经过HTTP WEB为企业的各类信息系统提供底层文件存储及访问服务,搭建企业私有云存储服务平台。

5. 无状态系统NFS和回呼系统AFS区别: 

无状态系统:服务器并不保存其客户机正在缓存的文件的信息。所以,客户机必须协同服务器按期检查是否有其余客户改变了本身正在缓存的文件。

回呼系统:服务器记录它的那些客户机的所做所为,并保留它们正在缓存的文件信息。服务器在一个客户机改变了一个文件时使用应答技术通知其它客户机。

lvs与nginx区别

 

 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服务进程,另一台服务器就可以接管该台服务器的全部应用。

相关文章
相关标签/搜索