lvs四层转发和nginx七层转发的区别

参考https://cloud.tencent.com/developer/article/1644903

一、LVS(负载均衡器)

1.1 LVS 简介

LVS,英文全称Linux Virtual Server,Linux虚拟服务器,是一个虚拟服务器集群。使用LVS技术要达到的目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群;利用LVS技术实现高可用、可伸缩的网络服务,如www服务、cache服务、DNS服务、FTP服务mail服务等。

1.2 LVS实现负载均衡原理

LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS集群系统的核心软件,它的主要作用是:安装在 Director Server 上,同时在 Director Server上虚拟出一个IP 地址,用户必须通过这个虚拟的 IP 地址访问服务器。这个虚拟 IP 一般称为 LVS 的VIP,即 Virtual IP访问的请求首先经过 VIP 到达负载调度器,然后由负载调度器从Real Server 列表中选取一个服务节点响应用户的请求。

Director Server: 调度服务器,将负载分发到RealServer的服务器上

Real Server: 真实服务器,真正提供应用服务的服务器

VIP: 虚拟IP地址,公布给用户访问的IP地址。比如:www.eti.org 域名就要解析到vip上提供服务

RIP: 真实IP地址,集群节点上使用的IP地址

DIP:Director连接到RealServer的IP地址(Director用于连接内外网络的IP地址,物理网卡上的IP地址。是负载均衡器上的IP)

CIP: 客户端IP

1.3 LVS 三种工作模式

1)NAT

NAT 原理:基于DNAT(目标地址转换)和SNAT(源地址转换)

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP,目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

优点:

集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点

扩展性有限。**当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。**当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

2)DR(是LVS的默认模式,应用最为广泛)

DR 原理:通过改写请求报文的目标MAC地址,将请求发给真实服务器的。而真实服务器响应后的处理结果直接返回给客户端用户。

3)TUN

TUN 模式原理:在原请求IP报文之外新加一个IP首部

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

二、四层七层对比

四层负载均衡七层负载均衡(通常七层支持四层)
技术原理ip+tcp(端口)URL应用层(也称内容交换)
典型代表LVS、F5等Nginx、Haproxy,MySQL Proxy等
优缺点不能满足特定的需求,比如动静分离,缓存自定义等但是配置简单,效率也很高。对负载均衡设备要求很高,处理七层能力一般低于四层模式的部署方式,但有点比较智能化,比如动静分离,根据不同请求定义图片,缓存,可以对客户端请求和服务器的相应进行自定义修改,极大提升了应用系统在网络层的灵活性
案例(工作原理)接受客户的syn请求,通过上述方式选择后端指定服务器,并对报文中目标ip地址进行修改,改为后端服务器ip,tcp连接是直接建立,而负载均衡类似路由器作用如果要根据真正的应用层内容在选择服务器,则先代理最终服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容报文,然后根据该报文中特定字段,加上负载均衡设备的服务器选择方式,决定最终选择的内部服务器。此时充当了代理服务器。

四层七层选择

1、 根据需求使用,七层可以提高流量智能化,但配置复杂化

2、 追求安全性,或者性能

3、 考虑灵活性和扩展性

LVS

1、抗负载能力强、性能高,能达到 F5 硬件的 60%;对内存和 cpu 资源消耗比较低
2、工作在网络4层,通过 vrrp 协议转发(仅作分发之用),具体的流量由 linux 内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS + Keepalived)
3、应用范围比较广,工作在四层,所以不用考虑要处理的具体应用,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
6、配置复杂,对网络依赖比较大,稳定性很高。

Ngnix

1、工作在网络的7层之上,可以针对 http 应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx 对网络的依赖比较小,理论上能 ping 通就就能进行负载功能;
3、Nginx 安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、Nginx 仅能支持http、https 和 Email 协议,这样就在适用范围较小;
6、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希);
7、Nginx 还能做 Web 服务器即Cache功能;


hhhhh