Haproxy 超详细总结 四层负载均衡VS七层负载均衡 LVS VS Haproxy VS Nginx
四层和七层负载均衡的区别
所谓的四层就是ISO参考模型中的第四层。四层负载均衡也称为四层交换机,它主要是通过分析 IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。常见的基于四层的负载均衡器有 LVS、F5等。
以常见的TCP应用为例,负载均衡器在接收到第一个来自客户端的SYN 请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标 IP地址修改为后端服务器IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。
从这个过程来看,一个TCP连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。整个过程下图所示。
图 四层负载均衡转发原理
同理,七层负载均衡器也称为七层交换机,位于OSI的最高层(即应用层)此时负载均衡器支持多种应用协议,常见的有HTTP、FTP、SMIP等。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为"内容交换器"。比如,对于Web服务器的负载均衡,七层负载均衡器不但可以根据"IP+端口"的方式进行负载分流。还可以根据网站的 URL、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台
Web服务器分别对应中英文两个网站,两个域名分别是A、B,要实现访问A域名时进入中文网站,访问B域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载均衡器有HAproxy、Nginx等。
这里仍以常见的TCP应用为例,由于负载均衡器要获取到报文的内容,因此只能先代替后端服务器和客户端建立连接,接着才能收到客户端发送过来的报文内容,然后再根据该报文中特定字段加上负载均衡器中设置的负载均衡算法来决定最终选择的内部服务器。纵观整个过程,七层负载均衡器在这种情况下类似于一个代理服务器。整个过程如下图所示。
图 七层负载均衡代理实现原理
对比四层负载均衡和七层负载均衡运行的整个过程,可以看出,在七层负载均衡模式下, 负载均衡器与客户端及后端的服务器会分别建立一次 TCP连接,而在四层负载均衡模式下,仅建立一次TCP连接。由此可知,七层负载均衡对负载均衡设备的要求更高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。
LVS
LVS过来一个TCP连接之后呢,TCP连接会转发到负载均衡器上面来,负载均衡器不会做类似于代理这样一个处理。仅仅会对报文的信息做修改,为什么要修改报文信息因为是工作在四层,对网络的报文头也就是传输这块做出修改。比如修改报文目标的传输地址。或者修改源地址信息等等。这些刚好是在网络层实现的机制。
报文转发的机制是基于四层,基于网络层的原理结构实现。
将发过来的报文头的信息做了修改之后呢再把信息转发到后端的一个真实的real server节点上,其实就是转发连接的方式方式将请求发到了后端真实服务器上面去,四层负载更多的是转发连接。
负载均衡器先去接收,接收到之后将信息的报文做一定的修改,修改完之后这个报文的信息再次转发到目标服务器之上。LVS DR模式完全就是通过修改报文头的机制来实现的。
通俗一点说就是负载均衡器接收客户端的请求,因为负载均衡器是直接面对客户端的,比如客户端发来一个SVN请求之后,负载均衡器会根据负载均衡算法去指定后端的服务,就是将请求发送到后端哪台real server节点上,在进行负载均衡策略之后同时会将客户端发送过来的请求的IP地址修改为后端服务器的IP地址,因为要将请求转发给后端的IP。所以会将目标IP地址修改为后端服务器的IP地址,注意是转发,通过修改报文头信息。这样一个请求就完成了。这样看来一个TCP连接是客户端和服务端直接建立的,也就是客户端和realserver直接建立的,作为四层负载均衡仅仅只是做了一个转发,转发的概念可以理解为一个桥接。负载均衡只不过起到的作用是类似于路由器转发的动作
四层负载均衡典型特征就是转发请求,然后由客户端服务端和后端的real server直接建立连接
Haproxy
七层负载均衡也称作为7层的交换机,也就是应用层。因为是在应用层,所以支持很多的功能,比如http,ftp包括SMTP等等都是工作在七层。那么七层负载均衡支持的功能也就是非常多的,协议也非常多
七层负载均衡的实现:首先客户端会发送一个请求到七层的负载均衡器上面。那么客户端会以七层的负载均衡器建立起独立的一条连接,连接建立起来之后呢将请求发送到负载均衡器上面,接收到该请求之后会对报文做一定的处理,处理完成之后再由七层负载均衡器在和real server再建立起另外一条独立的连接,然后将请求发送给后端的real server服务器上。这就完成客户端和后端real serevr通信的完整过程
整个处理过程是建立了两条独立的tcp连接,客户端和负载均衡器建立了一条TCP连接,然后负载均衡器和后端的real server又建立了一条TCP连接。七层负载均衡实现的就是代理的功能,和nginx的反向代理一样。
HAProxy是借助于操作系统的技术特性来实现性能最大化的,因此,在使用HAProxy时,对操作系统进行性能调优是非常重要的。在业业务系统方面,HAProxy非常适用于那些并发量特别大且需要持久连接或四层和七层处理机制的Web系统,例如门户网站或电商网站等。另外。HAProxy也可用于MySQL数据库(读操作)的负载均衡。
四层负载均衡和七层负载均衡实现的不同
首先在七层负载均衡模式下,客户端和负载均衡器,负载均衡器和后端的real server分别建立TCP连接,即建立两条TCP连接。
四层,客户端和Real Server仅仅只建立了一条连接,负载均衡器仅仅只起着转发这样的一个功能,只不过在转发的过程当中将IP报文头做个修改。但是连接始终还是一条连接。这就是四层和七层负载均衡最大的不同地方
可以看到七层负载均衡器对负载均衡要求更加高,因为一个正常连接都会建立两条独立的TCP连接。由于建立了两条TCP连接,那么在一个大并发的负载均衡模式下面很显然七层的这种负载均衡处理能力肯定是低于四层的。
七层返回数据模式:Real Server将请求处理完毕之后纯粹的将请求发回给负载均衡处理,负载均衡处理器再将请求转发给客户端,正常的TCP连接基于七层的,进要经过负载均衡器出也要经过负载均衡器,就是进出都要经过负载均衡器,那么对于负载均衡器要求一定是很高的,一旦负载均衡器出现问题,那么整个负载均衡系统可能马上就出现了问题。
四层返回数据模式:请求客户端到达服务端之后,服务端响应返回数据有两种方式。一种是直接将数据返回给客户端,而不经过中间的四层负载均衡器,这是经常使用的DR方式。另外一种方式是当客户端将请求发到服务端之后,在响应请求和返回数据的话,会将数据返回给四层负载均衡器,然后由四层负载均衡器转发给客户端,这是NAT模式。Real Server直接返回数据给客户端由隧道模式和DR模式,如果将数据返回给四层负载均衡器就是NAT模式,这些你就能够判断哪些性能会高哪些性能会差。很明显DR模式和隧道模式对于整个集群的性能是有一个很大的提高的。因为不会再去占用负载均衡器的性能和资源了
七层没有直接返回给客户端的机制,任何的请求不管是什么调度模式还是什么负载均衡算法,都会将请求再次返回给负载均衡器
对七层负载均衡器更加高的要求,那么一定要对负载均衡器做高可用,避免出现问题,因为负载量大,出问题几率高,另外硬件配置各个方面都要很高。
上面就是区别和优缺点 ,四层负载均衡器代表就是LVS 七层Haproxy Nginx(除了反向代理还能负载均衡)
Haproxy VS Nginx
Nginx和Haproxy相比较:Haproxy是一个更加专业的负载均衡器,不像Nginx,Nginx开始时作为HTTP服务器的,更多的功能是在HTTP Server上面。但时haproxy不一样。Haproxy的初衷就是做一款专业的负载均衡器,在实现负载均衡上面会有更加专业的功能。
HAProxy VS LVS的异同
Haproxy和LVS又有相同的地方:
Haproxy和LVS应用场景都一样,都是去实现负载均衡。应用最多的场景就是web应用,数据库应用等。
Haproxy和LVS又有不同的地方:
Haproxy是基于七层负载均衡的软件,而LVS是基于四层的。这里所指的七层模型是指网络当中的ISO七层模型。比如第一层物理层,第二层数据链路层,第三层网络层等等,作为LVS软件是工作在四层之下,也就是在网络层面做的负载均衡,也就是通过IP层和UDP层
下面就这两种负载均衡软件的异同做一个简单总结:
1)两者都是软件负载均衡产品,但是 LVS是基于Linux操作系统实现的一种软负载均衡,而HAProxy 是基于第三应用实现的软负载均衡。
2)LVS是基于四层的IP负载均衡技术,而 Haproxy 是基于四层和七层技术、可提供TCP和 HTTP应用的负载均衡综合解决方案。
3)LVS工作在 ISO模型的第四层,因此其状态监测功能单一,而Haproxy在状态监测方面功能强大,可支持端口、URL、脚本等多种状态检测方式。
4)Haproxy 虽然功能强大,但是整体处理性能低于四层模式的 LVS负载均衡,而LVS拥有接近硬件设备的网络吞吐和连接负载能力。
综上所述,HAProy和LMS各有优缺点,没有好坏之分,要选择哪个作为负载均衡器,要以实际应用环境来决定。
目录 返回
首页