学习情境3.3 Web集群服务器的架构
3.3.1 学习要点
1.知识点:了解LVS集群的通用体系结构,理解heartbeat心跳在负载均衡调度器中的作用
2.技能点:掌握Linux下Web服务集群的实现方法
3.3.2 任务描述
正确描绘出LVSWeb服务器集群的系统构架结构图。
安装配置LVS,实现Web服务集群。
安装配置heartbeat,实现LVS的负载均衡。
3.3.3 相关知识
1.什么是服务器集群
集群,是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。
一方面,随着Internet的爆炸性增长,Internet与人的生活越来越息息相关,通过Internet上进行交易也就越来越受关注。近几年,电子商务的年增长均超过100%。服务器的工作量也迅速增长,所以服务器(特别是一个受人欢迎的Web服务器)很容易在访问高峰时期过载。
而另一方面,计算机从1946年单纯的科学计算任务到现在大量纷繁复杂的信息处理,工作量越来越大,需要越来越快的处理能力。所以计算机界就不得不不断研究更快的处理器、存储器,以适应这一需求。
然而,科学家们意识到,单块处理器的速度发展空间是有限的,为什么不能让计算机像人一样协同工作,“群策群力”地将工作完成好呢?这时,就掀起了“并行计算”的研究。举个例子来说,我们架设了一台WWW服务器,上面构建了一个电子商务网站,然而随着时间的推移,名声越来越大,这时点击率也就越来越高,WWW服务器的负载也就越来越高。这种情况下,我们就必须提升WWW服务器的能力,以满足日益增长的服务请求。这时,我们就面临两种选择:
(1)升级WWW服务器,采用更快的CPU,增加更多的内存,使其更具有POWER;但日益增长的服务请求又会使服务器再次过载,需要再次升级,这样就陷入了升级的怪圈。还有,升级时还得考虑到服务如何接续,能否中止!
(2)增加WWW服务器,让多台服务器来完成相同的服务。
这种方法就是服务器集群,通过并行技术来大大提升系统性能。
2.负载均衡的概念
负载均衡(Load Balance):
网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。
特点:
①高可靠性(HA)。利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
②高性能计算(HP)。即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析、化学分析等。
③负载平衡。即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
3.LVS系统结构与特点
(1)Linux Virtual Server:简称LVS。是由中国一个Linux程序员章文嵩博士发起和领导的,基于Linux系统的服务器集群解决方案,其实现目标是创建一个具有良好的扩展性、高可靠性、高性能和高可用性的体系。许多商业的集群产品,比如RedHat的Piranha、Turbo Linux公司的Turbo Cluster等,都是基于LVS的核心代码的。
(2)体系结构:使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器。物理服务器之间可以通过高速的LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得像一个服务于同一IP地址的虚拟服务器。
(3)LVS的三种工作模式
①Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。
②Virtual Server via IP Tunneling(VS-TUN):用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等。
③Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。
4.LVS三种工作模式的优缺点比较
(1)Virtual server via NAT(VS-NAT)
优点:集群中的物理服务器可以使用任何支持TCP/IP的操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。
解决办法:即使是负载均衡器成为整个系统的瓶颈,也有两种方法来解决它。一种是混合处理,另一种是采用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)
我们发现,许多Internet服务(例如Web服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持“IP Tunneling”(IP Encapsulation)协议,仅在Linux系统上实现了这个,如果想让其他操作系统支持,还在探索之中。
(3)Virtual Server via Direct Routing(VS-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等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上。
5.负载均衡集群
负载均衡集群是在应用服务器高负载的情况下,由多台节点提供可伸缩的、高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技术。实际上LVS是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。

图3.3.1 LVS实现集群系统结构简图
如图图3.3.1所示为一台名为Director的机器是前端负载均衡器,运行LVS,目前只能在Linux下运行.可以针对Web、FTP、Cache、MMS甚至MySQL等服务做负载均衡;后端机器称之为Real Server,是需要负载均衡的服务器,可以为各类系统,Linux、Solaris、Aix、BSD、Windows都可,甚至Director本身也可以作为Real Server。
可用性(availability)当集群中的一个系统发生故障时,集群软件迅速做出反映,将该系统的任务分配到集群中其他正在工作的系统上执行。考虑到计算机硬件和软件的易错性,高可用性群集的目的主要是为了使群集的整体服务尽可能可用。如果高可用性群集中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的。
高可用性(HA)群集致力于使服务器系统的运行速度和响应速度尽可能快。它们经常利用在多台机器上运行的冗余节点和服务来相互跟踪。如果某个节点失败,它的替补将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,群集永远不会停机。
Load Balancer(负载均衡器)是整个集群系统的前端,负责把客户请求转发到Real Server上。Backup是备份Load Balancer,当Load Balancer不可用时接替它,成为实际的Load Balancer。Load Balancer通过Ldirectord监测各Real Server的健康状况。在Real Server不可用时把它从群中剔除,恢复时重新加入。
通常主服务器运行作业,而系统使辅助服务器保持闲置。辅助服务器通常是主服务器操作系统设置的镜像,尽管硬件本身稍有不同。辅助节点对主服务器进行活动监控或心跳观察,以查看它是否仍在运行。如果心跳计时器没有接收到主服务器的响应,则辅助节点将接管网络和系统身份。
6.系统结构设计
系统体系结构如图3.3.2所示,从客户端发出请求至服务器响应,本系统划分为4个层次:客户端、分配器、Web应用服务器、存储系统。

图3.3.2 系统结构设计
①第1层客户端。使用浏览器访问应用服务器的Internet或Intranet上的用户群。
②第2层负载均衡系统。系统的唯一入口点,负责接受用户请求,并按一定的均衡策略分配给真实服务器。负载均衡器上的管理软件可以自动屏蔽宕机的节点服务器,并在节点恢复服务功能后重新加入服务器池。负载均衡可以通过LVS+heartbeat(DR)方式实现。为避免单点失效,选择配置一个备份负载均衡器,与主负载均衡器通过心跳线相互监测状态,若主负载均衡器意外宕机,备份负载均衡器自动接管分配给节点的任务,至主负载均衡器重新启用后,备份负载均衡器将自动将分配任务交给主负载均衡器,从而避免单点失效带来的系统崩溃。
③第3层Web真实服务器组。是实际处理客户请求的网络服务器集合,提供WWW网络服务,每台服务器称为节点,各节点处理由负载均衡器分配来的用户请求,并通过间接响应客户端。服务器组是在RHEL5下相同的Apache Web服务器。
④第4层共享存储系统。以NFS方式实现,为Web真实服务器组提供一个共享存储区,实现服务器池拥有相同的内容,提供相同的服务。从而保证第3层Web服务器组提供数据的一致性,并可以实时更新。
3.3.4 任务实施
架设LVSWeb服务器集群
系统配置环境如表3.3.1所示:
表3.3.1 系统配置环境

这里设置服务器的主机名,比如station1,编辑/etc/sysconfig/network文件
#vim/etc/sysconfig/network
NETWORKING=yes//启动网路
NETWORKING_IPV6=no//关闭IPV6功能
HOSTNAME=station1//设置本机的计算机名
station6,station8架设Apache Web服务器。
任务步骤如下:
所需软件包:heartbeat、libnet、ipvsadm-1.24.tar.gz,mysql-cluster-gpl-7.0.5
ipvsadm IPVS的管理工具,提供了一个和IPVS打交道的接口,包括配置IPVS和连接信息统计。到地址:http://www.Linuxvirtualserver.org/software/ipvs.html去下载相应的版本。
heartbeat、libnet、mysql-cluster软件包可以到如下网址下载:
http://Linux-ha.org/DownloadSoftware
http://www.packetfactory.net/libnet/dist/libnet.tar.gz
http://www.mysql.com
在调度器A和B的/etc/hosts内加入以下内容:
vim/etc/hosts///etc/hosts是配置IP地址和其对应主机名的文件,这里可以记录本机的或其他主机的ip及其对应主机名

1.station1、station3安装libnet.tar.gz
#tar–zxvf libnet.tar.gz
#cd libnet
#./configure//配置
make&&make install//编译与安装
libnet安装完成。
2.station1安装ipvsadm-1.24.tar.gz
#tar–zxvf ipvsadm-1.24.tar.gz
#cd ipvsadm-1.24
将当前使用内核连接到/usr/src/Linux
ln-s/usr/src/kernels/Linux-2.6.27/usr/src/Linux//将当前使用内核连接到/usr/src/Linux,假设当前系统内核版本是2.6.27,内核解压在/usr/src/kernels/Linux-2.6.27目录
make&&make install//编译与安装
ipvsadm安装完成。
3.配置基于DR模式LVS集群
(1)Load Balancer:172.17.2.1
#vim/usr/local/lvs/lvs//编辑LVS启动脚本/usr/local/lvs/lvs
#!/bin/sh
VIP=172.17.2.4//指定虚拟IP
RIP1=172.17.2.6//设置真实服务器1的IP
RIP2=172.17.2.8 //RIP1-RIP2为真实服务器IP,如有更多真实服务器则可以添加更多
/etc/rc.d/init.d/functions
case"$1"in//分支语句,对$1的参数值做选择
start)//当参数值为start时
echo"start LVS of DirectorServer"//显示“start LVS of DirectorServer”字符
#设置虚拟地址
/sbin/ifconfig eth0:0$VIP broadcast$VIP netmask 255.255.255.255 up//在网卡eth0上绑定虚拟IP地址172.17.2.4
/sbin/route add-host$VIP dev eth0:0//LVS启动时添加VIP的网口eth0:0
#清除IPVS表
/sbin/ipvsadm-C//清除IPVS表
#设置LVS
/sbin/ipvsadm-A-t$VIP:80-s rr #rr是使用了轮叫算法
/sbin/ipvsadm-a-t$VIP:80-r$RIP1:80–g//使用ipvsadm来转发客户端请求,-s lc为最小连接数算法,-g指的是采用DR模式。有几个真实服务器就添加几条记录。
/sbin/ipvsadm-a-t$VIP:80-r$RIP2:80-g
#Run Lvs
/sbin/ipvsadm
;;
stop) //LVS的停止参数
echo"close LVSDirectorserver"
/sbin/ifconfig eth0:0 down//停止时候删除VIP的网口eth0:0
/sbin/ipvsadm–C//关闭时清除ipvsadm表
;;
∗)
echo"Usage:$0{start|stop}"//脚本执行时的参数提示
exit 1
esac//case的结束标记,case和esac相对应才构成一个完整的case语句
(2)station6:172.17.2.6
#vim/usr/local/lvs/realserver//真实服务器的启动脚本
VIP=172.17.2.4
/sbin/ifconfig lo:0$VIP broadcast$VIP netmask 255.255.255.255 up//在环回地址上绑定虚拟IP地址172.17.2.4
/sbin/route add-host$VIP dev lo:0//真实服务器启动时添加VIP的网口lo:0
echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo"2">/proc/sys/net/ipv4/conf/all/arp_announce
#:注释:这四句目的是为了关闭ARP广播响应
sysctl–p//通过sysctl命令动态配置内核,使上述设置生效
(3)station8:172.17.2.8
#vim/usr/local/lvs/realserver//真实服务器的启动脚本
文件内容与Real Server 1:172.17.2.6的/usr/local/lvs/realserver相同
(4)分别启动LVS服务
172.17.2.1 /usr/local/lvs/lvs start//启动LVS虚拟服务器脚本
172.17.2.6 /usr/local/lvs/Lvs/realserver start//启动真实服务器脚本
172.17.2.8 /usr/local/lvs/Lvs/realserver start//启动真实服务器脚本
(5)启动station6,station8 apache
/usr/local/apache2/bin/apachectl start//启动Apache服务器
(6)测试VIP 172.17.2.4
访问:http://172.17.2.4
多开几个窗口刷新几次,应该可以看到网页内容转换轮循打开station6,station8的主页。
4.配置基于高可用LVS+heartbeat
对主调度器A,从调度器B都要进行配置
(1)安装heartbeat
#groupadd-g 694 haclient//添加haclient组
#useradd-u 694-g haclient hacluster//添加hacluster用户,所属组为haclient
#tar–zxvf Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.gz//解压heartbeat压缩文件
#cd Heartbeat-STABLE-2-1-STABLE-2.1.4
#./ConfigureMe configure//配置
#make&&make install//编译与安装
#cp doc/ha.cf doc/haresources doc/authkeys/etc/ha.d///拷贝heartbeat的主配置文件ha.cf
#cp ldirectord/ldirectord.cf/etc/ha.d/
heartbeat安装完成。
(2)配置主文件/etc/ha.d/ha.cf//ha.cf为heartbeat的主配置文件
debugfile/var/log/ha-debug//调试日志文件文件,取默认值
logfile/var/log/ha-log//日志文件位置
logfacility local0//日志等级,取默认值
keepalive 2//指定主备服务器多久发送一次心跳
deadtime 20//指定20秒没有收到对方心跳就认为对方已经DOWN机
warntime 10//10秒没有收到心跳,便发出警报。
initdead 120//对方DOWN后120秒重新检测一次
udpport 694//指定监听端口
bcast eth0//心跳监听网口,这里为eth0
ucast eth0 172.17.2.1//采用网卡eth0的udp单播来通知心跳,eth0的IP
auto_failback on//主节点恢复后,自动收回资源
watchdog/dev/watchdog//看门狗。如果本节点在超过一分钟后还没有发出心跳,那么本节点自动重启
node station1//指定主备服务器的主机名称,即在hosts文件中指定的。
第一个node为主服务器,第二个node为备服务器
node station3
ping_group group1 172.17.2.1 172.17.2.3//这两个IP都不能ping通时对方即开始接管资源。
respawn hacluster/usr/lib/heartbeat/ipfail//启用ipfail脚本
apiauth ipfail gid=haclient uid=hacluster//指定运行ipfail的用户。
(3)认证文件(/etc/ha.d/authkeys),authkeys文件的作用是用来设置心跳信息的加密方式。每个值对应一种算法,这个算法是在主节点和从节点间数据校验用的,选取一种认证方式,这个文件的权限必须是600
#vim/etc/ha.d/authkeys
auth 1//认证标示
1 crc//采用crc循环冗余码校验
#sha1 sha1_any_password//sha1的验证方式,没有采用
#md5 md5_any_password//md5的验证方式,没有采用
详细的说明请参考:www.Linux-ha.org
(4)资源文件/etc/ha.d/haresources
这个文件配置的是节点要管理的资源也就是高可用服务,这些资源在主节点DOWN时,从节点就会开启这些资源。Heartbeat认为配置资源名称start/stop就可以开启/停止这些资源。
#vim/etc/ha.d/haresources
station1 172.17.2.4 ipvsadm ldirectord httpd//设置station1为主调度器,集群服务器的IP地址为172.17.2.4,ipvsadm ldirectord为heartbeat控制的资源脚本,集群的服务有httpd
#chmod 600/etc/ha.d/haresources//对资源文件/etc/ha.d/haresources下权
(5)启动heartbeat
#/usr/lib/heartbeat/heartbeat start
(6)配置Ldirectord
Ldirectord的作用是监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord。
配置(/etc/ha.d/ldirectord.cf):是ldirectord进程的配置文件,该进程用来监视真实服务器的运行状况,如果真实服务器不能响应请求则把它排除在转发列表外。
checktimeout=3//设置真实服务器的超时时间
checkinterval=1//监视真实服务器的时间间隔
fallback=127.0.0.1:80//如全部真实服务器失败,则转发至本地
autoreload=yes//改变配置文件内容,不需要重新ldirectord
logfile="/var/log/ldirectord.log"//指定日志位置
quiescent=yes
virtual=172.17.2.4:80//指定虚拟IP
real=172.17.2.6:80 gate//指定真实服务器IP及监听端口
real=172.17.2.8:80 gate
fallback=127.0.0.1:80 gate
service=http
request="index.html"//监听测试页面名称,这个页面放入真实服务器Web服务的根目录
receive="Test Page"//指定测试页面返回内容
virtualhost=some.domain.com.au//虚拟服务器的域名
scheduler=rr #指定转发算法,这里的算法要和LVS脚本的算法一样
(7)启动ldirectord
启动时如果提示ldirectord某行出错,一般是有些运行需要的软件没安装,大部分是perl开头的软件包。
解决办法:http://search.cpan.org搜索Mailtools模块MailTools-2.04.tar.gz


(8)测试:
①将hertbeat在主从调度器上,realserver在真实服务器上开启,测试其是否切换与转发正常工作。

②关闭主节点(或者把主调度器的网线拔掉),在备份节点上执行ipvsadm–ln命令。会发现执行结果与主节点的执行结果一样,表示从节点将自动接管directorserver服务。
至此Apache Web集群平台搭建完毕。
3.3.5 考核要点
表3.3.2 《Web集群服务器的架构》考核标准

3.3.6 能力拓展
基于LVS的负载均衡技术架设Linux Web集群。

