备注:这篇真的是水文,不看也罢。
LVS,linux virtual server,可提供IP网络层的负载均衡。
其主要模式主要有以下几种:
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必须是同一网段的,解决不料跨网段的问题。
4、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 负载均衡原理及安装配置详解