0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LVS和Nginx及HAProxy的工作原理你了解吗

马哥Linux运维 来源:未知 2019-05-03 12:31 次阅读

当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。

在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。

最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。

LVS、Nginx、HAProxy是目前使用最广泛的三种软件负载均衡软件。

一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。

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

LVS

LVS是LinuxVirtualServer的简称,也就是Linux虚拟服务器。现在LVS已经是Linux标准内核的一部分,从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。

LVS 的体系结构

LVS架设的服务器集群系统有三个部分组成:

(1) 最前端的负载均衡层,用 Load Balancer 表示

(2) 中间的服务器集群层,用 Server Array 表示

(3) 最底端的数据共享存储层,用 Shared Storage 表示

LVS 负载均衡机制

LVS不像HAProxy等七层软负载面向的是HTTP包,所以七层负载可以做的URL解析等工作,LVS无法完成。

LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

所谓四层负载均衡,也就是主要通过报文中的目标地址和端口。七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容。

LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

NAT模式:网络地址转换

NAT(NetworkAddressTranslation)是一种外网和内网地址映射的技术。

NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。

当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RSIP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。

DR模式:直接路由

DR模式下需要LVS和RS集群绑定同一个VIP(RS通过将VIP绑定在loopback实现),但与NAT的不同点在于:请求由LVS接受,由真实提供服务的服务器(RealServer,RS)直接返回给用户,返回的时候不经过LVS。

详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

DR负载均衡模式数据分发过程中不修改IP地址,只修改mac地址,由于实际处理请求的真实物理IP地址和数据请求目的IP地址一致,所以不需要通过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。因此,DR模式具有较好的性能,也是目前大型网站使用最广泛的一种负载均衡手段。

LVS 的优点

抗负载能力强、是工作在传输层上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。

配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。

工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived。

无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会受到大流量的影响。

应用范围比较广,因为LVS工作在传输层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等。

LVS 的缺点

软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx、HAProxy+Keepalived的优势所在。

如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

Nginx

Nginx是一个强大的Web服务器软件,用于处理高并发的HTTP请求和作为反向代理服务器做负载均衡。具有高性能、轻量级、内存消耗少,强大的负载均衡能力等优势。

Nignx 的架构设计

相对于传统基于进程或线程的模型(Apache就采用这种模型)在处理并发连接时会为每一个连接建立一个单独的进程或线程,且在网络或者输入/输出操作时阻塞。这将导致内存和CPU的大量消耗,因为新起一个单独的进程或线程需要准备新的运行时环境,包括堆和栈内存的分配,以及新的执行上下文,当然,这些也会导致多余的CPU开销。最终,会由于过多的上下文切换而导致服务器性能变差。

反过来,Nginx的架构设计是采用模块化的、基于事件驱动、异步、单线程且非阻塞。

Nginx大量使用多路复用和事件通知,Nginx启动以后,会在系统中以daemon的方式在后台运行,其中包括一个master进程,n(n>=1)个worker进程。所有的进程都是单线程(即只有一个主线程)的,且进程间通信主要使用共享内存的方式。

其中,master进程用于接收来自外界的信号,并给worker进程发送信号,同时监控worker进程的工作状态。worker进程则是外部请求真正的处理者,每个worker请求相互独立且平等的竞争来自客户端的请求。请求只能在一个worker进程中被处理,且一个worker进程只有一个主线程,所以同时只能处理一个请求。(原理同Netty很像)

Nginx 负载均衡

Nginx负载均衡主要是对七层网络通信模型中的第七层应用层上的http、https进行支持。

Nginx是以反向代理的方式进行负载均衡的。反向代理(ReverseProxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

Nginx实现负载均衡的分配策略有很多,Nginx的upstream目前支持以下几种方式:

轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

Nginx 的优点

跨平台:Nginx可以在大多数UnixlikeOS编译运行,而且也有Windows的移植版本

配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置

非阻塞、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数

事件驱动:通信机制采用epoll模型,支持更大的并发连接

Master/Worker结构:一个master进程,生成一个或多个worker进程

内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)

内置的健康检查功能:如果Nginx代理的后端的某台Web服务器宕机了,不会影响前端访问

节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头

稳定性高:用于反向代理,宕机的概率微乎其微

Nginx 的缺点

Nginx 仅能支 持http、https 和 Email 协议,这样就在适用范围上面小些,这个是它的缺点

对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。不支持Session的直接保持,但能通过ip_hash来解决

HAProxy

HAProxy支持两种代理模式TCP(四层)和HTTP(七层),也是支持虚拟主机的。

HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。

HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。

HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。

HAProxy负载均衡策略非常多:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 云计算
    +关注

    关注

    38

    文章

    7344

    浏览量

    135703
  • 服务器
    +关注

    关注

    12

    文章

    8111

    浏览量

    82485
  • 数据库
    +关注

    关注

    7

    文章

    3590

    浏览量

    63365

原文标题:一文详解 LVS、Nginx 及 HAProxy 工作原理( 附大图 )

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    开关电源芯片银联宝r7731的工作原理你了解吗?

    `开关电源芯片也叫电源IC有什么作用呢?银联宝认为就是控制电源的合理输入进出咯,那工作原理你又知道?供电(启动):芯片的VDD脚接一个电容到地,一个电阻到输入电压正极,上电时输入电压通过电阻给电容
    发表于 08-21 17:25

    HAproxy组成与负载均衡集群

    haproxy负载均衡配置
    发表于 04-25 06:29

    PHP开发中,如何处理负载、高并发?

    。目前使用最为广泛的负载均衡软件是NginxLVSHAProxy。我分别来说下三种的优缺点:Nginx的优点是:工作在网络的7层之上,可
    发表于 07-03 10:33

    为什么要了解电机的工作原理

    为什么要了解电机的工作原理在我们生活场景中,电机的应用非常广泛,电风扇、洗衣机驱动电机、冰箱散热风扇、玩具车驱动电机、电脑散热风扇、抽油烟机风扇等,几乎所有的家用电器都会用到电机,可以说没有了电机
    发表于 08-27 06:49

    计算机的工作原理你知道哪些

    计算机的工作原理你需要有一定的电学知识,然后就可以去看模拟电路和数字电路相关的书籍了,了解完这两个东西后你就能基本明白计算机是怎么运作起来的了。这里只做简单回答。简单回答的意思是说,这个回答旨在让
    发表于 09-06 08:45

    了解电器的功能和工作原理

    电器修理、电路设计都是要通过分析电路原理图,了解电器的功能和工作原理,才能得心应手开展工作的。作为从事此项工作的同志,首先要有过硬的基本功,要能对有技术参数的电路原理图进行总体
    发表于 09-09 09:01

    偏置电路稳定工作原理你了解多少

    放大电路在电工电子电路中随处可见,因此掌握放大电路基础是非常有必要的。电流负反馈偏置电路放大电路中,通常使用的是电流负反馈偏置电路,本文主要讲解偏置电路稳定工作原理。一、元件介绍b:三极管基极。Ib
    发表于 01-21 09:29

    超详细!使用 LVS 实现负载均衡原理及安装配置详解

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginxlvshaproxy,商业的硬件负载均衡设备F5、Netscale。这里主要
    发表于 01-21 14:01 974次阅读

    一文读懂Nginx、Apache工作原理

    在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 可以承受3万以上的并发连
    发表于 04-26 11:33 2371次阅读

    keepalived及LVS概述,KeepAlived工作原理

    Checkers :此功能模块主要负责真实服务器的健康检查( HealthChecking ),是Keepalived最主要的功能之一,因为HealthChecking是负载均衡功能稳定运行的基础, LVS集群节点的故障隔离和重新加入均依赖于HealthChecking的结果。
    的头像 发表于 06-25 14:08 5.4w次阅读
    keepalived及<b class='flag-5'>LVS</b>概述,KeepAlived<b class='flag-5'>工作原理</b>

    将英特尔Quickassist技术与HAProxy的配合使用

    了解如何将HAProxy *与英特尔®QuickAssist技术软件配合使用。
    的头像 发表于 11-12 06:29 2661次阅读

    一文带你深入了解 Nginx

    今天我们来谈谈什么是Nginx? 什么是Nginx? Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX
    的头像 发表于 05-13 15:01 1847次阅读
    一文带你深入<b class='flag-5'>了解</b> <b class='flag-5'>Nginx</b>!

    docker-haproxy HAProxy的Docker映像

    ./oschina_soft/docker-haproxy.zip
    发表于 05-13 10:42 1次下载
    docker-<b class='flag-5'>haproxy</b> <b class='flag-5'>HAProxy</b>的Docker映像

    搭建Keepalived+Lvs+Nginx高可用集群负载均衡

      一、Nginx安装 二、配置反向代理 三、配置负载均衡 四、upstream指令参数 五、配置ssl证书提供https访问 六、配置ha nginx 七、LVS(Linux Virtual
    的头像 发表于 06-25 15:39 1804次阅读
    搭建Keepalived+<b class='flag-5'>Lvs+Nginx</b>高可用集群负载均衡

    linux运维面试题目及答案

    LVSNginxHAproxy有什么区别?工作中你怎么选择? LVS:是基于四层的转发 HA
    发表于 08-20 10:52 581次阅读
    linux运维面试题目及答案