系统原理分析架构-六-负载均衡(定义及介绍及LVS/Nginx/Haproxy比较)

负载均衡定义:
负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都 具备等价的地位,均可以单独对外提供服务而无须其余服务器的辅助。经过某 种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器 上,而接收到请求的服务器独立地回应客户的请求。 均衡负载可以平均分配客户请求到服务器列阵,籍此提供快速获取重要数据, 解决大量并发访问服务问题。这种 群集技术 能够用最少的投资得到接近于大型 主机的性能。这种技术能够运用在流量拥塞时、访问路径过长、网民数量大增、运行这种系统负载、大大的提升了系统的可靠性、负载均衡技术解决网络拥塞的问题、处理大量并发的访问服务能力、提升服务器的响应速度、为用户提供更好的访问质量。因此说负载均衡是智能化、高性能、灵活性的技术。

设计思想:
一台普通服务器的处理能力只能达到每秒几万个到几十万个请求,没法在一秒钟内处理上百万个甚至更多的请求。但若能将多台这样的服务器组成一个系统,并经过相关技术将全部请求平均分配给全部服务器,那么这个系统就彻底拥有每秒钟处理几百万个甚至更多请求的能力。这就是 负载均衡 最初的基本设计思想。

负载均衡的几种实现技术:
http重定向: 当http代理(好比浏览器)向web服务器请求某个URL后,web服务器能够经过http响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理须要继续请求这个新的URL,完成自动跳转。

DNS负载均衡 这也是最先的负载均衡技术。在DNS负载均衡服务器中能够为不一样的地址用同一个名字、对于一个名字不一样的客户访问不一样的WEB服务器获得其中一个地址、从而达到负载均衡的目的。DNS负载均衡不能区分服务器的区别。


代理负载均衡 :普通用户访问Web服务时(其实访问的是反向代理负载均衡器),反向代理负载均衡器,再 将请求转发给内部多台Web服务器,这样讲外部访问请求根据配置策略负载到内部的多台Web服务器,从而达到负载均衡的目的。


内部地址外部地址转换负载均衡 将外部的IP地址映射到多个内部地址、地址转换网管将每一个链接均匀转换不一样的内部服务器地址、而后外部计算机就各自与本身转换获得的地址的服务器进行链接达到负载分担的目的。


硬件负载均衡: 例如F五、思科会有硬件负载均衡器,来处理请求负载。不过价格相对昂贵。


四层VS七层负载均衡:

       ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会经过一个虚拟MAC地址接收请求,而后再分配到真实的MAC地址;三层负载均衡会经过一个虚拟IP地址接收请求,而后再分配到真实的IP地址;四层经过虚拟IP+端口接收请求,而后再分配到真实的服务器;七层经过虚拟的URL或主机名接收请求,而后再分配到真实的服务器。linux

② 所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。 好比四层的负载均衡,就是经过发布三层的IP地址(VIP),而后加四层的端口号,来决定哪些流量须要作负载均衡,对须要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个链接的全部流量都一样转发到同一台服务器处理。七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,好比同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否须要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,若是你的Web服务器分红两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就能够当用户来访问你的域名时,自动辨别用户语言,而后选择对应的语言服务器组进行负载均衡处理。web

③ 负载均衡器一般称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡之外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。算法


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

LVS:
一、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
二、工做在网络4层,经过vrrp协议转发(仅做分发之用),具体的流量由linux内核处理,所以没有流量的产生。
二、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
三、应用范围比较广,能够对全部应用作负载均衡;
四、不支持正则处理,不能作动静分离。
五、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小链接)、wlc(权重最小链接)
六、配置 复杂,对网络依赖比较大,稳定性很高。

Ngnix:
一、工做在网络的7层之上,能够针对http应用作一些分流的策略,好比针对域名、目录结构;
二、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
三、Nginx安装和配置比较简单,测试起来比较方便;
四、也能够承担高的负载压力且稳定,通常能支撑超过1万次的并发;
五、对后端服务器的健康检查,只支持经过端口来检测,不支持经过url来检测。
六、Nginx对请求的异步处理能够帮助节点服务器减轻负载;
七、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
八、不支持Session的直接保持,但能经过ip_hash来解决。、对Big request header的支持不是很好,
九、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)

HAProxy的特色是:
一、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
二、可以补充Nginx的一些缺点好比Session的保持,Cookie的引导等工做
三、支持url检测后端的服务器出问题的检测会有很好的帮助。
四、更多的负载均衡策略好比:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
五、单纯从效率上来说HAProxy更会比Nginx有更出色的负载均衡速度。
六、HAProxy能够对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
九、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)

三大主流软件负载均衡器适用业务场景:
一、网站建设初期,能够选用Nigix/HAproxy做为反向代理负载均衡(或者流量不大均可以不选用负载均衡),由于其配置简单,性能也能知足通常的业务场景。若是考虑到负载均衡器是有单点问题,能够采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
二、网站并发达到必定程度以后,为了提升稳定性和转发效率,可使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。

注:Niginx与Haproxy比较:Niginx支持七层、用户量最大,稳定性比较可靠。Haproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来讲Haproxy因为弥补了一些Niginx的缺点用户量也不断在提高。


更多关于负载均衡使用实战,请关注后续博文。
相关文章
相关标签/搜索