负载均衡四层和七层
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负载均衡四层和七层相关的知识,希望对你有一定的参考价值。
一、概述
按照七层网络协议栈的层划分,负载均衡设备(软件)可以划分为 四层负载均衡和七层负载均衡;其中,四层是基于IP+Port,它能够对报文
按照IP进行分发;七层是基于URL地址的服务器负载均衡,它能够针对七层报文内容进行解析,并根据其中的关键字进行逐包转发。
四层负载均衡的典型代表是LVS,而七层负载均衡的典型代表则为nginx和HAproxy(其中HAproxy既可以做4层负载均衡又可以做七层负载均衡)。
所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载
均衡。 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然
后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实
的服务器。
所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。 比如四层的负载均衡,就是
通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录
下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。七层的负载均衡,就是在四层的基础上
(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可
根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那
么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
二、四层负载均衡
四层负载均衡是基于IP+端口的负载均衡,原理是通过转发请求到后台的服务器,它只负责转发并且会记录当前连接是由哪个服务器处理的,
后续这个连接的请求就由同一台服务器去处理,其实就是相当于长连接,这个长连接一旦打开就会一直处理连接的状态,它的性能就会非常
的高了,四层是基于传输层的,主要基于tcp和udp。
F5硬负载均衡:商业级别,很贵
LVS四层负载均衡:它是Linux内核的负载,和协议没什么关系,主要是负责转发一些 请求的,它是基于CS端的
HA proxy四层负载均衡:同样支持转发功能,并且灵活性非常高,除了做四层以外也能够做七层的负载均衡
Nginx 四层负载均衡:既可以做负载均衡也可以做七层负载均衡,可以用于实现四层协议的转发、代理等等
首先以常见的LVS DR模式来说明四层负载均衡的工作流程:
如上图所示,LVS DR 四层负载均衡工作流程为:
1. 客户端向负载均衡设备发出请求,源地址为客户端IP地址,目的地址为整个集群的VIP地址;
2. 交换机转发客户端请求;
3. LVS负载均衡器利用自带的算法(云眸为wrr)进行算法调度,将请求转发到后端的某一台真实Web服务器;
4. 此时请求报文的源地址仍然为客户端的IP地址,目的地址为集群Vip地址,但是MAC地址已经被LVS负载均衡服务器更改为后端真实服
务器的MAC地址;
5. 后端真实Web服务器发出响应,源地址为集群Vip地址,目的地址为客户端IP地址,不通过LVS负载均衡服务器(报文仍然要通过交换
机)直接与客户端发生联系并回应客户端最初发出的HTTP请求。
三、七层负载均衡
是基于URL或IP的负载均衡,是基于应用层的,是针对http协议的一个负载均衡。
nginx七层负载均衡 对http协议或者邮箱协议做负载均衡,性能强劲
Haproxy 七层负载均衡 灵活性很高
apache七层负载均衡协议 灵活性不高,并发达到百万级的话性能会非常地差
再以常用的Nginx来举例说明七层负载均衡器的工作流程:
如上图所示。七层负载均衡的工作流程如下:
1. 客户端向Nginx发出请求,源地址为客户端ip地址,目的地址为集群VIP地址;
2. 交换机转发请求;
3. Nginx利用自身算法(如 rr wrr ip_hash)进行调度;
4. 建立TCP连接,将客户端的请求发送到后端真实web服务器,此时源地址为客户端ip,目的地址为真实web服务的ip地址;
5. Nginx向后端真实web服务器发出请求;
6. 后端真实web服务器发出响应,此时源地址为后端真实服务器IP地址,目的地址为客户端IP地址;
7. 报文经过Nginx时,源地址被还原为集群VIP地址,目的地址仍然为客户端IP地址。
四、总结
四层做负载一般会使用LVS,Nginx更适合做七层负载。
四层负载均衡主要适用于处理基于tcp、udp协议,重点是用于转发请求,并不是处理请求;
七层一般用于处理http协议的,适用于web服务器;七层是会处理请求的,比如它可以去处理静态资源的一些内容,可以进行压缩或者缓存。
四层负载均衡的优势在于面对大流量冲击的时候,报文只是单方面经过负载均衡器,负载均衡服务器的负担相对很小,不易成为网站或者系
统的瓶颈;
七层负载均衡在分流过程中能够对应用层协议进行深度识别,带来了更精细化均衡的可能;再加上http协议应用广泛,所以七层负载均衡的商
用能力更强;而四层负载均衡因无法对七层业务实现内容转发,所以当前主流业务均采用 LVS+Nginx的方式进行负载均衡,从而充分利用两
种的优势!
以上是关于负载均衡四层和七层的主要内容,如果未能解决你的问题,请参考以下文章