LVS三类工作模式

LVS

业界明星

LVS是国内程序员界为行业付出的最响当当产品了,在互联网界更是采用的多。

背景介绍

个人认为LVS出现的基础有三点:

  1. IPV4 公网ip不够用的现状
  2. 加之DNS更新调整的麻烦度
  3. 服务器之间需要负载均衡,硬件负载均衡还是贵,原来国外大厂的闭源软件同样也贵

在TCP/IP协议簇上,能做到的方案肯定最低工作在IP层做路由转发和负载均衡。

大家都用过交换机和路由器,家用的都是路由器,因为有公网IP,一台路由器代理几台设备,家用路由器NAT转换协议也是为上面1,2点而来。

作者语述

真正有用的软件来源于实际应用,不同于闭门造车想象出来的功能,且看LVS作者章文嵩博士的回忆:

“我在国防科大学读书之余,也帮湖南电信做一些系统集成项目,见到许多服务器忙不过来的情况。这时就需要考虑负载均衡。那时业界也有一些商用方案,常用的是思科LocalDirector。我希望在Linux内核上写点东西,又知道思科LocalDirector的工作原理。所以我当时就花了两个星期写了一个最简单的版本,那是1998年5月。(一套LocalDirector当时价值几万美元,我那时心里有疑问——这东西并不难写,为什么卖那么贵?)”

“当时LVS开源放在网上一个星期,就被一家澳大利亚小公司用起来了,公司的负责人写邮件感谢我,说效果很好。我觉得这件事挺有意思,因为自己写的软件被别人用起来了,为他人创造了价值。2000年前后,收到了许多用户的感谢邮件。也有公司给我捐送服务器,有个瑞士用户寄了一大包饼干来感谢我。我把饼干拿回家,被丈母娘看到了,她说原来你半夜这么辛苦地工作,就是为了一大包饼干啊。

做这些事是很有成就感的,更多的是乐趣。

硬核正题

旁话不多讲,进工作模式正题。

介绍前,先列几个缩写概念:

1
2
3
4
5
6
7
1. LB(Load Balancer) :负载均衡器,也就是装有LVS(ipvsadm)的server

2. VIP(VirtualIP):给远程客户端提供服务的外部IP,LVS设备具有此IP

3. real server:后端提供真是服务的server

4. RIP(Real Server IP):后端realserver的IP

LVS有三种工作模式

1.DR(direct routing直接路由)

2.NAT(Network Address Translation网络地址转换)

3.Tune(IP Tunneling隧道)

NAT模式

所有real server可分配保留私有地址,只有LB分配一个公网IP,但所有的请求包和应答包都经过LB,且不说网卡流量问题。包因为要修改再生,需要消耗CPU时间。举个例子,如果TCP包平均长度536字节,平均再生延迟60纳秒,那么这个延迟,导致LB的最大允许吞吐能力是8.93M/s(1/60*536)。做负载均衡,real server多了,就满足不了要求(如果单台real server允许400K/s,22台就达到极限)。这种模式下LB很容易成为整个系统的瓶颈。NAT通常的负担量也就在20台real server左右。

DR模式

与NAT模式一样,同样要求real server与LB在同一物理网段,这样对组网布线是有要求的。且realserver上须有一块网卡不接受arp广播(同样配上VIP)。

涉及网络细节,且性能在三种模式下最好,详细讲下DR过程【模式出现 动机之一,在于现实发现许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。如果只让LB处理入包,定可以提升吞吐能力】。

  1. 客户端得到服务的目的IP(为VIP,可能是通过DNS查询),目的端口80。
  2. 于是客户端与VIP的80端口建立连接,LVS在VIP上收到之后,根据均衡策略,从后端realserver中选出一台(RIP1)作为此次请求的接收者,然后将请求包的目的mac地址更改为RIP1的mac地址,封装后转发给后端的RIP1,同时将该链接记录在hash表中。
  3. RIP1的某块网卡,如eth0,接收到这个转发包看到mac地址是自己的,于是就转发给上层的IP层,IP层解包后,发现目的IP地址也是自己(VIP配置在一块non-arp的网卡上,如lo:0),然后接着根据协议上传。
  4. 应用处理完请求后,将数据传给TCP,TCP将源端口改为80,源IP更改为VIP,目的端口更改为客户端端口,目的IP为客户端IP,IP层根据目的地址进行路由,然后经网络返给Client,完成了一次请求,而不经过LB。

DR模式的优缺点:

优:可扩展性强,LB不会成为业务增长的瓶颈

缺:节点不能跨网段,real server上须有一块网卡不接受arp广播

TUN模式

就是针对DR模式的物理网段限制而来,针对互联网业务的特点,也比NAT效率高。但需要所有的服务器支持 “IP Tunneling(IP Encapsulation)”协议。但跨网段,服务器离的近,还好,离得不近,则网络延迟会成为主要瓶颈。

后记

当前7层负载均衡,如Nginx已经让程序员大呼方便,但7层的效率肯定比不了在3层的处理效率,聊以此文,作为LVS工作模式简短总结介绍。