企业实例~1.lvs三种工作模式及原理

Lvs三种模式详解

LVS的全称是Linux virtual server,即Linux虚拟服务器。之所以是虚拟服务器,是因为LVS自身是个负载均衡器(director),不直接处理请求,而是将请求转发至位于它后端真正的服务器realserver上。

 

LVS是四层(传输层tcp/udp)、七层(应用层)的负载均衡工具,只不过大众一般都使用它的四层负载均衡功能ipvs,而七层的内容分发负载工具ktcpvs(kernel tcp virtual server)不怎么完善,使用的人并不多。

 

ipvs是集成在内核中的框架,可以通过用户空间的程序ipvsadm工具来管理,该工具可以定义一些规则来管理内核中的ipvs。就像iptables和netfilter的关系一样。

 

VIP:virtual IP,LVS服务器上接受外网数据包的网卡IP地址。

DIP:director IP,LVS服务器上转发数据包到realserver的网卡IP地址。

RIP:realserver(常简称为RS)上接收Director转发数据包的IP,即提供服务的服务器IP。

CIP:客户端的IP。

 

Lvsnat模式:

企业实例~1.lvs三种工作模式及原理

客户端发送的请求到达调度器后,调度器根据负载均衡算法改写目标地址为后端某个RIP(web服务器池中主机之一)并转发给该后端主机,就像NAT一样。当后端主机处理完请求后,后端主机将响应数据交给调度器,并由调度器改写源地址为VIP后传输给客户端。

RIP和DIP一般处于同一私有网段中。但并非必须,只要它们能通信即可。

NAT模式下,各RealServer的网关指向DIP,这样能保证将响应数据交给Director。

VS/NAT模式的最大缺点是Director负责所有进出数据:不仅处理客户端发起的请求,还负责将响应传输给客户端。而响应数据一般比请求数据大得多,调度器Director容易出现瓶颈。

 

Lvs的TUN模式:

 

VS/TUN模式的工作原理:

企业实例~1.lvs三种工作模式及原理

(1)IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行第二次封装,这样这个报文就可以发送到一个指定的目标主机上;

(2)VS/TUN模式下,调度器和后端服务器组之间使用IP隧道技术。当客户端发送的请求(CIP-->VIP)被director接收后,director修改该报文,加上IP隧道两端的IP地址作为新的源和目标地址,并将请求转发给后端被选中的一个目标;

(3)当后端服务器接收到报文后,首先解封报文得到原有的CIP-->VIP,该后端服务器发现自身的tun接口上配置了VIP,因此接受该数据包。

(4)当请求处理完成后,结果将不会重新交给director,而是直接返回给客户端;在后端服务器返回给客户端数据包时,由于使用的是普通网卡接口,根据一般的路由条目,源IP地址将是该网卡接口上的地址,例如是RIP。因此,要让响应数据包的源IP为VIP,必须添加一条特殊的路由条目,明确指定该路由的源地址是VIP。

 

优点:

RealServer的RIP和director的DIP不用处于同一物理网络中,且RIP必须可以和公网通信。也就是说集群节点可以跨互联网实现。

realserver的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP。

director给realserver时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP。而realsever响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP。这样客户端就无法区分这个VIP到底是director的还是服务器组中的。

需要添加一条特殊的路由条目,使得后端服务器返回响应给客户端时的源IP为VIP。

director只处理入站请求,响应请求由realserver完成。

一般来说,VS/TUN模式会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同网络环境,可以就近返回数据给客户端。在请求对象不能在Cache服务器本地命中的情况下,Cache服务器要向源服务器发请求,将结果取回,最后将结果返回给客户。

 

 

Lvs的DR模式:

企业实例~1.lvs三种工作模式及原理

原理:

(1)客户端发送的请求被director接收后,director根据负载均衡算法,改写数据帧的目标MAC地址为后端某RS的MAC地址,并将该数据包转发给该RS(实际上是往整个局域网发送,但只有该MAC地址的RS才不会丢弃)。

(2)RS接收到数据包后,发现数据包的目标IP地址为VIP,而RS本身已经将VIP配置在了某个接口上,因此RS会接收下这个数据包并进行处理。

(3)处理完毕后,RS直接将响应报文响应给客户端。在返回给客户端的时候,由于实用的是普通网卡接口,根据一般的路由条目,源IP地址将是该网卡接口上的地址,例如RIP。因此,要让响应数据包的源IP为VIP,需要添加一条特殊的路由条目,明确指定该路由的源地址为VIP。

也就是说,客户端请求发送到LB上,源和目标IP为CIP:VIP,LB上有VIP和DIP,重新改写MAC地址后通过DIP发送给某个realserver,如RS1,此时源和目标IP还是CIP:VIP,但是目标MAC地址改写为RIP1所在网卡的MAC地址"RS1_MAC",RS1发现自身有VIP地址,所以收下此数据报文(所以在RS上必须配置VIP)。返回时,RS1根据路由表直接返回给客户端,此时,源和目标IP是VIP:CIP。

 

采用DR模式时的基本属性和要求:

 

RealServer的RIP和director的DIP必须处于同一网段中,以便使用MAC地址进行通信。

realserver上必须配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP。

realsever响应给客户端的数据包的源和目标IP为VIP-->CIP。

需要添加一条特殊的路由条目,使得后端服务器返回响应给客户端时的源IP为VIP。

director只处理入站请求,响应请求由realserver完成。

 

三种模式的比较:

 

在性能上,VS/DR和VS/TUN远高于VS/NAT,因为调度器只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移,极大程度上减轻了调度器的压力。VS/DR性能又稍高于VS/TUN,因为少了隧道的开销。但是,VS/DR和VS/TUN的主要区别是VS/TUN可以跨网络实现后端服务器负载均衡(也可以局域网内),而VS/DR只能和director在局域网内进行负载均衡。