开发者学堂课程【企业集群平台架构设计与实现:lvs/haproxy/keepalived:企业集群平台架构设计与实现haproxy篇1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/391/detail/5013
企业集群平台架构设计与实现 haproxy 篇1
内容简介:
一、四层和七层负载均衡的区别
二、HAProxy 与 LVS 的异同
一、四层和七层负载均衡的区别
都知道 LVS 是四层的负载均衡,HAProxy 是七层的负载均衡。具体的区别看下面的图就清楚了,这个图就是四层负载均衡转发的原理,首先看这个图,在客户端 Client ,会发送一个请求到负载均衡服务器上,负载均衡器以上收到客户端发送的请求后,会通过设定的负载均衡算法去选择一个最佳的后端服务器,后端的服务器叫 Real Server ,选择完之后会将请求的目标报文地址修改为后端服务器的IP地址,这里需要注意一下,接下来直接将报文转发给后端服务器,这样就完成了一个请求,那整体上来看,整个的通信流程,就是 Client 发送一个请求,然后中间的负载均衡只做了一个报文的转发,转发到后端服务器 Real Server 上,整个流程只建立了一个链接就完成了负载均衡,这个是基于四层负载均衡一个非常重要的原理。
所谓的四层就是 ISO 参考模型中的第四层。四层负载均衡也称为四层交换机,它主要是通过分析 IP 层及 TCP/UDP 层的流量实现的基于 IP 加端口的负载均衡。常见的基于四层的负载均衡器有 LVS、F5 等。
以常见的 TCP 应用为例,负载均衡器在接收到第一个来自客户端的 SYN 请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标 IP 地址修改为后端服务器 IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个 TCP 连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由器的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。整个过程下图所示。
同理,七层负载均衡器也称为七层交换机,位于 OSI 的最高层,即应用层,当然七层的负载均衡支持七层也支持四层,他的基础实现是从第一层到第七层都是可以支持的,那么如果支持了七层的负载均衡技术的话,就会支持很多常见的应用协议,此时负载均衡器支持多种应用协议,常见的有 HTTP、FTP、SMTP 等。这些协议都是可以通过七层负载均衡技术去实现。此处具体是怎么实现的,可以看下面这张图。这张图的请求原理和刚才四层是差不多的,但也有略微不同,首先也是客户端发送一个请求,客户端请求到七层负载均衡器,之后负载均衡器接收到请求后,会根据负载均衡的算法,去选择后端的 Real Server ,把请求再次传递给后端,这里不是转发的概念,首先是由后端服务器与负载均衡器建立第二条连接,第一条连接则是客户端 Client 与负载均衡,很明显,这个过程是建立了两条链接,当这个连接建立成功后,负载均衡器才会把请求转交给后端 Real Server ,这样来实现的一个负责调度。这样看下来,他的整个过程是建立了两个连接来实现,首先是客户端和负载均衡器建立连接,再是负载均衡器与后端服务器建立连接。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为"内容交换器"。比如,对于 Web 服务器的负载均衡,七层负载均衡器不但可以根据"IP+端口"的方式进行负载分流,还可以根据网站的 URL 、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台 Web 服务器分别对应中英文两个网站,两个域名分别是 A、B,要实现访问 A 域名时进入中文网站,访问B 域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载均衡器有 Haproxy、Nginx 等。
这里仍以常见的 TCP 应用为例,由于负载均衡器要获取到报文的内容,因此只能先代替后端服务器和客户端建立连接,接着,才能收到客户端发送过来的报文内容,然后再根据该报文中特定字段加上负载均衡器中设置的负载均衡算法来决定最终选择的内部服务器。纵观整个过程,七层负载均衡器在这种情况下类似于一个代理服务器。整个过程如下图所示。
通过以上两个图可以看到,在四层的模式下有一个独立的连接就可以实现,在七层模式下,建立了两个体系连接才实现,这里可以看出,在七层负载均衡下它的功能实现会更加强大,但由于它是接近了两条独立的连接,所以他负载均衡器的设备要求会更高,它的负载承载量会更大,因为要建立转发很多链接。通过这里也可以发现七层负载均衡,类似于看到的在 http 中一个代理的功能。对硬件本身包括功能方面的要求,以上就是四层和七层负载均衡器的差异。对比四层负载均衡和七层负载均衡运行的整个过程,可以看出,在七层负载均衡模式下,负载均衡器与客户端及后端的服务器会分别建立一次 TCP 连接,而在四层负载均衡模式下,仅建立一次 TCP 连接。由此可知,七层负载均衡对负载均衡设备的要求更高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。
二、HAProxy 与 LVS 的异同
两种负载均衡软件的异同总结∶
1.两者都是软件负载均衡产品,但是 LVS 是基于 Linux 操作系统实现的一种软负载均衡,也就是基于 linux 内核本身实现的负载均衡技术,而 HAProxy 是基于第三应用实现的软负载均衡,是独立于内核之外的,也就是说使用起来与内核没有多大的关系。
2.LVS 是基于四层的 IP 负载均衡技术,而 HAProxy 是基于四层和七层技术、也就是说一层到七层都可以完成负载均衡技术,功能上要比LVS强大很多。因此HAProxy可提供 TCP 和 HTTP 应用的负载均衡综合解决方案。
3.LVS 工作在 ISO 模型的第四层,因此其状态监测功能单一,而 HAProxy 在状态监测方面功能强大,可支持端口、URL、脚本等多种状态检测方式。
4.HAProxy 虽然功能强大,但是性能方面要比 LVS,低很多。因为他的功能强大所以他的处理和转发的各种性能没有LVS 在四层的结构下处理要高,整体处理性能低于四层模式的 LVS 负载均衡,而 LVS 拥有接近硬件设备的网络吞吐和连接负载能力。
综上所述,HAProxy 和 LVS 各有优缺点,没有好坏之分,要选择哪个作为负载均衡器,要以实际的应用环境来决定。举个简单的例子,如果是想仅仅做一些端口的负载的话,只用 LVS 就够了,因为它的性能是比较好的,能实现这个功能,那么如果是想基于一个http层一个应用层协议上去运行毫无疑问,就必须要选择 HAProxy ,只有它才能实现 http 层的功能。