论文部分内容阅读
摘 要:本文介绍了Linux系统的集群模块LVS及其工作在DR模式下的原理,并通过实验针对Helix流服务器从安装、配置和测试详细说明了如何利用LVS和Piranha搭建高可靠性的视频流服务的集群环境。
关键词:集群;流媒体;高可用性;LVS;Piranha;Helix
中图分类号:TP316
1 LVS简述
Linux内核从2.4版本后内置了LVS(Linux Virtual Server)模块,通过该模块提供的负载均衡功能可实现一个高性能、高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性,能以低廉的成本实现最优的服务性能。LVS提供了NAT(Network Address Translation)、TUN(IP Tunneling)和DR(Direct Routing)三种负载均衡工作模式以及包括轮询(RR)、加权最少连接(WLC)、基于局部性最少连接(LBLC)等八种调度策略[2],使用者可根据自己的实际需求进行选择配置。通常基于编解码工作方式(如Real Stream)的流媒体服务器具有高数据吞吐和高运算资源占用的特点,单台服务器难以承载大用户量的并发请求,服务常因为编解码运算和网络I/O等原因而出现瓶颈,很适合应用集群技术来提高服务能力。
2 搭建LVS环境
LVS本身仅实现了集群服务的功能,在现实环境中还须考虑整个集群的高可用性(High Availability,HA)问题,比如如何发现故障服务器并将其剔出集群平台。目前能与LVS进行很好协作以提升集群平台的可靠性的平台有Piranha、Keepalived、Ultra Monkey和heartbeat,这些软件各有优缺点,功能实现的侧重点也不一样,本文实验将选用Piranha平台。
2.1 需求分析
流媒体服务与ftp和http等网络服务的流量特征相同,请求的流量往往远小于回应的流量,因此与NAT和TUN两种模式相比,DR模式的非对称特点更适合应用于搭建流媒体服务器的优势。DR模式的原理简单来说是由Director(调度服务器)将接收到的用户请求根据策略算法选取一台Real Server(实体服务器)并把请求转发过去,后由Real Server直接回复给用户,可见,DR模式下的Director只负责调度请求,真正的响应还是由各实体Real Server完成。至于调度策略,本文实验选用较简单的轮询(RR)算法。
2.2 环境说明与体系架构
集群由三台服务器组成(操作系统均装为RedHat AS5,内核2.6.18),集群整体对外的公开服务虚拟地址(VIP)是10.0.1.100。其中一台用作Director安装ipvsadmin和Piranha,地址为10.0.1.101;另两台作为Real Server安装Helix流媒体服务(以下也称作Helix服务器)以rstp协议流(服务端口为554)提供音视频流服务,地址分别为10.0.1.102与10.0.1.103。
ipvsadmin是LVS的用户交互管理工具,它以命令形式让用户对LVS的工作模式和均衡策略进行配置。虽然内核内置有LVS功能,但默认情况下因为对它未作任何配置,所以LVS模块不会被启用,只有在使用ipvsadmin进行配置后,相关的内核模块会被激活(通过lsmod命令可发现“ip_lv”等模块文件被加载)。
Piranha作为Redhat自带的HA平台,主要实现在两个可靠性保障功能:一是能够动态监测Real Server健康状态,并通过实时监测情况动态调整LVS的策略(比如将异常的Real Server移出集群),确保Real Server的可靠性;二是基于Piranha还能实现主备双活冗余Director的环境(本文将不实现此功能),确保Director的可靠性。同时,Piranha还提供了便用的web方式管理配置界面(需安装php软件包以支持),可以认为Piranha调用ipvsadmin对LVS进行策略配置与调整,也省去了人工以ipvsadmin命令方式配置LVS的工作。
2.3 安装及配置
2.3.1 网络环境设置
(1)Director
#ifconfig eth0:1 10.0.1.100 broadcast 10.0.1.100 netmask 255.255.255.255 up
#route add -host 10.0.1.100 dev eth0:1
#echo "1" > /proc/sys/net/ipv4/ip_forward
说明:在实体网卡eth0(接口名为eth0:1)上绑定虚拟地址10.0.1.100(也可通过新建network服务的网络配置文件来实现)使Director服务器能够接收来自客户端且目标为虚拟地址的请求包,同时打开转发功能开关使lvs能将数据包修改后转发给Real Server。需要注意的是,转发的数据包目标地址仍为10.0.1.100,仅仅是将目标MAC地址改为Real Server的MAC地址,因此还添加了一条从eth0:1发送此类数据包的路由策略。
(2)Real Server
#ifconfig lo:0 10.0.1.100 broadcast 10.0.1.100 netmask 255.255.255.255 up
#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
说明:在回环上添加一个新的接口“lo:0”,并以32位的掩码将虚拟地址10.0.1.100配置在此接口,这样做仅仅是为了让Real Server能够接收目标地址为10.0.1.100的数据包并做回应,而不会在网络上主动以此地址为源地址发起连接并传出数据。对arp_ignore、arp_announce参数的设置是为了避免Real Server对查询10.0.1.100地址的arp请求进行回应,这是因为Director和Real Server都配置了虚拟地址,但整个集群体系只允许有Director以虚拟地址的身份对外公开,及防止网络上的地址混乱同时也实现了Director成为集群体系的唯一入口。
2.3.2 集群环境安装
(1)在Director上安装ipvsadmin、piranha。利用chkconfig命令将ipvsadmin和piranha服务设置为开机自动运行。如果没有安装piranha,我们还需要直接通过ipvsadmin命令方式来配置LVS的策略:
ipvsadm -A -t 10.0.1.100:554 -s rr
ipvsadm -a -t 10.0.1.100:554 -r 10.0.1.102:554 -g
ipvsadm -a -t 10.0.1.100:554 -r 10.0.1.103:554 -g
(2)利用piranha的管理工具(piranha-passwd)设置管理账号(piranha)的密码,以WEB方式进入piranha的管理后台(端口为3636),在“VIRTUAL SERVERS”管理项中添加并配置我们的集群服务:
1)[VIRTUAL SERVER]设置名称(helix-virtual-server)、服务端口(554)、虚拟地址(10.0.1.101)、掩码(255.255.255.255)、网络设备(eth0:1)、均衡策略(Round robin);
2)[REAL SERVER]添加两台Helix服务器并分别配置名称(helix01,helix02)、地址(10.0.1.102,10.0.1.103)、权重(1,1),配置完成后勿忘将两台Helix服务器设置为激活状态;
3)[MONITORING SCRIPTS]检测发送(DESCRIBE / RTSP/1.0\r\n\r\n)、期待接收(SET_PARAMETER)。
与“REAL SERVER”一样,在集群配置完成后需要在“VIRTUAL SERVER”中把相应的虚拟主机激活,以上通过web方式完成的配置都会体现在piranha的配置文件/etc/sysconfig/ha/lvs.cf中。需要说明的是对Helix服务器的健康检测是基于rtsp协议[1]来进行的,向Helix服务器发送“DESCRIBE”命令请求某个视屏节目(文件)的描述,在服务器正常运行情况下将会返回以“SET_PARAMETER * RTSP/1.0”开头的响应数据,在实际中我们无须请求一个真实存在的文件(上面配置请求根下的空文件,即“/”),此时同样会收到服务器按上述的协议格式告知文件不存在的信息,作为简化处理我们只选用“SET_PARAMETER”作为期待接收的内容。
(3)运行说明
在Director上启动piranha需要开启pulse和piranha-gui两个服务,运行后会产生包括pulse、lvs、nanny和piranha-gui四类进程。
1)pulse是整个piranha的主控进程,用于启动和控制所有的其他守护进程。对于主备冗余Director的环境,主Director上的pulse用于启动lvs守护进程,而备Director上的pulse则定期收发心跳信号监控主Director的状态,以实现异常情况下的Director切换。
2)nanny监控进程运行在主Director上,监控每一个RealServer的健康状况。
3lvs进程也运行在主Director上,通过ipvsadmin来建立与维护ipvs路由表并对每一个RealServer指派一个nanny监控进程。如果发现某个RealServer失效,则将此RealServer从I路由表中删除。
4)piranha-gui是实现piranha的图形管理的web服务。
2.4 测试
在客户机电脑上利用RealPlayer播放器先后两次播放虚拟服务器上的视频文件rtsp://10.0.1.00/demo.rmvb(两台Helix服务器上均有),通过Helix自带的监控发现两台RealServer服务器的文件分别被请求一次,说明请求由虚拟服务器按照调度策略进行了分发且RealServer能够正常的响应;在Helix管理工具中可看到虚拟服务器周期性分别对两台Helix发出了心跳检测请求,且在关闭某台RealServer的Helix服务后,通过piranha管理界面发现虚拟服务器及时获知了异常情况,并调整转发策略保证服务的稳定运行。由此,说明整个基于piranha的视屏流服务集群环境已成功建立。需要说明的是,Helix默认情况下会对所有的数据请求进行日志记录,对来自Piranha高频的检测性请求进行日志是无意义的且会增加服务器的负载,因而除非进行调试或排错,正式运行时建议将来自于DR服务器的请求不做日志记录。
3 总结
本文通过实验介绍了如何建立一个基本的视频流集群环境,整个环境的可靠性主要体现在对后端RealServer的健康检查并实时调整转发策略,在实际应用中为达到更高级别的可靠性要求,还应实现针对前端虚拟服务器的高可用性保障,由多个Diector服务器组成前端的“局部”集群,并通过内部监控手段实现可用的冗余多活的虚拟服务器,Piranha、Keepalived、heartbeat都已实现相关的功能,可根据实际需求进行相关配置。此外,对于转发策略本文仅使用了最为简单的轮训算法作为示例,实际环境下应该针对集群中不同的服务器硬件配置、负载情况、应用类型等因素选择适用的算法以达到最优的集群性能。
参考文献:
[1]RTSP协议分析,http://www.cnblogs.com/qingquan/archive/2011/07/14/2106834.html.
[2]刘玉艳.一种LVS负载均衡调度算法WLC的改进[J].制造业自动化,2010,9(32).
[3]LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义,http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html.
作者简介:翟晓宁(1980-),男,硕士研究生,研究方向:软件应用系统开发研究。
作者单位:装甲兵工程学院训练部信息管理中心,北京 100072
关键词:集群;流媒体;高可用性;LVS;Piranha;Helix
中图分类号:TP316
1 LVS简述
Linux内核从2.4版本后内置了LVS(Linux Virtual Server)模块,通过该模块提供的负载均衡功能可实现一个高性能、高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性,能以低廉的成本实现最优的服务性能。LVS提供了NAT(Network Address Translation)、TUN(IP Tunneling)和DR(Direct Routing)三种负载均衡工作模式以及包括轮询(RR)、加权最少连接(WLC)、基于局部性最少连接(LBLC)等八种调度策略[2],使用者可根据自己的实际需求进行选择配置。通常基于编解码工作方式(如Real Stream)的流媒体服务器具有高数据吞吐和高运算资源占用的特点,单台服务器难以承载大用户量的并发请求,服务常因为编解码运算和网络I/O等原因而出现瓶颈,很适合应用集群技术来提高服务能力。
2 搭建LVS环境
LVS本身仅实现了集群服务的功能,在现实环境中还须考虑整个集群的高可用性(High Availability,HA)问题,比如如何发现故障服务器并将其剔出集群平台。目前能与LVS进行很好协作以提升集群平台的可靠性的平台有Piranha、Keepalived、Ultra Monkey和heartbeat,这些软件各有优缺点,功能实现的侧重点也不一样,本文实验将选用Piranha平台。
2.1 需求分析
流媒体服务与ftp和http等网络服务的流量特征相同,请求的流量往往远小于回应的流量,因此与NAT和TUN两种模式相比,DR模式的非对称特点更适合应用于搭建流媒体服务器的优势。DR模式的原理简单来说是由Director(调度服务器)将接收到的用户请求根据策略算法选取一台Real Server(实体服务器)并把请求转发过去,后由Real Server直接回复给用户,可见,DR模式下的Director只负责调度请求,真正的响应还是由各实体Real Server完成。至于调度策略,本文实验选用较简单的轮询(RR)算法。
2.2 环境说明与体系架构
集群由三台服务器组成(操作系统均装为RedHat AS5,内核2.6.18),集群整体对外的公开服务虚拟地址(VIP)是10.0.1.100。其中一台用作Director安装ipvsadmin和Piranha,地址为10.0.1.101;另两台作为Real Server安装Helix流媒体服务(以下也称作Helix服务器)以rstp协议流(服务端口为554)提供音视频流服务,地址分别为10.0.1.102与10.0.1.103。
ipvsadmin是LVS的用户交互管理工具,它以命令形式让用户对LVS的工作模式和均衡策略进行配置。虽然内核内置有LVS功能,但默认情况下因为对它未作任何配置,所以LVS模块不会被启用,只有在使用ipvsadmin进行配置后,相关的内核模块会被激活(通过lsmod命令可发现“ip_lv”等模块文件被加载)。
Piranha作为Redhat自带的HA平台,主要实现在两个可靠性保障功能:一是能够动态监测Real Server健康状态,并通过实时监测情况动态调整LVS的策略(比如将异常的Real Server移出集群),确保Real Server的可靠性;二是基于Piranha还能实现主备双活冗余Director的环境(本文将不实现此功能),确保Director的可靠性。同时,Piranha还提供了便用的web方式管理配置界面(需安装php软件包以支持),可以认为Piranha调用ipvsadmin对LVS进行策略配置与调整,也省去了人工以ipvsadmin命令方式配置LVS的工作。
2.3 安装及配置
2.3.1 网络环境设置
(1)Director
#ifconfig eth0:1 10.0.1.100 broadcast 10.0.1.100 netmask 255.255.255.255 up
#route add -host 10.0.1.100 dev eth0:1
#echo "1" > /proc/sys/net/ipv4/ip_forward
说明:在实体网卡eth0(接口名为eth0:1)上绑定虚拟地址10.0.1.100(也可通过新建network服务的网络配置文件来实现)使Director服务器能够接收来自客户端且目标为虚拟地址的请求包,同时打开转发功能开关使lvs能将数据包修改后转发给Real Server。需要注意的是,转发的数据包目标地址仍为10.0.1.100,仅仅是将目标MAC地址改为Real Server的MAC地址,因此还添加了一条从eth0:1发送此类数据包的路由策略。
(2)Real Server
#ifconfig lo:0 10.0.1.100 broadcast 10.0.1.100 netmask 255.255.255.255 up
#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
说明:在回环上添加一个新的接口“lo:0”,并以32位的掩码将虚拟地址10.0.1.100配置在此接口,这样做仅仅是为了让Real Server能够接收目标地址为10.0.1.100的数据包并做回应,而不会在网络上主动以此地址为源地址发起连接并传出数据。对arp_ignore、arp_announce参数的设置是为了避免Real Server对查询10.0.1.100地址的arp请求进行回应,这是因为Director和Real Server都配置了虚拟地址,但整个集群体系只允许有Director以虚拟地址的身份对外公开,及防止网络上的地址混乱同时也实现了Director成为集群体系的唯一入口。
2.3.2 集群环境安装
(1)在Director上安装ipvsadmin、piranha。利用chkconfig命令将ipvsadmin和piranha服务设置为开机自动运行。如果没有安装piranha,我们还需要直接通过ipvsadmin命令方式来配置LVS的策略:
ipvsadm -A -t 10.0.1.100:554 -s rr
ipvsadm -a -t 10.0.1.100:554 -r 10.0.1.102:554 -g
ipvsadm -a -t 10.0.1.100:554 -r 10.0.1.103:554 -g
(2)利用piranha的管理工具(piranha-passwd)设置管理账号(piranha)的密码,以WEB方式进入piranha的管理后台(端口为3636),在“VIRTUAL SERVERS”管理项中添加并配置我们的集群服务:
1)[VIRTUAL SERVER]设置名称(helix-virtual-server)、服务端口(554)、虚拟地址(10.0.1.101)、掩码(255.255.255.255)、网络设备(eth0:1)、均衡策略(Round robin);
2)[REAL SERVER]添加两台Helix服务器并分别配置名称(helix01,helix02)、地址(10.0.1.102,10.0.1.103)、权重(1,1),配置完成后勿忘将两台Helix服务器设置为激活状态;
3)[MONITORING SCRIPTS]检测发送(DESCRIBE / RTSP/1.0\r\n\r\n)、期待接收(SET_PARAMETER)。
与“REAL SERVER”一样,在集群配置完成后需要在“VIRTUAL SERVER”中把相应的虚拟主机激活,以上通过web方式完成的配置都会体现在piranha的配置文件/etc/sysconfig/ha/lvs.cf中。需要说明的是对Helix服务器的健康检测是基于rtsp协议[1]来进行的,向Helix服务器发送“DESCRIBE”命令请求某个视屏节目(文件)的描述,在服务器正常运行情况下将会返回以“SET_PARAMETER * RTSP/1.0”开头的响应数据,在实际中我们无须请求一个真实存在的文件(上面配置请求根下的空文件,即“/”),此时同样会收到服务器按上述的协议格式告知文件不存在的信息,作为简化处理我们只选用“SET_PARAMETER”作为期待接收的内容。
(3)运行说明
在Director上启动piranha需要开启pulse和piranha-gui两个服务,运行后会产生包括pulse、lvs、nanny和piranha-gui四类进程。
1)pulse是整个piranha的主控进程,用于启动和控制所有的其他守护进程。对于主备冗余Director的环境,主Director上的pulse用于启动lvs守护进程,而备Director上的pulse则定期收发心跳信号监控主Director的状态,以实现异常情况下的Director切换。
2)nanny监控进程运行在主Director上,监控每一个RealServer的健康状况。
3lvs进程也运行在主Director上,通过ipvsadmin来建立与维护ipvs路由表并对每一个RealServer指派一个nanny监控进程。如果发现某个RealServer失效,则将此RealServer从I路由表中删除。
4)piranha-gui是实现piranha的图形管理的web服务。
2.4 测试
在客户机电脑上利用RealPlayer播放器先后两次播放虚拟服务器上的视频文件rtsp://10.0.1.00/demo.rmvb(两台Helix服务器上均有),通过Helix自带的监控发现两台RealServer服务器的文件分别被请求一次,说明请求由虚拟服务器按照调度策略进行了分发且RealServer能够正常的响应;在Helix管理工具中可看到虚拟服务器周期性分别对两台Helix发出了心跳检测请求,且在关闭某台RealServer的Helix服务后,通过piranha管理界面发现虚拟服务器及时获知了异常情况,并调整转发策略保证服务的稳定运行。由此,说明整个基于piranha的视屏流服务集群环境已成功建立。需要说明的是,Helix默认情况下会对所有的数据请求进行日志记录,对来自Piranha高频的检测性请求进行日志是无意义的且会增加服务器的负载,因而除非进行调试或排错,正式运行时建议将来自于DR服务器的请求不做日志记录。
3 总结
本文通过实验介绍了如何建立一个基本的视频流集群环境,整个环境的可靠性主要体现在对后端RealServer的健康检查并实时调整转发策略,在实际应用中为达到更高级别的可靠性要求,还应实现针对前端虚拟服务器的高可用性保障,由多个Diector服务器组成前端的“局部”集群,并通过内部监控手段实现可用的冗余多活的虚拟服务器,Piranha、Keepalived、heartbeat都已实现相关的功能,可根据实际需求进行相关配置。此外,对于转发策略本文仅使用了最为简单的轮训算法作为示例,实际环境下应该针对集群中不同的服务器硬件配置、负载情况、应用类型等因素选择适用的算法以达到最优的集群性能。
参考文献:
[1]RTSP协议分析,http://www.cnblogs.com/qingquan/archive/2011/07/14/2106834.html.
[2]刘玉艳.一种LVS负载均衡调度算法WLC的改进[J].制造业自动化,2010,9(32).
[3]LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义,http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html.
作者简介:翟晓宁(1980-),男,硕士研究生,研究方向:软件应用系统开发研究。
作者单位:装甲兵工程学院训练部信息管理中心,北京 100072