一.简单介绍

1.1 LVS

LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器,LVS由用户空间的ipvsadm和内核空间的ipvs组成,ipvsadm用来定义规则,ipvs利用ipvsadm定义的规则工作。

1.2 Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。

1.3 HAProxy

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡以及基于TCP和HTTP的应用程序代理。

二.工作原理介绍

2.1 LVS

2.1.1 LVS特点

通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器集群。它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。LVS主要特点有以下几个方面:

优势:

  • 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强、稳定性最好、对内存和CPU资源消耗极低。
  • 成本低廉:硬件负载均衡器少则几万,多则几十万上百万,LVS只需要一台服务器就能免费部署使用,性价比极高。
  • 配置简单:LVS配置非常简单,仅需几行命令即可配置完成,也可以写成脚本进行管理。
  • 支持多种算法:支持多种轮调算法,可根据业务场景灵活调配进行使用,支持多种工作模型:可以根据业务场景使用不同的工作模式来解决生产环境请求处理问题。
  • 应用范围广:因为LVS工作在4层,所以它几乎对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等。

缺点:工作在四层,不支持七层规则修改,机制过于庞大,不适合小规模应用。

2.1.2 LVS常见的术语

| 名称 | 解释 |

| ---- | ---- | ---- |

| ipvsadm | 用户空间的命令行工具,用于管理集群服务及集群服务上的RS等 |

| IPVS | 工作在内核上的netfilter INPUT HOOK之上的程序,可根据用户定义的集群实现请求转发 |

| VS | Virtual Server、虚拟服务|

| Director,Balancer| 负载均衡器,分发器 |

| RS | Real Server 后端请求处理服务器 |

| CIP | Client IP,客户端IP |

| VIP | Director Virtual IP,负载均衡器虚拟IP |

| DIP | Director IP,负载均衡器IP |

| RIP | Real Server IP,后端请求处理服务器IP|

2.1.3 LVS的工作模式

LVS常用的工作模式有:DR(直接路由)模式、TUN模式、以及NAT模式

2.1.4 工作原理

【此部分参考:https://blog.csdn.net/gui951753/article/details/80316565】



LVS工作原理:

  • 当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。
  • 当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。
  • LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将经过INPUT链送至用户空间,交给用户空间的进程来处理。
  • 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
  • 最后经由POSTROUTING链发往后端服务器。

2.2 Nginx

2.2.1 Nginx特点

优势:

  • 工作在7层网络之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构、它的正则规则比HAProxy更加强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx单凭这点可利用的场合就远远多余LVS了,location使用灵活、应用场合广泛,工作在应用层。
  • Nginx对网络稳定性的依赖比较小,理论上能ping通就可以进行负载均衡,这个也是它的优势。相反LVS对网络依赖性比较大。
  • Nginx安装配置简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
  • Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
  • Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。
  • Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可以考虑用其作为反向代理加速器。
  • Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了,不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。
  • Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多。

缺点:

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

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

2.2.2 Nginx工作原理

Nginx由内核和模块组成。Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。通常一个location中的指令会涉及一个handler模块和多个filter模块(当然,多个location可以复用同一个模块)。

handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。具体的Nginx处理流程:

1.客户端发送HTTP请求

2.Nginx基于配置文件中的位置选择一个合适的处理模块

3.负载均衡模块选择一台后端服务器 (如果有)

4.处理模块进行处理并把输出缓冲放到第一个过滤模块上

5.第一个过滤模块处理后输出给第二个过滤模块

6.然后第二个过滤模块又到第三个

7.依此类推,最后把响应发给客户端。

2.2.3 Nginx负载均衡策略

Nginx目前支持自带3种负载均衡策略:

  • 轮询(rr):按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。
  • 权重(weight):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream westos{
server 192.168.1.1:80 weight=9;
server 192.168.1.2:80 weight=1;
}
  • ip哈希(ip_hash):上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用ip_hash了,ip_hash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
# ip_hash: 来自同一个IP的请求会分发到相同的后端服务器
upstream westos{
ip_hash;
server 192.168.1.1:80;
server 192.168.1.2:80;
}
  • fair:这是第三方的策略,按照后端服务器响应时间来分配请求,响应时间短的优先分配。
upstream backend{
fair;
server 192.168.1.1:80;
server 192.168.1.2:80;
}
  • url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
upstream backend{
hash $request_uri;
hash_method crc32;
server 192.168.1.1:80;
server 192.168.1.2:80;
}

2.3 HAProxy

2.3.1 HAProxy的特点

优点:

  • 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
  • 支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。能够补充Nginx的一些缺点。
  • HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  • HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
  • HAProxy负载均衡策略非常多,比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)
  • 免费开源,稳定性也是非常好,可以与LVS相媲美;
  • 自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警;

2.3.2 原理

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作

2.3.2 HAProxy负载均衡算法

  • roundrobin:简单的轮询
  • static-rr:权重轮询
  • leastconn:最少连接者优先
  • source:根据请求源IP,这个跟Nginx的ip_hash机制类似
  • ri:根据请求的URI
  • rl_param:表示根据请求的URI参数‘balance url_param’requires an URL parameter name;
  • hdr(name):根据HTTP请求头来锁定每一次HTTP请求
  • rdp-cookie(name):根据cookie来锁定并哈希每一次TCP请求

主流负载均衡器LVS、Nginx、HAProxy介绍的更多相关文章

  1. haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)

    文章转载自: haproxy+keepalived    https://cloud.tencent.com/developer/article/1026385 网络四层和七层的区别   https: ...

  2. LVS Nginx Haproxy对比

    一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术. 具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了: 如果机器不少,可以 ...

  3. 三大主流软件负载均衡器对比(LVS & Nginx & Haproxy)

    LVS:1.抗负载能力强.抗负载能力强.性能高,能达到F5硬件的60%:对内存和cpu资源消耗比较低2.工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流 ...

  4. 3种LVS/Nginx/HAProxy负载均衡器的对比分析

    现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术: 一种是通过硬件来进 行进行,常见的硬件有比较昂贵的NetScaler.F5.Radware和Array等商用 ...

  5. 【三种负载均衡器的优缺点】LVS Nginx HAProxy

    搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...

  6. LVS/Nginx/HAProxy负载均衡器的对比分析

    转自:http://www.blogjava.net/ivanwan/archive/2013/12/25/408014.html LVS的特点是: 抗负载能力强.是工作在网络4层之上仅作分发之用,没 ...

  7. Linux中级之负载均衡(lvs,nginx,haproxy)、中间件

    一.负载均衡的概念 1.系统的扩展方式: scale up:向上扩展 scale out:向外扩展 2.集群类型:  LB(Load Balancing).HA(high availability) ...

  8. Linux LVS Nginx HAProxy 优缺点

    说明:以下内容参考了抚琴煮酒的<构建高可用Linux服务器>第六章内容. 搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按 ...

  9. lvs nginx HAProxy优缺点

    LVS的优点:1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;2、工作稳定,自身有完 ...

  10. LVS Nginx HAProxy 优缺点

    搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...

随机推荐

  1. JDK 24 发布,新特性解读!

    真快啊!Java 24 这两天已经正式发布啦!这是自 Java 21 以来的第三个非长期支持版本,和 Java 22.Java 23一样. 下一个长期支持版是 Java 25,预计今年 9 月份发布. ...

  2. DVWA靶场学习

    暴力破解Brute Force low 输入密码就正常抓包放字典破解得了 uploading-image-528180.png medium 同样的操作发现响应速度变慢了,但是还是能暴力破解,不多说了 ...

  3. Python提取pdf文字信息

    目录 Python提取pdf文字信息 需求 代码 总结 Python提取pdf文字信息 需求 今天教务处导出来我们全年级的成绩,一看吓一跳,我们的名字怎么不在文件名里,只能一个个找吗.事情开始变得离谱 ...

  4. emlog 制作一个小插件(截取正文生成 xx 字摘要)的过程

    blockquote { background: rgba(255, 255, 0, 1); color: rgba(255, 0, 0, 1) !important } 如果熟悉其他 PHP 平台的 ...

  5. dxSpreadSheet的报表demo-关于设计报表模板问题

    学习 dxSpreadSheetReportDesigner过程中发现: dxSpreadSheet通过dxSpreadSheetReportDesigner点击右键出现弹出菜单,自动生成如图的菜单和 ...

  6. fdMemtable FDQuery json之间的一些关系

    1 procedure TForm1.btn1Click(Sender: TObject); 2 var ss,ss1: TStringStream; 3 begin 4 ss := TStringS ...

  7. ADM3251E使用一段时间后损坏

    使用ADM3251E导致CPU发热 - 参考链接: https://bbs.elecfans.com/jishu_1687010_1_1.html 笔者设计的电路板在解决RS232隔离通信的时采用了A ...

  8. java一个校验对象是否为null的豪华大礼包

    自写的校验所有类型是否为null的工具类, 懒人福音,嘎嘎好用. 1 /** 2 * 一个校验对象是否为null的豪华大礼包 3 * 可以校验:Collection,Map,String,Enumer ...

  9. 北京市第六届信息通信行业网络安全技能大赛(初赛)-CTF夺旗阶段 EZRSA writeup

    题目EZRSA EZRSA.py from Crypto.Util.number import * import gmpy2 from flag import m p = getPrime(1024) ...

  10. 使用win10 wsl子系统将 rust 程序静态编译为linux可执行文件

    chapter Ⅰ 事情起因 最近在学习rust, 想把一部分java服务迁移至rust编写,但由于公司服务器都是linux系统,所以在找windows下交叉编译为linux可执行文件的方法,把bin ...