Linux操作文档——负载均衡总结


一、HAProxy

1、HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的井发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动,单一进程模型,此模型支挂韭常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space)。
2、七层负载均衡器也称为七层交换机,位于OSI的最高层,即应用层,此时负载均衡器支持多种应用协议,常见的有HTTP、FTP、SMTP等。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”,比如,对于Web服务器的负载均衡,七层负载均衡器不但可以根据“IP+端口”的方式进行负载分流,还可以根据网站的URL、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台Web服务器分别对应中英文两个网站,两个域名分别是A、B,要实现访问A域名时进入中文网站,访问B域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载均衡器有HAproxy、Nginx等。
3、所谓的四层就是ISO参考模型中的第四层。四层负载均衡也称为四层交换机,它主要是通过分析IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。常见的基于四层的负载均衡器有LVS、P5等。以常见d的TCP应用为例,负载均衡器在接收到第一个来自客户端的SYN请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标IP地址修改为后端服务器IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个TCP连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由器的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。

二、HAproxy与LVS的异同

(1)两者都是软件负载均衡产品,但是LVS基Linux操作系统实现的一种软负载均,而HAProxy是基于第三应用实现的软负载均衡。
(2)LVS是基于四层的IP负载均衡技术,而HAProxy基于四层和七层技术、提供TCP和HTTP应用的负载均衡综合解决方案。
(3)LVS工作在ISO模型的第四层,因此其状态监测功能单一,而HAProxy在状态监测方面功能强天,可支持端口、URL、脚本等多种状态检测方式。
(4)HAProxy虽然功能强大,但是整体处理性能低于四层模式的LVS负载均衡,而LVS拥有接近硬件设备的网络吞吐和连接负载能力。
综上所述, HAProxy和LVS各有优缺点,没有好坏之分,要选择哪个作为负载均衡器,要以实际的应用环境来决定。
5、由于HAProxy可以工作在七层模型下,因此,要实现HAProxy的强大功能,一定要使且强大灵活的ACL规则,通过ACL规则可以实现基于HAProxy的智能负载均衡系统。HAProxy通过ACL规则完成两种主要的功能,分别是:
(1)通过设置的ACL规则检查客户端请求是否合法。如果符合ACL规则要求,那么就将放行,反之,如果不符合规则,则直接中断请求。
(2)符合ACL规则要求的请求将被提交到后端的backend服务器集样,进而实现基于ACI规则的负载均衡。

三、HAProxy支持的负载均衡算法

(1)roundrobin,表示简单的轮询,负载均衡基础算法;
(2)static-rr,表示根据权重;
(3)leastconn,表示最少连接者先处理;
(4)source,表示根据请求源IP;
(5)uri,表示根据请求的URI;
(6)url_param,表示根据请求的URL参数来进行调度;
(7)hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
(8)rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TCP请求。
常用的负载均衡算法
(1)轮询算法:roundrobin
(2)根据请求源IP算法:source
(3)最少连接者先处理算法:lestconn

四、使用HAProxy的Web监控平台

HAProxy虽然实现了服务的故障转移,但是在主机或者服务出现故障的时候,并不能发出通知告知运维人员,这对于及时性要求很高的业务系统来说,是非常不便的,不过,HAProxy似乎也考虑到了这一点,在新的版本中HAProxy推出了一个基于Web的监控平台,通过这个平台可以查看此集群系统所有后端服务器的运行状态,在后端服务或服务器出现故障时,监控页面会通过不同的颜色来展示故障信息,这在很大程度上解决了后端服务器故障报警的问题,运维人员可通过监控这个页面来第一时间发现节点故障,进而修复故障。

五、HAproxy的优点

(1)免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的P5相媲美。
(2)根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。
(3)haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attackbots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
(4)haproxy支持全透明代理(己具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux2.4/2.6内核打了tcpproxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
(5)haproxy现多于线上的MySQL集群环境,我们常用于它作为MySQL(读)负载均衡。
(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。
(7)HAProxy支持虚拟主机,许多朋友说它不支持虚拟主机是错误的,通过测试我们知道,HAProxy是支持虚拟主机的。

六、负载均衡的几种实现技术

(1)http重定向:当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。
(2)DNS负载均衡:这也是最早的负载均衡技术。在DNS负载均衡服务器中可以为不同的地址用同一个名字、对于一个名字不同的客户访问不同的WEB服务器得到其中一个地址、从而达到负载均衡的目的。DNS负载均衡不能区分服务器的区别。
(3)代理负载均衡:普通用户访问Web服务时(其实访问的是反向代理负载均衡器),反向代理负载均衡器,再将请求转发给内部多台Web服务器,这样讲外部访问请求根据配置策略负载到内部的多台Web服务器,从而达到负载均衡的目的。
(4)内部地址外部地址转换负载均衡:将外部的IP地址映射到多个内部地址、地址转换网管将每个连接均匀转换不同的内部服务器地址、然后外部计算机就各自与自己转换得到的地址的服务器进行连接达到负载分担的目的。
(5)硬件负载均衡:例如F5、思科会有硬件负载均衡器来处理请求负载。不过价格相对昂贵。

七、四层VS七层负载均衡

(1)所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的三层负载均衡和基于IP地址的三层负载均衡。换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。
(2)所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。比如四层的负载巧衡,就是通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
(3)负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。

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

LVS:
1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
3、稳定性、可靠性好,自身有完美的热备方案;(如:LVStKeepalived)
4、应用范围比较广,可以对所有应用做负载均衡;
5、不支持正则处理,不能做动静分离。
6、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
7、配置复杂,对网络依赖比较大,稳定性很高。
Nginx:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小,理论上能ping通就能进行负载功能;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
8、不支持Session的直接保持,但能通过ip-hash来解决。对Big request header的支持不是很好。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip
哈希)
HAProxy的特点是:
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对MySQL进行负载均衡,对后端的DB节点进行检测和负载均衡。
7、支持负载均衡算法: Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL),rdp-cookie(根据cookie)

九、三大主流软件负载均衡器适用业务场景:

1、网站建设初期,可以选用NigixHAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
2、网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比NginxHAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。
注: Niginx与Haproxy比较:Nginx支持七层、用户量最大,稳定性比较可靠。Haproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来说Haproxy由于弥补了一些Niginx的缺点用户量也不断在提升。

十、Haproxy的功能:

(1)路由HTTP请求到后端服务器,基于cookie作会话绑定。
(2)能够将多个请求反代至后端主机完成负载均衡的效果。
(3)主服务器失败时能自动切换到备服务器上。
(4)接受特殊的端口连接完成服务监控。
(5)拒绝新连接时不会关闭已经连接的请求。
(6)在两个方向上添加、修改和删除HTTP首部。
(7)根据特定匹配条件阻止相应请求。
(8)通过一个URI接口web应用程序为通过身份验证的用户提供报告详细状态。
(9)虽然主要提供http反代,但也能反代几乎所有基于tcp的协议。
(10)有强大的后端主机健康检测功能。
(11)支持单一进程模型,事件驱动,弹性二叉树。

猜你喜欢

转载自blog.csdn.net/g950904/article/details/110025495
今日推荐