按照七层网络协议栈的层划分,负载均衡设备(软件)可以划分为 四层负载均衡和七层负载均衡;其中,四层是基于IP+Port,它能够对报文按照IP进行分发;七层是基于URL地址的服务器负载均衡,它能够针对七层报文内容进行解析,并根据其中的关键字进行逐包转发。
四层负载均衡的典型代表是LVS,而七层负载均衡的典型代表则为Nginx和HAproxy(其中HAproxy既可以做4层负载均衡又可以做七层负载均衡)。
首先以常见的LVS DR模式来说明四层负载均衡的工作流程:
如上图所示,LVS DR 四层负载均衡工作流程为:
1. 客户端向负载均衡设备发出请求,源地址为客户端IP地址,目的地址为整个集群的VIP地址;
2. 交换机转发客户端请求;
3. LVS负载均衡器利用自带的算法(云眸为wrr)进行算法调度,将请求转发到后端的某一台真实Web服务器;
4. 此时请求报文的源地址仍然为客户端的IP地址,目的地址为集群Vip地址,但是MAC地址已经被LVS负载均衡服务器更改为后端真实服务器的MAC地址;
5. 后端真实Web服务器发出响应,源地址为集群Vip地址,目的地址为客户端IP地址,不通过LVS负载均衡服务器(报文仍然要通过交换机)直接与客户端发生联系并回应客户端最初发出的HTTP请求。
然后再以常用的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地址。
总结:
四层负载均衡的优势在于面对大流量冲击的时候,报文只是单方面经过负载均衡器,负载均衡服务器的负担相对很小,不易成为网站或者系统的瓶颈;
七层负载均衡在分流过程中能够对应用层协议进行深度识别,带来了更精细化均衡的可能;再加上http协议应用广泛,所以七层负载均衡的商用能力更强;而四层负载均衡因无法对七层业务实现内容转发,所以当前主流业务均采用 LVS+Nginx的方式进行负载均衡,从而充分利用两种的优势!