一、Linux虚拟服务器简介
基于中软Linux的虚拟服务器(Linux Virtual Server,即LVS)是一个具有高可用性特点的负载均衡集群系统。该系统可以提供与服务器节点的数量、性能成正比的负载能力,有效提高服务的吞吐量、可靠性、冗余度、适应性,性能价格比高。同时,LVS也是利用低端设备实现高端服务器性能的有效途径。
中软Linux虚拟服务器(Linux Virtual Server,即LVS)是建立在一个主控服务器(director)及若干真实服务器(real-server)所组成的集群之上。real- server负责实际提供服务,主控服务器根据指定的调度算法对real-server进行控制。而集群的结构对于用户来说是透明的,客户端只与单个的 IP(集群系统的虚拟IP)进行通信,也就是说从客户端的视角来看,这里只存在单个服务器。
Real-server可以提供众多服务,如 ftp, http, dns, telnet, nntp, smtp 等。主控服务器负责对Real-Server进行控制。客户端在向LVS发出服务请求时,Director会通过特定的调度算法来指定由某个Real- Server来应答请求,而客户端只与Load Balancer的IP(即虚拟IP,VIP)进行通信。
二、优点
*提高吞吐量:为获得更高的吞吐量,在LVS中增加real-servers,其开销只是线性增长;而如果我们选择更换一台更高性能的服务器来获得相当的吞吐量,其开销要大得多,而且被替换掉的旧服务器会造成资源的浪费。
*冗余:如果LVS中某real-server由于需要升级或其它原因而停止服务,其退出以及恢复工作,并不会造成整个LVS对客户端服务的中断。
*适应性:不管是需要吞吐量逐渐地变化(因日常事务量变化),还是快速地变化(因突发事务量变化),服务器数量的增减对于客户端都是透明的。
三、结构图
传统的“客户端/服务器”的关系在LVS中仍旧适用,原因在于:
*所有服务器的IP地址都映射为一个IP(即VIP),客户端只能看见此IP地址
*所有服务器都认为它与客户端是直接联系的。
上图一个LVS的基础设置
四、基本原理及功能
事实上,director的主要作用类似于一个路由器,但它含有为完成LVS功能所设定的路由表。这些路由表允许director把属于LVS设定服务的包转发到real-servers。如果http(端口80)是LVS设定服务,那么这些包都会被director转发,而director并不监听 VIP:80。
director使用三种不同的转发方法
1、VS-NAT:基于网络地址转换(network address translation ,NAT)
2、VS-DR :直接路由(direct routing,DR),包上的MAC地址被更改,然后被转发到real-server
3、VS-Tun :隧道(tunnelling) ,包被IPIP封装,然后被转发到real-server。
VS-NAT方式实现较为容易,只需要一个功能tcpip栈,缺点在于吞吐量不够大,而且支持的real-server数有限。而VS-DR方式则吞吐量较大,并支持大量的real-server。VS-TUN方式的特点和VS-DR相似,不过主要用于real-server分布在因特网之上的情况, real-servers对于director可以是远程的,real-servers之间可以处于不同网段。不过,VS-DR和VS-TUN转发方式需要对real-server的ifconfig和路由表进行修改。
LVS可以提供几乎所有的服务(单端口和2端口服务),除了VS-DR和VS-Tun不可以提供从real-servers进行初始化连接的服务(有identd,rsh)。
Real-servers可以是相同的,提供相同的服务(如http ,ftp),文件系统保持内容上的一致,这种类型的LVS用来提高可服务客户端数量。Real-server也可以不同,有各自不同的服务或操作系统。
五、VS-NAT(基于网络地址转换,network address translation ,NAT)
VS-NAT是LVS最基本的方法,如果想要设置一个用于测试的LVS,这是一个最简单的方法。
当客户发出请求,director会将接受到的包的目标地址重写为某个real-server,并将其转发到real-server。Real-server的回复会发到director,director将回复包的源地址改写为VIP
不像VS-DR和VS-TUN,real-server只需要一个功能tcpip栈。Real-server可以是任意操作系统,在real-server上也不必做什么配置修改(除了在路由表中,需要把real-server的默认网关设为director)。
下图为VS-NAT方式的拓补和工作流程示意图。
六、VS-DR(直接路由,direct routing,DR)
Director接到来自client的请求包后,根据调度算法选择一个real-server,解析出此real-server的MAC地址,并且向此MAC发送包含一个IP datagram的链路层包。Real-server收到包后,恢复IP datagram,查找路由表后发现这个VIP就在本地(设备lo:0,non-arp),移交给端口监听器。因为Real-server收到从CIP- >VIP的包,构造回复包时就是VIP->CIP。Real-server查找路由表,并通过到client的缺省gateway发送回复。回复不经过director。
在real-server上所需做的工作就是配置一个non-arping的lo:0设备。并且服务需要监听VIP的相应端口。
VS-DR方式吞吐量较大,支持的real-server数量较多。
七、VS-Tun(隧道,tunnelling)
这种方式是基于VS-DR方式的,不同的只是director将包IPIP封装,然后转发到real-server。VS-TUN的real- servers相对于director可以远程;而且每个real-server都可以在单独的网络上,但需要在路由器上做工作,允许源地址为VIP的输出包。
配置方法和要求与VS-DR方式类似。只是需要将lo:0设备换为tunl0设备,其对应模块为ipip。