注:名词解释
1、DS:Director Server.指的是前端负载均衡器节点。
2、RS:Real Server.后端真实的工作服务器。
3、VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4、DIP:Director Server IP ,主要用于和内部主机通讯的IP地址。
5、RIP:Real Server IP ,后端服务器的IP地址。
6、CIP:Client IP,访问客户端的IP地址。
一、LVS-NAT
NAT 即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用户可以访问公司内部的私有IP主机。
(1)实现原理
通过将请求报文中的目标IP地址与目标端口修改,来实现报文的传送。
1、当用户的请求到达Director Server(前端负载均衡器节点),此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP是CIP(访问客户端的IP地址),目标IP是VIP(向外部直接面向用户请求,作为用户请求的目标的IP地址)。
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
3、IPVS比对数据包请求的服务是否为集群抚慰i,若是,修改数据包的目标IP地址为后端服务器IP,后将数据包发至POSTOUTING链。此时报文的源IP为CIP,目标IP为RIP(后端服务器的IP地址)。
4、POSTROUNTING链通过选路,将数据包发给Real Server(后端真实的工作服务器)
5、Real Server比对发现目标是自己的IP,开始构建响应报文发回给Director Server.此时报文的源IP为RIP,目标IP为CIP
6、Director Servre在响应客户端前,此时会将源IP地址修改为自己的VIP地址。然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP。
报文路径:
前端负载均衡器节点------>PREROUTING链----------->INPUT链-------->POSTOUTING链--------->真实服务器----------->(响应报文)后端真实服务器------------>客户端
(2)模式特性
(1)RS 应该和DIP应该使用私网地址,且RS的网关要指向DIP。
(2)请求和响应报文都要经由director转发;极高负载的的场景中,directo可能会成为系统瓶颈
(3)支持端口映射
(4)RS可以使用任意OS
(5)RS的RIP和Director的DIP必须在同一个IP网络
(3)缺陷
对Director Server 压力会比较大,请求和响应都需经过director server , director往往会成为系统的瓶颈。
二、LVS-DR
(1)实现原理
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
1、当用户请求到达Dirctor Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
3、IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTOUTING链。此时的源IP和目标IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址。
4、由于DS和RS在同一个网络中,所以通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server.
5、RS发现请求报文的MAC地址是自己的MAC地址,就接受此报文。处理完成后,将响应报文通过lo接口传送给eth0网卡然后向外发出。此时源IP是VIP,目标IP为CIP。
6、响应报文最终送达客户端
用户请求(即报文的行踪):
前端负载均衡器节点-------> PREROUTING链--------->INPUT链-------->POSTOUTING链-------->真实服务器--------->(响应报文)eth0网卡--------->客户端
(2)模式特性
(1)确保前端路由器将目标ip为VIP的请求报文发往Director:
1、在前端网关做静态绑定;
2、在RS上使用arptables;
3、在RS上修改内核参数以限制arp通告及应答级别。
修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。
(2)RS的RIP可以使用私网地址,也可以是公网地址:RIP与DIP在同一个IP网络;RIP的网关不能只想DIP,以确保响应报文不会经由Director;
(3)RS跟Director要在同一个物理网络;
(4)请求报文要经由Director,但响应不能经由Director,而是由RS直接法网Client;
(5)不支持端口映射
(3)缺陷
RS和DS必须在同一个机房中,因为它是由二层进行转发的根据MAC地址来进行匹配
三、LVS-TUN
(1)实现原理
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标地址为VIP),外层IP首部(源地址为DIP,目标地址为RIP)
1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时保温的源IP为CIP,目标IP为VIP。
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
3、IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP为RIP。然后发至POSTROUTING链。此时源IP为DIP,目标IP为RIP。
4、POSTROUNTING链会根据最新封装的IP报文,将数据包发至RS(因为外层封装了多一层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP,目标IP为RIP。
5、RS接受到报文后发现是自己的IP地址,就将报文接受下来,拆除最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。此时源IP地址为VIP,目标IP为CIP。
6、响应报文最终送达至客户端
前端负载均衡器节点----->PREROUTING链-------->INPUT链----------->POSTROUTING链----------->后端真实服务器--------->eth0网卡-------客户端
(2)模式特性
(1)DIP,VIP,RIP都应该是公网地址
(2)RS的网关不能,也不能指向DIP
(3)请求报文要经由Director,但响应不能经由Director;
(4)不支持端口映射
(5)RS的OS得支持隧道功能
(6)调度器及那个只处理用户的保温请求,集群系统的吞吐量大大提高,对RealServer得低于位置没有要求
四、三种方式的比较
LVS共有三种模式,优缺点比较如下:
NAT模式
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
不足:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。
TUN模式
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。
DR模式
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上