本文对三大主流负载均衡器LVS、Nginx、HAproxy进行对比和详解,以及适合的场景,技术选型等等
LVS
简介
1 | LVS的是Linux Virtual Server的简写,翻译为Linux虚拟服务器,即一个虚拟的服务器集群系统, |
LVS相关的几种IP:
1 | VIP :(virtual IP) LVS服务器上接收外网数据报文的网卡IP地址 |
工作模式:
1 | LVS常用的工作模式有DR模式、TUN模式、以及NAT模式 |
DR模式
1 | 直接路由: Director Route |
工作原理
1 | 每个RS(Real Server)上都有两个IP:VIP和RIP,但是VIP是隐藏的,即不能提供解析等功能, |
特点
1 | 1.各DIP(VS)必须与 RIP(RS) 在同一局域网内(即具有相同的广播域),且两个有相同的目标地址(vip); |
优缺点
优点:
1 | 负载均衡器VS只负责将请求包分发给物理服务器RS,而物理服务器RS将应答包直接发给用户。所以,负载均衡器VS能处理很巨大的请求量。 |
缺点:
1 | 这种方式需要所有的DIR和RIP都在同一广播域;不支持异地容灾。 |
总结:
1 | LVS/DR是三种模式中性能最高的一种模式,比LVS-NAT模式下负载的RS serve更多,通常在100台左右,对网络环境要求更高,也是日常应用的最多的一种工作模式。 |
TUN模式
1 | 隧道模式: tunnel |
工作原理
1 | 它的连接调度和管理与LVS/NAT中的一样,利用ip隧道技术的原理,即在原有的客户端请求包头中再加一层IP Tunnel的包头ip首部信息, |
特点
1 | 1.RIP、VIP、DIP全是公网地址 |
优缺点
优点:
1 | 1.不需要调度应答报文,负载能力强; |
缺点:
1 | 1.所有的服务器必须支持“IP Tunneling”协议,需安装内核模块,安装复杂; |
NAT模式
1 | NAT(Network address translation)即网络地址转换,作为一种过渡解决手段,可以用来减少对全球合法IP地址的需求。 |
工作原理
1 | 当数据包到达VS时,VS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到数据包以后,仿佛是客户端直接发给它的一样。 |
特点
1 | 1.RS应该使用私有地址,RS的网关必须指向DIP |
优缺点
优点:
1 | 集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。 |
缺点:
1 | 扩展性有限;当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。 |
总结:
1 | LVS无论NAT及DR模式,均要求VS和RS在同一个网段内,NAT需要把VS当作各个RS的默认网关, |
Nginx
简介
1 | Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。 |
工作原理
1 | Nginx由内核和模块组成。Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block, |
Nginx的模块从结构上分为:
1 | 核心模块:HTTP模块、EVENT模块和MAIL模块 |
Nginx的模块从功能上分为:
1 | Core : 核心模块;构建nginx基础服务、管理其他模块。 |
1 | Nginx的核心模块:主要负责建立nginx服务模型、管理网络层和应用层协议、以及启动针对特定应用的一系列候选模块。 |
Nginx模块处理流程:
1 | 1.客户端发送HTTP请求 |
Nginx请求处理流程:
1 | Nginx在启动时会以daemon形式在后台运行,采用多进程+异步非阻塞IO事件模型来处理各种连接请求。 |
1 | 1.操作系统提供的机制(例如 epoll, kqueue 等)产生相关的事件。 |
Nginx进程模型
1 | Nginx默认采用多进程工作方式,Nginx启动后,会运行一个master进程和多个worker进程。 |
功能
1 | Nginx能做: 正向代理 反向代理 负载均衡 HTTP服务器(包含动静分离) |
正向代理
1 | 正向代理(Forward Proxy):通常都被简称为代理,就是在用户无法正常访问外部资源, |
1 | 正向代理的工作原理就像一个跳板,比如:我访问不了google.com,但是我能访问一个代理服务器A,A能访问google.com, |
1 | 正向代理是一个位于客户端和原始服务器之间的服务器。为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器), |
反向代理
1 | 反向代理(Reverse Proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器, |
1 | 举个例子,比如我想访问 http://www.test.com/readme,但www.test.com上并不存在readme页面,于是他是偷偷从另外一台服务器上取回来, |
1 | 反向代理服务器对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求, |
总结
1 | 正向代理:针对客户端而言,代理服务器代理客户端,转发请求,并将获得的内容返回给客户端。 |
负载均衡
1 | 负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 |
1.轮询(rr)
1 | 按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 |
2.权重(weight)
1 | 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 |
1 | upstream westos{ |
3.ip哈希(ip_hash)
1 | 上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据), |
1 | ip_hash: 来自同一个IP的请求会分发到相同的后端服务器 |
1 | upstream westos{ |
第三方策略:
1.fair
1 | 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 |
1 | upstream backend{ |
2.url_hash
1 | 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 |
1 | upstream backend{ |
(4).HTTP服务器
1 | Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离, |
优点
(1).支持高并发
1 | 官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。 |
(2).内存消耗少
1 | Nginx+PHP(FastCGI)服务器,在3万并发连接下,开启10个Nginx进程消耗150MB内存,15MB*10=150MB,开启的64个PHP-CGI进程消耗1280内存,20MB*64=1280MB,加上系统自身消耗的内存,总共消耗不到2GB的内存。 |
(3).成本低廉
1 | 购买F5BIG-IP、NetScaler等硬件负载均衡交换机,需要十多万到几十万人民币,而Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费试用,并且可用于商业用途。 |
(4).配置简单
1 | 网络和程序一样通俗易懂,即使,非专用系统管理员也能看懂。 |
(5).支持Rewrite重写
1 | Rewrite:重定向;能够根据域名、URL的不同,将http请求分到不同的后端服务器群组。 |
(6).内置健康检查
1 | 如果NginxProxy后端的某台Web服务器宕机了,不会影响前端的访问。 |
(7).节省带宽
1 | 支持GZIP压缩,可以添加浏览器本地缓存的Header头。 |
(8).支持热部署
1 | Nginx支持热部署,它的自动特别容易,并且,几乎可以7天*24小时不间断的运行, |
HAproxy
简介
1 | HAProxy是一个使用C语言编写的自由及开放源代码软件,它提供高可用性、负载均衡,以及基于TCP(第四层)和HTTP(第七层)的应用程序代理。 |
原理
1 | HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。 |
HAProxy的负载均衡算法:
1 | 1. roundrobin:简单的轮询 |
优点
1 | 1.免费开源,稳定性也是非常好。单HAproxy也跑得不错,稳定性可以与硬件级的F5相媲美。 |
总结
比较LVS、Nginx、HAproxy优缺点
1 | 三大主流负载均衡器: LVS Nginx HAproxy |
LVS
优点:
1 | 1.抗负载能力强,工作在网络4层之上,仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。 |
缺点:
1 | 1.软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。 |
Nginx
优点:
1 | 1.工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构。它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx单凭这点可利用的场合就远多于LVS了。 |
缺点:
1 | 1.Nginx仅能支持http、https和Email协议,适用范围小。 |
HAproxy
优点:
1 | 1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机; |
缺点:
1 | 1. 不支持POP/SMTP协议 SPDY协议; |
适用场景
1 | 1.网站建设初期,可以选用Nigix/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。 |