Linux ,c/c++, web,前端,php,js
分类: LINUX
2013-01-31 13:30:45
原文地址:Linux_LVS集群服务器实施详解 作者:raybinbin
Linux Virtual Server矛简称LVS。是由中国一个Linux程序员发起的开发项目计划,其实现目标是创建一个具有良好的扩展性、高可靠性、高性能和高可用性的,基于Linux系统的服务器集群。
1.LVS系统结构与特点
使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器.物理服务器之间可以通过高速的LAN或分布在各
地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得象一个服务于同一IP地址的虚拟服务器。
LVS集群系统具有良好的可扩展性和高可用性。
可扩展性是指,LVS集群建立后,可以很容易地根据实际的需要增加或减少物理服务器。而高可用性是指当检测到服务器节点或服务进程出错、失效时,集群系统能够自动进行适当的重新调整系统。
cente2.LVS是如何工作的
Linux Virtual Server的主要是在负载均衡器上实现的,负载均衡器是一台加了LVS Patch的2.2.x版内核的Linux系统。LVS Patch可以通过重新编译内核的方法加入内核,也可以当作一个动态的模块插入现在的内核中。
负载均衡器可以运行在以下三种模式下中的一种或几种:
1)Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器;
2)Virtual Server via IP Tunneling (VS-TUN):用IP隧道技术实现虚拟服务器;
3)Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。
另外,还需要根据LVS应用对物理服务器进行恰当的配置。
以下将分别讲述一下三种模式的工作原理和优缺点。
2.1.Virtual server via NAT(VS-NAT)
Virtual Server via NAT方法的最大优点是集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
这种实现方法的最大的缺点是扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请 求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的, 采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均 衡器能为22台物理服务器计算。
Virtual Server via NAT能够满足许多服务器的服务性能需求。即使是是负载均衡器成为整个系统的瓶颈,如果是这样也有两种方法来解决它。一种是混合处理,另一种是采用 Virtual Server via IP tunneling或Virtual Server via direct routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。你采用Virtual Server via IP tunneling或Virtual Server via direct routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling或VS-Drouting的负载均衡器,然后后面 采用VS-NAT的负载均衡器。
2.2.Virtual server via IP tunneling(VS-TUN)
采用VS-NAT方式,请求与应答包都需要经过负载均衡器,那么当服务器节点增长到20个或更多时,这个负载均衡器就可能成为新的瓶颈。我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
而使用VS-TUN方式的话,负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求 量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全 双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
IP tunneling(IP隧道)能够用于架构一个高性能的virtual server,非常适合构建virtual proxy server,因为当代理服务器收到了请求,能够让最终用户直接与服务器联系。
但是,这种方式需要所有的服务器支持IP Tunneling(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。
2.3.Virtual Server via Direct Routing(VS-DR)
就象VS-TUN一下,在VS-DR方式下,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。这种方式能够大大提高 Virtual Server的可扩展性。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,但它要求负载均衡器的网卡必须与物理网卡在一个物理段上。
而且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等
3.安装配置LVS
LVS的安装配置主要可以分成以下三个步骤:
1) 下载LVS软件;
2) 安装、配置负载均衡器;
3) 安装、配置物理服务器;
3.1. 安装前的准备
1).下载LVS软件:
大家可以到LVS的主页(),选择“Software”链接,选取最新版的补丁包(tar包)下载。这个包里包含了内核补丁和源程序。
2).安装的指导思想
如果你选用了VS-NAT模式的话,则可以使用所有支持TCP/IP协议的操作系统构建的机器作物理服务器,并且无须做任何修改。
如果你选用了VS-TUN模式的话,则选择Linux作物理服务器的操作系统,并根据后面的介绍做相应的设置。
如果你选用了VS-DR模式的话,则可以选择大多数操作系统(如上节所述)作物理服务器,并根据后面的介绍做相应的设置。
3).各种操作系统作物理服务器的要点详解
a)Linux 2.0.36
这种操作系统无需做任何修改,就可以运行在VS-NAT、VS-Tun、VS-DR三种模式下。
b)Linux 2.2.x
无需任何修改就可运行VS-NAT模式。而使用VS-DR和VS-Tun两种模式可能会引起ARP问题。这种情况
就必须:¨ 为2.2.x内核打补丁
· Stephen WillIams的补丁包:
你可以在获取,它的原理十分简单:让物理服务器不响应对虚拟IP的ARP请求。
· Julian Anastasov的补丁包:
你可以在处获取,然后用以下方法使其生效:
echo 1 /proc/sys/net/ipv4/conf/interface_name/arp_invisible
¨ 新添一块网卡承载虚拟IP地址:
你可以选择一块ISA网卡或廉价的PCI网卡来用于这个功能。你可以将这个接口的ARP功能关闭。
¨ 将物理服务器放置于与虚拟IP地址不同的网络上,并且确认客户端无法直接路由到物理服务器所在网段。这种方法需要在负载均衡器上有两块网卡象防火墙一样工作。
¨ 在客户端或路由器将虚拟IP地址与负载均衡器的物理MAC地址绑定。
¨ 使用IPCHINA重写每一个进入的包,将其从lo接口送入。
c)其它操作系统
如果是VS-NAT的话,无需修改。如果是VS-DR的话,需要采取一些相应的配置方法设置物理服务器的IP地址,使其拥有LVS的虚拟IP地址。用其它操作系统的话不能使用VS-Tun方法。
4).准备硬件环境
构建服务器集群系统,至少需要3台机器,1台用于负载均衡器,2台用于物理服务器。少于这个数字的话就没有意义了。
负载均衡器:运行在打了补丁的2.2.x核心Linux系统。
物理服务器:
VS-NAT:任何机器、任何操作系统,运行Internet网络服务,如 HTTP、FTP、Telnet、SMTP、NNTP、DNS等。
VS-TUN:任何机器、支持IP隧道的操作系统(迄今为止仅有Linux)
VS-DR:任何机器、大多操作系统。
3.2. 理解LVS的相关术语
1).ipvsadm
ipvsadm是LVS的一个用户界面。在负载均衡器上编译、安装ipvsadm:
ipvsadm sets
2).调度算法
LVS的负载均衡器有以下几种调度规则:
Round-robin,简称rr,weighted Round-robin,简称wrr,每个新的连接被轮流指派到每个物理服务器。
Least-connected,简称lc,weighted Least-connected,简称wlc,每个新的连接被分配到负担最小的服务器。
Persistent
client
connection,简称pcc,(持续的客户端连接,内核2.2.10版以后才支持)。所有来自同一个IP的客户端将一直连接到同一个物理服务器。超
时时间被设置为360秒。Pcc是为https和cookie服务设置的。在这处调度规则下,第一次连接后,所有以后来自相同客户端的连接(包括来自其它
端口)将会发送到相同的物理服务器。但这也会带来一个问题,大约有25%的Internet可能具有相同的IP地址(AOL的
客户是通过位于美国弗吉尼亚洲的一台服务器连入Internet的),这种情况下只要有一个AOL的客户连接到一个物理服务器上,那么所有来自AOL的客户连接将都被连到这一台物理服务器上。这将多么可怕呀!
3).Persistent port connection调度算法
在内核2.2.12版以后,pcc功能已从一个调度算法(你可以选
择不同的调度算法:rr、wrr、lc、wlc、pcc)演变成为了一个开关选项(你可以让rr、
wrr、lc、wlc具备pcc的属性)。在设置时,如果你没有选择调度算法时,ipvsadm将默认为wlc算法。
在Persistent port connection(ppc)算法下,连接的指派是基于端口的,例如,来自相同终端的80端口与443端口的请求,将被分配到不同的物理服务器上。
不幸的是,如果你需要在的网站上采用cookies时将出问题,因为http是使用80端口,然而cookies需要使用443端口,这种方法下,很可能会出现cookies不正常的情况。
3.3. 配置实例
1).例一:https only
a)在lvs_dr.conf 文件写入:
SERVICE=t https ppc 192.168.1.1
b)Ipvsadm设置:
IP Virtual Server version 0.9.4 (size=4096)
Prot LocalAddress:Port Scheduler Flags
- RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP ssl.mack.net:https wlc persistent 360
- di.mack.net:https Route 1 0 0
2).例二:All ports sticky,超时为30分,wrr调度算法
a)在lvs_dr.conf 文件写入:
SERVICE=t 0 wrr ppc -t 1800 192.168.1.1
#ppc persistent connection, timeout 1800 sec
/sbin/ipvsadm -A -t 192.168.1.110:0 -s wrr -p 1800
echo adding service 0 to realserver 192.168.1.1 using connection
(接上行) type dr weight 1\"
/sbin/ipvsadm -a -t 192.168.1.110:0 -R 192.168.1.1 -g -w 1
b)Ipvsadm设置:
# ipvsadm
IP Virtual Server version 0.9.4 (size=4096)
Prot LocalAddress:Port Scheduler Flags
- RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP ssl.mack.net:https wrr persistent 1800
- di.mack.net:https Route 1 0 0
3.4. 配置方法
1).准备
用配置脚本*.conf作为输入产生rc.lvs脚本,然后放置在/etc/init.d或/etc/rc.d目录下。
早期版本的配置脚本可以运行在任何机器上。然而现在的配置脚本,针对不同的内核版本是有些不同的。你必须在负载均衡器上运行、检测内核版本。将在负 载均衡器上的配置文件和目录,通过nfs输出这个目录到物理服务器上以供配置需要。 必须先在负载均衡器上运行脚本rc.lvs,然后在物理服务器上运行。
根据你选择的LVS工作模式(VS-NAT、VS-Tun、VS-DR)选择适当的conf文件模板(lvs_nat.conf、
lvs_tun.conf、lvs_dr.conf),然后根据实际情况修改IP地址与服务。在缺省状态下只配置了telnet服务。
telnet服务能够很方便地用于测试:当客户机telnet登录时,根据提示符就可以知道登录到的是哪一台物理
服务器。
你可以编辑conf配置文件来增加其它的服务。在配置文件中提供了集群内部的IP地址建议值
(192.168.1.x/24、10.1.1.x/24)。
在配置文件中,你可以使用名称(如telnet)或端口(如23)来标识服务。使用名称时要注意,须与
/etc/services中匹配。/etc/services文件内容如下所示:
ssh 22/tcp
domain 53/tcp nameserver dns #the string dns needs to be added here
domain 53/tcp nameserver dns #and here
https 443/tcp
https 443/udp
在多种情况下,一台机器常需要多个IP地址,你可以使用IP别名(内核支持的可选项,一般情况下已含在内核中)来为一块网卡指定多个IP地址。
2).运行配置脚本
$ ./configure.pl lvs_nat.conf
这将产生一个rc.lvs_xxx脚本(例如:rc.lvs_nat、rc.lvs_tun、rc.lvs_dr)以及mon_xxx.cf脚本。 (稍后将rc.lvs_xxx放到/etc/rc.d或/etc/init.d中去,将mon_xxx.cf放在/etc/mon目录下)。
3).rc.lvs脚本选项
a). 为负载均衡器与物理服务器增加以太网设备和路由器;
b).使用fping检查连接;
c).运行ipchains(VS-NAT方式);
d).激活ipforward;
e).关闭ICMP重定向功能(VS-DR和VS-Tun方式);
f).增加ipvsadm服务。
4).继续
在物理服务器上运行:
$ . ./rc.lvs_nat 或
$sh rc.lvs_nat
rc.lvs脚本能够自动判断是运行在负载均衡器(tests x /sbin/ipvsadm)还是物理服务器上(检查ifconfig)。
检查ipvsadm、ifconfig a和netstat rn的输出,检查服务/IP地址是否正确。如果不正确的话,请重
新编辑然后再运行一次。
3.5.测试LVS
检查每一台物理服务器上运行的服务,看它们的IP是不是LVS的虚拟IP—VIP(使用netstat an)。如果运行rc.lvs_xxx脚本没有出错的话,你从客户端telnet到VIP(在本文中是192.168.1.110),你将会登录到其中 的一台物理服务器上,并看到这台物理服务器的登录提示。
在负载均衡器上查看ipvsadm的输出,你会在23端口上看到一个与物理服务器的连接。而在物理服务器上执行:$ netstat -an | grep 23命令查看到相关信息。客户端logout退出后,再次登录虚拟IP时,你将会看到另一台物理服务器的登录提示符。
4 VS-NAT模式
VS-NAT是基于CISCO的负载均衡器:LocalDirector实现的。
4.1.安装VS-NAT
根据下表设置客户端、负载均衡器、物理服务器的IP地址:
表21-2.客户端、负载均衡器、物理服务器的IP地址
机 器 IP地址
客户端 192.168.1.254
负载均衡器的虚拟IP 192.168.1.110(LVS表现的IP)
负载均衡器内部网卡 10.1.1.1
物理服务器1 10.1.1.2
物理服务器2 10.1.1.3
物理服务器3 10.1.1.4
…… ……
物理服务器n 10.1.1.n+1
物理服务器的默认
网关 10.1.1.1
对于VS-NAT方法来说,物理服务器必须位于与客户机、LVS的虚拟IP地址不同的网段上,也就是说在物理服务器上不能直接PING通客户机。
由
于负载均衡器有两个IP地址,一个是LVS的虚拟IP地址,另一个IP地址是内部地址--所有物理服务器默认网关。当数据包从物理服务器发送到负载均衡器
时,负载均衡器根据地址翻译(NAT)规则将包转发到客户端。(由于负载均衡器是一个地址翻译器,所以ICMP的重定向功能失效,PING无法应用)。可
以采用IP别名的方法,也可以使用双网卡方法来实现这个。
配置脚本将会配置IP伪装。以下是在configure.pl脚本中的程序段:
echo turning on masquerading
#setup masquerading
echo 1 /proc/sys/net/ipv4/ip_forward
echo installing ipchain rules
/sbin/ipchains -A forward -j MASQ -s 10.1.1.0/24 -d 0.0.0.0/0
echo ipchain rules
/sbin/ipchains L
所有与NAT有关的规则设置都在rc.lvs_nat文件中表现。
4.2.配置VS-NAT
在负载均衡器以及每一台物理服务器上分别执行rc.lvs_xxx脚本程序,使用lvs_nat.conf这个模板来生成rc.lvs_nat配置文件。
VS-NAT将会对端口重新映射,一个来自于80端口的请求,负载均衡器会将其发给物理服务器的8000端口。由于数据包的源地址和目标地址已经被 重写,所以无需对重新端口增加额外的开销。很低的重写数据包速度(60us/包)限制了VS-NAT的最大处理能力,而且VS-NAT的最大处理能力不是 与增加的物理服务器成正比的。
VS-NAT实现方法的最大优点是物理服务器可以是任何一种操作系统,无需为了完成LVS而作任何修改,而且可以实现一些在Linux上不存在服务。
4.33.VS-NAT与Linux核心支持的NAT
当然可以使用ipchains或ipfw构建基于Linux内核的NAT防火墙。而使用了基于2.0.36版内核的LVS补丁包后,常规的内核模块(如ip_masq_ftp等)不再工作(而且不再需要装载)。
5.VS-DR模式
5.1.总论
VS-DR是基于IBM的NetDispathcer实现的。NetDispatcher位于WEB服务器的前端,对于客户端来说就象一台WEB服务器。NetDispatcher曾服务于奥运会、卡斯帕罗夫与深蓝电脑的国际象棋比赛。
这里有一个VS-DR的IP地址设置的实例。注意:物理服务器与VIP位于同一个网络上。
VS-DR模式在以下几方面受到了限制
1) 物理服务器和负载均衡器必须在同一个网段上(它们之间必须能使用arp协议),它们之间在数据链路层上传递数据包;
2) 客户端必须通过负载均衡器的VIP访问集群;
3) 物理服务器必须有到客户端的路由(即使客户端没有到物理服务器的路由)。因为从物理服务器返回到客户商的包,将直接发送,无须通过负载均衡器转发。
VS-DR模式下,客户端通常与负载均衡器和物理服务器位于不同的网络中,而且每一个物理服务器拥有自己对外的路由表。在下面这个简单的例子中,所有的机器都在192.168.1.0这个网络,物理服务器不需要设置默认路。网络拓扑结构如下图所示:
IP分配如下表所示:
表21-3 .IP分配
机 器 IP 地 址
客户端 本机IP:CIP 192.168.1.254
负载均衡器 本机IP:DIP 192.168.1.1
虚拟IP:VIP 192.168.1.110(ARP与客户端使用)
物理服务器1 本机IP:RIP 192.168.1.2
虚拟IP:VIP 192.168.1.110(不ARP)
物理服务器2 本机IP:RIP 192.168.1.3
虚拟IP:VIP 192.168.1.110(不ARP)
物理服务器3 本机IP:RIP 192.168.1.4
虚拟IP:VIP 192.168.1.110(不ARP)
5.2.VS-DR良好的扩展性
VS-NAT方法受限于经过负载均衡器的每一包都必须重写,用这种方法最大的数据吞吐量受限于负载均衡器的环境。(如一台Pentium机器,快速 以太网,最大的数据吞吐量为80M/秒)而且增加物理服务器的数量并不能增加这个最大数据吞吐量。而使用VS-DR模式,速度限制则在每个物理服务器与 Internet连接的包处理能力,而对负载均衡器的要求不大,因为其只需处理简单的包。在VS-DR的模式下,能够增加更多物理服务器以提高系统能力。
6 VS-TUN模式
6.1.总论
VS-Tun是LVS独创的的,它是基于VS-DR发展的。具有良好的可扩展性和服务吞吐量。
使用VS-Tun方式的话,必须采Linux作为物理服务器,而负载均衡器将IP请求重新包装成IPIP包后发给
物理服务器。所以物理服务器必须能够解IPIP包装才能,现在只有Linux操作系统能处理IPIP包(IP隧道技
术)。
不同于VS-DR,VS-Tun方案允许物理服务器与负载均衡器在不同的网络上,甚至允许所有的机器都在
单独的网络上,那怕物理服务器位于不同的国家(例如:做一个项目的FTP站点镜像)。在这种情况下物理
服务器将产生源地址=虚拟IP地址,目标地址=客户机IP地址的IP包。
如果物理服务器与负载均衡器位于相同的网络上,那么VS-DR和VS-Tun是等价的。VS-DR更具有灵活
性,因为大多数操作系统都可以用来构建物理服务器。
6.2. VS-Tun实例
以下是一个VS-Tun的IP配置实例。VS-Tun提供的最大方便性就是不需要服务器与客户端位于同一个网络上,仅需要客户端能寻径(有路由)到负载均衡器,物理服务器能寻径(有路由)到客户机。(返回的包直接从物理服务器到客户端,无须再经过负载均衡器)
通常使用VS-Tun模式时,客户端是与负载均衡器、物理服务器位于不同网络上的,而且每一台服务器
有一个通往外界的路由。
IP分配如下表所示:
表21-4.IP分配
机 器 IP 地 址
客户端 本机IP:CIP 192.168.1.254
负载均衡器 本机IP:DIP 192.168.1.1
虚拟IP:VIP 192.168.1.110(ARP与客户端使用)
物理服务器1 本机IP:RIP 192.168.1.2
虚拟IP:VIP 192.168.1.110(隧道技术,不ARP)
物理服务器2 本机IP:RIP 192.168.1.3
虚拟IP:VIP 192.168.1.110(隧道技术,不ARP)
物理服务器3 本机IP:RIP 192.168.1.4
虚拟IP:VIP 192.168.1.110(隧道技术,不ARP)
…… …… ……
物理服务器n 本机IP:RIP 192.168.1.n+1
虚拟IP:VIP 192.168.1.110(隧道技术,不ARP)
6.3.配置VS-Tun
1)编辑配置文件模板lvs_tun.conf后,进行配置:
$ ./configure_lvs.pl lvs_nat.conf
2)在物理服务器上运行:
$ . ./etc/rc.d/rc.lvs_tun
3)将配置文件放到/etc/rc.d或/etc/init.d目录下。
4)检查ipvsadm、ifconfig a和netstat rn的输出,检查服务/IP地址是否正确,如果有误,请修改后重新运行脚本。
-----------------------
用LVS实现多台服务器的负载均衡
Linux Virtual
Server,简称LVS。是由中国一个Linux程序员发起的开发项目计划,其实现目标是创建一个具有良好的扩展性、高可靠性、高性能和高可用性的,基
于Linux系统的服务器集群使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器物理服务器之间可以通过高速的
LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得象一个服务于同一IP地址的虚拟服
务器。
LVS集群系统具有良好的可扩展性和高可用性。可扩展性是指,LVS集群建立后,可以很容易地根据实际的需要增加或减少物理服务器。而高可用性是指当检测到服务器节点或服务进程出错、失效时,集群系统能够自动进行适当的重新调整系统。
利用LVS的NAT技术,可以很容易地构建20台邮件服务器的负载均衡器。
LVS是如何工作的
Linux Virtual Server的主要是在负载均衡器上实现的,负载均衡器是一台加了LVS
Patch的2.2.x版内核的Linux系统。LVS
Patch可以通过重新编译内核的方法加入内核,也可以当作一个动态的模块插入现在的内核中。负载均衡器可以运行在以下三种模式下中的一种或几种:
1)Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器;
2)Virtual Server via IP Tunneling (VS-TUN):用IP隧道技术实现虚拟服务器;
3)Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。另外,还需要根据LVS应用对物理服务器进行恰当的配置。
以下将分别讲述一下三种模式的工作原理和优缺点。
1.Virtual server via NAT(VS-NAT)
Virtual Server via
NAT方法的最大优点是集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需
要一个合法的IP地址。这种实现方法的最大的缺点是扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶
颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium
处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K
/s来计算,负责均衡器能为22台物理服务器计算。Virtual Server via
NAT能够满足许多服务器的服务性能需求。即使是是负载均衡器成为整个系统的瓶颈,如果是这样也有两种方法来解决它。一种是混合处理,另一种是采用
Virtual Server via IP tunneling或Virtual Server via direct
routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。你采用Virtual Server via IP
tunneling或Virtual Server via direct
routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling或VS-Drouting的负载均衡器,然后后面
采用VS-NAT的负载均衡器。
2.Virtual server via IP tunneling(VS-TUN)
采用
VS-NAT方式,请求与应答包都需要经过负载均衡器,那么当服务器节点增长到20个或更多时,这个负载均衡器就可能成为新的瓶颈。我们发现,许多
Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。而使用VS-TUN方式的话,负载均衡器只负责将请求包分发给物理服务器,
而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是
系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
IP tunneling(IP隧道)能够用于架构一个高性能的virtual server,非常适合构建virtual proxy
server,因为当代理服务器收到了请求,能够让最终用户直接与服务器联系。但是,这种方式需要所有的服务器支持"IP Tunneling"(IP
Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。
3.Virtual Server via Direct Routing(VS-DR)
就象VS-TUN一下,在VS-DR方式下,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。这种方式能够大大提高Virtual
Server的可扩展性。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,但它要求负载均衡器的网卡必须与物理网卡在一个物理段上。而且
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等。
下面这张表概括地比较了VS-NAT、VS-TUN、VS-DR的特点:
表21-1 三种实现方式对比表
-----------------------------------------------------------------------------------------
|特性模式 | VS-NAT | VS-TUN | VS-DR |
-----------------------------------------------------------------------------------------
|服务器操作系统 | 任何操作系统 | 须支持隧道技术 | 大多数系统 |
|服务器模式 | 无 | 隧道、 无ARP | Lo、 无ARP |
|端口映射 | 有 | 无 | 无 |
|服务器网络 | 私有网 | LAN/WAN | LAN |
|服务器数量 | 少(10-20) | 多(100) | 多(100) |
|用户访问IP | LVS虚拟IP | LVS虚拟IP | LVS虚拟IP |
|服务器网关 | 负载均衡器 | 原有的路由器 | 原有的路由器 |
-----------------------------------------------------------------------------------------
2,ipvsadm()
ipvsadm
是由中国的年轻黑客维护的,他是从ipportfw发展而来的。ipvsadm是在Linux的内核中实现的,他在Linux的内核中监测需要路由的IP
数据包,ipvsadm根据用户设置的条件对数据包进行相应的操作。了解ipchains的用户知道,在Linux的内核中有三条控制数据包去向的
链:input , forward ,
output,ipvsadm是在forward的过程中对数据包进行操作的。ipvsadm的作用是为用户选择合适的web服务器。LLB在选择服务器
时有四种不同的规则,这四种规则用于选择哪台服务器处理用户的请求。这四种规则是:Round-Robin (RR)、 Weighted
Round-Robin (WRR)、 Least-Connection (LC)、 Weighted Least-Connection
(WLC)。这四种规则各有自己的适应环境。
Round-Robin:
如果您的LLB选用的是这种算法,她会将数据包均匀的分发给各台服务器,他把所有的服务器放在相等的地位上,而
不会实际的去考虑各台服务器的差异,如响应时间、session数等!例如您有ABC三台服务器,那么LLB分发数据包的顺序
是......ABCABCABC.....
Round-Robin算法的好处是简单、占用系统资源少,缺点是无法检测哪台服务器有更高的响应速度、更少的连接,所以他非常适合服务器性能相当的环境。
Weighted Round-Robin
这种规则适用于用户扩展系统时,因为这是集群中的服务器的性能会有较大的差别,为每一个服务器定义一个参数是必要的。
这
是一种带参数的Round-Robin的算法,参数的名字叫Weighed。您可以根据您的服务器的处理能力来为每一台服务器分配一个Weighted
值,值越高其优先程度越高,默认值是1。例如:你有三台服务器,分别为A:486、B:奔腾、C:奔腾2,你可以为他们分配Weighted值为:1、
2、3,则按照Weighted Round-Robin的算法处理数据包的服务器的顺序是:CCCBBBA
Round-Robin可以说是Weighted Round-Robin的一种特殊情况,既所有的服务器有相同的Weighted值。
Least-Connection
这是一种动态算法,LLB将根据每台服务器当前的连接数目来转发数据包,具有最少连接的服务器将处理下一个请求。这一种算法能很好的分配各种流量,对于突发的请求或大量的请求能够做出比较平滑的处理,不会产生将请求的数据发往同一台服务器的情况。
Weighted Least-Connection
这种算法是Least-Connection Scheduling的一种扩展,她为每一台服务器分配一个weighted值,然后根据这个值和每台服务器当前状态下的连接数来决定由谁来处理用户的请求。可以举一个例子来说明她的工作原理:
假
设有n台服务器,每一台服务器的weighted值为Wi ( i=1,2. . . n) ,session为Ci (i=1,...n),
ALL-CONNECTIONS 是所有服务器的session和,既C1+C2+....+Cn.,那么按照下面的算法,服务器j将处理下一个请求:
( Cj/ALL-CONNECTIONS )/Wj=min { (Ci/ALL-CONNECTIONS)/Wi } ( i=1,..,n)
也可以简化为:
Cj/Wj = min { Ci/Wi } (i=1,..,n)