LVS 集群服务器实施详解

来源:互联网 发布:eclipse php插件下载 编辑:程序博客网 时间:2024/05/21 06:22

LinuxAid.com.cn xufeng

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的主页(http://www.linuxvirtualserver.org),选择“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的补丁包:
你可以在http://www.linuxvirtualserver.org/sdw_fullarpfix.patch获取,它的原理十分简单:让物理服务器不响应对虚拟IP的ARP请求。

· Julian Anastasov的补丁包:
你可以在http://www.linuxvirtualserver.org/arp_invisible-2213-2.diff处获取,然后用以下方法使其生效:
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地址是否正确,如果有误,请修改后重新运行脚本。

原创粉丝点击