张 奎
(喀什大学 计算机科学与技术学院, 新疆 喀什 844006)
随着“互联网+”思维的广泛深入以及5G时代的到来,各种传统行业借助互联网平台正焕发着新生,新型网络应用的不断涌现,导致客户端数量增加以及产生的数据量爆炸式增长,给网络服务器运维和管理带来了巨大压力[1]。尤其是大量移动终端的便捷接入以及语音、视频、图像等多媒体数据的海量增加,对网络的可用资源提出了更高的要求,使网络拥塞问题更加突出,进而降低了网络服务质量(Quality of Service,QoS)。如何减轻服务器的负载压力,缓解网络拥塞进而提供更高的QoS成了迫在眉睫的问题。传统依靠提高硬件性能的单服务器策略由于存在单点故障等问题,难以从根本上满足要求,目前主要通过集群技术来解决[2]。
集群技术的核心在于负载均衡,即采用开源解决方案来搭建服务器系统,调度器根据负载均衡算法,将客户端的负载请求均衡到后端某一台服务器上去处理,或者并行处理重负载节点上的任务。常见的开源解决方案有Haproxy、Nginx以及LVS等。文献[3]基于Haproxy+Keepalived结构搭建Web集群系统,调度器动态监测集群服务器运行状态,根据轮询调度算法将客户端请求均衡到后端合适的服务器上去,有效解决了服务器单点故障以及运行状态难以获取的问题,但对于内外集群系统隔离以及安全性要求较高的场合,集群的可用性难以保证;文献[4-5]设计了一种Nginx负载均衡集群,调度器收集后台节点的状态参数,配合IP_Hash算法以及加权轮询调度算法来分配客户端请求,进而发挥各个服务器的性能,但是对于大量客户请求、众多后端服务器以及运行状态动态变化的网络来说,该方案难以适应集群系统的动态变化。
本文拟搭建LVS+Keepalived结构[6-7]的Web集群负载均衡系统,采用简单轮询调度算法以及网络地址转换负载均衡(Virtual Server via Network Address Translation,VS/NAT)模式,解决单服务器策略存在的问题,避免网络拥塞,进而提高网络QoS。
集群是将若干松散连接的服务器架构成具有更高性能及高可用性的集群服务器系统[8-10]。LVS集群是基于IP层负载均衡技术和内容请求技术实现的负载均衡集群方案[11-12],调度器根据Linux内核提供的负载均衡技术将负载请求调度到合适的服务器上去,当某一节点出现故障,集群技术自动屏蔽掉故障节点,直至故障解除,进而确保了集群系统的可靠运行。LVS集群提供的负载均衡技术如下[13]:
(1)基于NAT的负载均衡技术(VS/NAT):用户请求访问系统时,前端调度器通过虚拟IP(Virtual IP,VIP)接收报文并执行NAT转换,然后将报文转发到后端服务器节点,节点处理完毕后返回调度器,调度器处理报文头部信息之后以VIP地址作为目的地址返回给请求用户。这种机制由于将不同IP地址提供的并行网络服务变成一个VIP地址上的虚拟服务,有效利用了网络资源,隔离了前后端服务器的差异性。
(2)基于IP隧道的负载均衡技术(VS/TUN):调度器将收到的IP报文封装成另一种IP报文格式并转发到选定的服务器节点,允许报文跨越子网或者虚拟局域网(Virtual Local Area Network,VLAN)进行传递和转发,调度器和真实服务器可以在不同的网络上。这种机制主要用于移动主机和跨网段通信。
(3)基于直接路由的负载均衡技术(VS/DR):调度器对收到的报文按照既定的算法转发到后端服务器节点,经过处理后的报文直接发送给用户主机而不经过调度器。该种机制由于调度器只负责调度报文,服务器直接将响应返回给客户,极大地提高了集群系统的吞吐量。
当集群系统某一节点出现故障或者节点来不及处理海量请求时,如果调度器未能及时切换或者重负载请求来不及处理,就会导致网络拥塞进而降低网络QoS。Keepalived是一款优秀的高可用软件,基于虚拟路由冗余协议(Virtual Router Redundancy Protocol,VRRP)来解决高可用服务之间的故障切换以及硬件单点故障问题[3,6-8]。Keepalived软件通过检测服务器节点的状态,当某一个节点出现故障后,及时移除故障节点并将其上的任务切换到其他节点;当该节点恢复正常后,Keepalived将其重新加入到集群系统中。Keepalived软件运行在OSI/RM 7层体系结构的第3层、第4层及第7层,通常配合Haproxy、Nginx及LVS等开源解决方案。
利用Linux虚拟机搭建如图1所示的Web集群负载均衡系统,其中LVS-Master、LVS-Slave为主、从调度器,RS1和RS2为后端Web服务器池,采用Windows主机来模拟User。系统采用VS-NAT负载均衡模式转发数据包,集群系统划分为外网和内网两个部分,其中外网的LVS-Master-eth0、LVS-Slave-eth0、VMnet8采用公网地址,内网的LVS-Master-eth1、LVS-Slave-eth1、VMnet1、RS1和RS2采用私有地址;外网VIP为公网地址的网关,内网VIP为私有地址的网关,详细配置参数见表1。通过配置实现Web集群系统的高可用性以及高可靠性,通过故障模拟来分析主/从调度器之间的切换,以及后端服务器之间的切换。
图1 LVS+Keepalived结构的Web集群负载均衡系统
表1 详细配置参数
2.2.1 调度器负载均衡配置
调度器采用ipvsadm-1.24.tar.gz源代码包安装和配置LVS软件,配置过程如图2所示。LVS-Master和LVS-Slave上LVS软件的安装及配置方法一致,LVS软件安装完毕,自动运行,检测后台服务器池中的主机运行情况。
图2 ipvsadm软件包配置过程
2.2.2 调度器高可用性配置
调度器上Keepalived软件的安装方法与LVS过程类似,但是ipvsadm-1.24.tar.gz源代码包的编译及安装需要若干依赖包,需要提前安装,如gcc-*、pcre-*、popt-*、zlib-*、openssl-*。Keepalived软件的配置流程如下:
(1)调度器设置,包括LVS-Master、LVS-Slave角色、标识号(router_id)、优先级(priority)、内外网VIP地址;
(2)调度算法设置,采用轮询调度算法;
(3)负载均衡模式设置,采用NAT负载均衡模式,配置内网Web业务端口,配置外网Web业务端口。
主要代码如下:
virtual_server 192.168.10.1 80 { //配置内网业务端口
lb_algo rr //采用轮询调度算法
lb_kind NAT //采用NAT负载均衡模式
real_server 192.168.10.11 80 {
weight 3
TCP_CHECK {
//TCP链接状态监测
}
}
real_server 192.168.10.12 80 {
weight 3
TCP_CHECK {
//TCP链接状态监测
}
}
}
virtual_server 202.201.100.1 80 {
//外网业务端口配置内容同内网业务端口配置
}
主、从调度器上Keepalived软件的安装及配置方法相似,但是需要修改LVS-Slave节点上的keepalived.conf配置文件,将state值修改为BACKUP,priority值修改为80,其余配置内容一致。
2.2.3 RS1和RS2作为后端Web服务器
为配合Web集群负载均衡系统的高可用性以及高可靠性业务需要,RS1和RS2作为后端Web服务器需要使用Apache软件创建Web网站,在/var/www/html目录下采用HTML语言编辑不同内容的Web页面,即index.html,为用户提供Web服务。
User在浏览器中输入外网VIP地址,查看返回后的页面,刷新几次或者再一次建立连接后,查看返回后的页面。初次访问Web集群系统的页面如图3所示,刷新几次后返回的Web页面如图4所示。访问同一个VIP地址返回不同的页面内容,说明前端调度器已经根据后端服务器的运行状况对用户请求进行了分配,实现了负载均衡。
图3 初次访问Web集群系统
图4 刷新几次后访问Web集群系统
正常情况下,LVS-Master由于priority值高于LVS-Slave发挥主调度器角色,优先处理所有用户的连接请求,而LVS-Slave则处于从属地位。当把LVS-Master的LVS和Keepalived全部关闭,即模拟LVS-Master故障,这时外网VIP和内网VIP将迁移到LVS-Slave上,发挥主调度器的角色。把LVS-Master关闭后,LVS-Master系统运行日志如图5所示,说明外网VIP和内网VIP已经从LVS-Master上移除,LVS-Slave开始发挥主调度器的角色如图6所示。
图5 外网VIP和内网VIP从LVS-Master上移除
图6 外网VIP和内网VIP绑定LVS-Salve
正常情况下,RS1和RS2轮流向用户提供Web服务,用户访问Web集群系统后返回不同的页面内容。当关闭RS1的Web服务,即模拟Web服务器故障,用户先在浏览器中输入外网VIP,再刷新几次后,均返回RS2的页面内容;当RS1上的Web服务恢复正常后,则继续承担任务,响应用户请求;当RS1和RS2都出现Web服务器故障,则整个Web集群系统就不再提供Web服务。由于返回的页面内容如图3、图4所示,测试过程及结果类似,故不再赘述。
在LVS集群负载均衡的基础上,设计并实现了一种基于LVS+Keepalived结构的Web集群负载均衡系统。系统在运行过程中,前端调度器通过监测服务器运行状态,配合Keepalived高可用软件及时发现并切换故障节点上的任务,避免了单服务器策略存在的单点故障问题,从而提高了Web集群系统的高可靠性以及高可用性。仿真结果表明,该种结构的集群系统相比单服务器策略具有更好的响应时间和高可用性,同时后端服务器池可以根据系统需要动态增减服务器而不会影响系统的整体运行,系统的可扩展性较好。该种结构的集群系统可以应用到FTP、DNS、E-mail等其他服务中,系统搭建方便,组网灵活,可扩展性较好,对于其他同类需求的集群系统构建具有一定的参考意义。