`
maosheng
  • 浏览: 560274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LVS Nginx HAProxy 比较

 
阅读更多
负载均衡 (Load Balancing) 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力,同时能够提高网络的灵活性和可用性。

目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LVS,Nginx及HAProxy;高可用软件有Heartbeat、Keepalived;成熟的架构有LVS+Keepalived、Nginx+Keepalived、HAProxy+keepalived、DRBD+Heartbeat.

目前关于网站架构一般比较合理流行的架构方案:Web前端采用Nginx/HAProxy+ Keepalived作负载均衡器;后端采用 MySQL数据库一主多从和读写分离,采用LVS+Keepalived的架构。当然要根据项目具体需求制定方案。   


LVS:

LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS的优点:

  1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响,对内存和cpu资源消耗比较低;
  2、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的;
  3、应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡;
  4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
  5. 无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会受到大流量的影响,所以可以利用它这点来做一些线路分流之用。


LVS的缺点:

  1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。
  2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

LVS/DR如何处理请求报文:

1)接收client的请求,根据你设定的负载均衡算法选取一台realserver的ip;

2)以选取的这个ip对应的mac地址作为目标mac,然后重新将IP包封装成帧转发给这台realserver;

3)在hash table中记录连接信息。

vs/dr做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少。

数据包、数据帧的大致流向是这样的:client --> VS --> RS --> client


Nginx:

Nginx的优点:

1、工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;
2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在,lvs就比较依赖于网络环境;
3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大;
4、可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,lvs中 ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求;
6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势;
7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;
8. Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有 lighttpd了,不过 lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。
9. Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多

Nginx的缺点:

1、Nginx对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
2、Nginx仅能支持http和Email,这个它的弱势,lvs所支持的应用在这点上会比nginx更多。
3、Nginx的Session的保持,Cookie的引导能力相对欠缺。


HAProxy:

HAProxy的优点:

1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy支持TCP协议的负载均衡转发,可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法较多,达到8种;

   ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
   ②static-rr,表示根据权重;
   ③leastconn,表示最少连接者先处理;
   ④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法;
   ⑤ri,表示根据请求的URI;
   ⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
   ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
   ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求


Nginx 和 LVS 对比的总结:

1)Nginx 工作在网络的 7 层,所以它可以针对 http 应用本身来做分流策略,比如针对域名、目录结构等,相比之下 LVS 并不具备这样的功能,所以 Nginx 单凭这点可利用的场合就远多于LVS了;但 Nginx 有用的这些功能使其可调整度要高于 LVS,所以经常要去触碰触碰,触碰多了,人为出问题的 几率也就会大。

2)Nginx 对网络稳定性的依赖较小,理论上只要 ping 得通,网页访问正常, Nginx就能连得通,这是 Nginx 的一大优势! Nginx 同时还能区 分内外网,如果是同时拥有内外网的节点,就相当于 单机拥有了备份线路; LVS 就比较依赖于网络环境,目前来看服务器在同一网段内并且 LVS 使用 direct 方式分流,效果较能得到保证。另外注意, LVS 需要向托管商至少申请多一个 ip 来做 Visual IP,貌似是不能用本身的 IP 来做 VIP 的。
要做好 LVS 管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个 HTTP 那么简单了。

3)Nginx 安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。LVS 的安装和配置、测试就要花比较长的时间了; LVS 对网络依赖比较大,很多时候不能配置成功都是 因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。

4)Nginx 也同样能承受很高负载且稳定,但负载度和稳定度差 LVS 还有几个等级:Nginx 处理所有流量所以受限于机器 IO 和配置;本身的 bug 也还是难以避免的。

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

6)Nginx 对请求的异步处理可以帮助节点服务器减轻负载,假如使用 apache 直接对外服务,那么出现很多的窄带链接时 apache 服务器将会占用大 量内存而不能释放,使用多一个 Nginx 做 apache 代理的话,这些窄带链接会被 Nginx 挡住,apache 上就不会堆积过多的请求,这样就减少了相 当多的资源占用。这点使用squid 也有相同的作用,即使 squid 本身配置为不缓存,对 apache 还是有 很大帮助的。

7)Nginx 能支持 http、 https 和 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 是最完美的方案了。具体的应用还得 具体分析,如果 是比较小的网站(日 PV 小于 1000 万),用 Nginx 就完全可以了,如果机器也不少,可以用DNS 轮询, LVS 所耗费的机器还是比较多 的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用 LVS。

现在对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:
1)第一阶段:利用 Nginx 或 HAProxy 进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍 然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。
这样利用Nginx 或 HAproxy 就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用 HTTP 协议就可以。这时是第一选择。

2)第二阶段:随着网络服务进一步扩大,这时单点的 Nginx 已经不能满足,这时使用 LVS 或者商用 Array 就是首要选择, Nginx 此时就作为 LVS 或者 Array 的节点来使用,具体 LVS 或 Array 的是选择是根据公司规模和预算来选择,Array 的应用交付功能非常强大,本人在某项目中使用过,性价比也远高于 F5,商用首选!但是一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。

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

最终形成比较理想的基本架构为: Array/LVS — Nginx/Haproxy —Squid/Varnish — AppServer。










分享到:
评论

相关推荐

    LVS Nginx HAProxy 三种负载均衡器优缺点

    ### LVS、Nginx 和 HAProxy 三种负载均衡器优缺点分析 #### LVS 负载均衡器 **优点:** 1. **抗负载能力强:**LVS 工作在网络第四层,只负责分发请求而不产生额外流量,这使得它在负载均衡软件中的性能表现非常...

    LVS+HAPROXY+NGINX+mysql+N7200.html

    LVS+HAproxy+NGINX+mysql+nf综合实验过程,详细步骤,可以参考。

    Nginx、LVS及HAProxy负载均衡软件的优缺点详解.docx

    Nginx、LVS 及 HAProxy 是目前使用最广泛的三种负载均衡软件,每种软件都有其特点和优缺点。 Nginx 的优点: 1. 工作在网络的 7 层之上,可以针对 http 应用做一些分流的策略。 2. 对网络稳定性的依赖非常小,理论...

    高性能业务架构解决方案(HAproxy+Keepalive)

    Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件。对于大型的,需要进行高并发的网站或者对网络不太严格的场景,可以使用Nginx;对于大型的Web服务器的时候可以使用Haproxy;对性能有严格要求的时候可以使用...

    nginx+haproxy.docx

    ### Nginx与Haproxy在七层负载均衡中的应用 #### 一、七层负载均衡简介 负载均衡是现代互联网架构中不可或缺的一部分,旨在提高应用程序的可用性和响应速度。根据处理的数据包层面不同,负载均衡可以分为四层...

    linux服务器之LVS、Nginx和HAProxy负载均衡器对比总结

    本篇文章将对比三种常用的Linux服务器负载均衡器:LVS、Nginx和HAProxy,探讨其各自的特点、适用场景和常用算法。 LVS(Linux Virtual Server)是基于IP层的负载均衡器,它具有以下显著特点: 1. 高抗负载能力:...

    Haproxy+Nginx+Tomcat实现动静页面分离

    一、Haproxy概述; 二、Haproxy原理实现; 三、Nginx、LVS、Haproxy对比; 四、Haproxy配置文件讲解; 五、案例:Haproxy+Nginx+Tomcat搭建高可用集群;

    多种负载均衡部署文档,实操笔记 Nginx,lvs(dr,nat,fullnat),haproxy等,dpdk-lvs

    在本文中,我们将深入探讨几种常见的负载均衡器——Nginx、LVS(DR、NAT、FullNAT)以及Haproxy,并分析它们的优缺点。同时,我们还将详细讲解LVS的配置,包括Keepalived参数的解释。 **Nginx负载均衡** Nginx是一...

    SaltStack之Pillar和Jinja部署LVS+Keepalived+Haproxy源码(srv.tar.gz)

    本资源包含本人用SaltStack之Pillar和Jinja实现一健部署LVS+Keepalived+Haproxy的源码(srv.tar.gz),本人测试通过,有需要的可以下载下来学习。具体可参考本人博客:http://t.cn/ROB68fc 资源内容: ├── pillar...

    第三十四章:Haproxy+Nginx+Tomcat实现动静页面分离1

    三、Haproxy与Nginx、LVS对比 Nginx同样作为七层代理,其优势在于配置简单、非阻塞的高并发处理、低内存消耗,以及内置的健康检查。与LVS(四层代理)相比,Nginx更适合处理静态内容和反向代理,而LVS则在大型企业...

    PHP高级工程师必知必会Nginx+keepalived+MongoDB+haproxy+Sphinx实现分布式集群部署实战视频

    本文将围绕“Nginx + keepalived + MongoDB + haproxy + Sphinx”这一技术栈,详细介绍如何实现一个稳定的分布式集群部署方案。 #### 二、关键技术解析 ##### 1. Nginx **定义**:Nginx是一款高性能的HTTP和反向...

    Linux 41 道面试题及答案.docx

    本资源提供了41个Linux面试题及答案,涵盖了运维、系统管理、 RAID、LVS、Nginx、HAproxy、Squid、Varinsh 等多个方面的知识点。 一、运维 * 运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线...

    LVS负载均衡软件Keepalived高可用:keepalived-2.0.10

    本文将深入探讨Keepalived的核心功能、工作原理以及如何与其他服务如Nginx、Haproxy、MySQL等结合,构建高效、可靠的分布式系统。 首先,Keepalived的核心功能包括健康检查、故障转移和负载均衡。它通过监控服务...

    Nginx最佳实用培训-万达IT内部培训资料

    2. 负载均衡器:如LVS、HAProxy配合Nginx,提高整体系统的可用性和负载能力。 十、Nginx与微服务架构 1. 在微服务场景中的应用:作为API Gateway,对微服务进行路由、鉴权、限流等操作。 通过这份万达IT内部培训...

    NGINX的功能介绍

    2. **与LVS的比较**:LVS只支持第四层负载均衡,而NGINX和HAProxy都支持更高级别的负载均衡。 3. **与硬负载(如F5)的比较**:硬负载解决方案通常具有更高的稳定性和性能,但由于其高昂的成本和复杂的维护需求,...

    高性能业务架构解决方案(LVS+Keepalived)

    在众多的负载均衡方案中,Nginx、HAProxy 和 LVS 各有所长。Nginx 适用于网络环境不太严格的情况,尤其适合对静态资源处理要求较高的场景;HAProxy 更倾向于大型 Web 服务器的负载均衡需求;而 LVS 则因其出色的性能...

    haproxy-2.0.5_for_windows.rar

    单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;   5、HAProxy可以对mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10...

Global site tag (gtag.js) - Google Analytics