LVS几种模式介绍

说实话,我第一次听说这个概念比较晚,是我在2017年参加果壳网的面试,一个技术大拿问我知道什么是LVS吗?我说不知道,我都不知道这个是啥意思。后来通过自己的学习和实际工作中的接触才逐渐了解到。

LVS,linux virtual server,他可以提供IP网络层的负载均衡,性能要远远高于Nginx。

其主要模式主要有以下几种:

LVS-NAT  主要通过网络地址转换,修改目的IP实现。Network Address Translation

LVS-TUN  主要封装一层IP头 IP Tunneling

LVS-DR   主要是修改目的MAC  Direct Routing

LVS-FULLNAT   这个是阿里研发的一种模式,主要是解决多vlan的场景,它会修改请求报文的(源/目的)地址、(源/目的)端口。

先看几个LVS的名词定义:

CIP:客户端ip

Director:负载调度集群的主机,简称DR

VIP:Virtual IP,向外提供服务的IP

RIP:Real Server IP,内部真正提供服务的IP

DIP:DR主机用于内部通信的IP

一个完整的经过LVS请求的都会涉及到上面几个角色。

1、LVS-NAT

流程示意图:

其请求处理流程:

1.客户端(Client)发送请求到LVS, 目标IP地址为VIP
2. LVS根据某种负载均衡算法选择一个Real-server,并记录连接信息到hash表中,然后修改客户端的request的目的IP地址为选择的RS(这个RIP只是内部通信用的),随后将请求发给RS,此时源IP为CIP,目的IP为RIP;
3. RS收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LVS,此时源IP为RIP,目的IP是CIP;
4. LVS收到reply包后,修改reply包的的源地址为VIP,原端口为VIP端口;
5. LVS将reply发送给客户端;
6. 客户端来的属于本次连接的包,查hash表,然后发给对应的RS;
7. 客户端发送完毕,此次连接结束时,LVS自动从hash表中删除此条记录;

上面流程的特点是:

1、DR和RS必须是在同一个网段内,RS的网关配置成DIP,RIP和DIP都是用于内网机器间通信的IP。我感觉说的直白点,RS的网关为DR;

2、所有请求响应都要经过DR,这必然会导致DR会成为整个网络的瓶颈。

2、LVS-TUN

1.客户端Client 发送request包到LVS服务器, 目标地址VIP;
2. LVS按照算法选择后端的一个Real-server,并将记录一条消息到hash表中,然后将客户端的request包封装到一个新的IP包里,新IP包的目的IP是RIP,源IP是DIP,然后转发给RS;
3. RS收到包后,解封装,取出客户端的request包,发现还有一个IP包,目的地址是VIP,而RS发现在自己的虚拟网卡tunl0上有这个IP地址,于是处理客户端的请求,处理完成通过虚拟网卡发送给eth0网口发送出去,此时源IP为VIP,目的地址是CIP;
4. 该客户端的后面的request包,LVS直接按照hash表中的记录直接转发给Real-server,当传输完毕或者连接超时,那么将删除hash表中的记录。

该模式中:

RIP,VIP,DIP都可以是公网地址,可以跨网段;

请求报文都走DR,响应不走,直接由RS发送给Client。这个特点使得TUN的性能要相比NAT提升了几倍,且解决了跨网段问题,问题就在于其维护成本挺高的;

3、LVS-DR

1、客户端Client 发送request包到LVS服务器, 目标地址VIP;
2、LVS根据负载均衡算法选择一台active的Realserver,将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里,因为是在数据链路层,所以必须在同一局域网;
3、RS在局域网中收到这个帧,拆开后发现目标IP不是自己的IP,正常来讲RS会抛弃的,但由于我们在lo上配置了VIP,所以RS会接收该请求包,并进行处理。

4、处理后,RS直接经过网络发送给客户端,源IP为VIP,目的IP为CIP。

LVS-DR技术解决了NAT的DR瓶颈问题,提高性能,但其最大限制就是DR和RIP必须是同一网段的,解决不料跨网段的问题。

LVS-FULLNAT

这个是阿里做的。

LVS的DR和NAT模式要求RS和DR在同一个vlan中,导致部署成本过高;TUN模式虽然可以跨vlan,但RealServer上需要部署ipip隧道模块等,网络拓扑上需要连通外网,较复杂,不易运维。

为了解决上述问题,开发出FULLNAT,该模式和NAT模式的区别是:数据包进入时,除了做DNAT,还做SNAT(用户ip->内网ip),从而实现LVS-RealServer间可以跨vlan通讯,RealServer只需要连接到内网。

当客户端访问VIP后,DR会将源IP改成DIP,目的IP改成RIP,RIP同样是通过某种均衡算法找的。

剩下的就是内网调用的事情了,可以是同网段,也可以是不同网段,至于不同Vlan如何通信,这个就不用多说了把,就是路由策略配置的问题了。

FULLNAT相对于之前那三种方式,可能不是完全集中缺点,但避开了他们的很多缺点,比如配置维护都很简单,可以跨网段。现在也是LVS主流的使用模式。

小米的lvs:

参考资料:

最强lvs总结

高并发场景 LVS 安装及高可用实现

LVS 负载均衡原理及安装配置详解

--------EOF---------
微信分享/微信扫码阅读