您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 利用Heartbeat实现Linux上的双机热备份系统
利用Heartbeat实现Linux上的双机热备份系统申志冰罗字(国防科技大学,长沙410073)E—mail:szb263@263.net摘要该文简要介绍了Heartbeat双机热备份软件的原理、使用以及对其的改进,为在Linux平台上实现高可靠性系统提供了一个性价比很高的解决方案。关键词LinuxHeartbeat双机热备份文章编号1002—8331一(2002)19—0126—03文献标识码A中图分类号TP316UsingHeartbeattoImplementDynamicStandbySystemonLinuxShenZhibingLuoNing(NationalUniversityofDefenceTechnology,Changsha410073)Abstract:ThispaperintroducestheprincipleandusageofHeartbeatdynamicstandbysystemsoftware.Inordertomakethehostalivedetectionmorepreciseinthissystem,theauthorsimprovethedetectmethod,andgetanappliedsolution.Keywords:Linux,Heartbeat,Dynamicstandbysysteml前言linux自问世以来,就一直受到人们的关注,并得到了迅猛的发展。特别是近年来.1inux已经发展为一个高性能,稳定可靠的操作系统,已经可以与各种传统的商业操作系统分庭抗礼,占据了一定的市场份额。更由于Linux可以免费获得,并开放源代码,使得它在中小型服务器领域成为性价比最高的选择,有越来越多的用户选择Linux构建Web、Mail、Proxy等各种应用服务器。对于应用服务器来说,能否保证服务的可靠性和持续性,是一个极为重要的问题.特别是对于关键业务。采用高可靠性的硬件设备可以在一定程度上解决这个问题,但是只要系统中存在单点故障点,这个问题就仍然存在。目前,对于这个问题,一般是采用双机热备份或群集技术。群集技术偏重于解决负载均衡问题,投资大、安装使用复杂,一般多用于大型系统,但是对于采用集中式分发器的集群结构来说,分发器仍然要使用热备份技术。对于中小系统来说,一般是采用双机热备份方案。在双机热备份方案中,两台服务器都处于热机状态,备份机实时地监测主服务器的状态,如果主服务器故障了,备份机可以将所有的业务接管过来。双机热备份通常有两种方式,一种是Online方式,两台服务器都在工作,分别担负不同的任务,均衡负载。另一种是Standby方式,备份机不工作,只是监测作业机的工作状况。这两种方式各有利弊。Online方式机器利用率高,但管理上存在一定难度;而Standby管理简单,但备份机大多数时间都在闲置,提高了成本。在Windows和Unix平台上,已经有许多成熟的双机热备份软件,但在Linux平台上,目前还没有很成熟的双机热备份软件。Heartbeat是Linux—HA项目小组(http://.1inux-ha.org)~发的,专用于双机热备份的软件,很多Linux厂商都使用了这个软件,作为整体解决方案的一部分。Heartbeat软件可以在多种Linux和Unix平台上使用,安装配置简单,并遵循GPL规范,可以免费使用,并可以获得源代码,利于修改和二次开发。2Heartbeat介绍2.1Heartbeat的工作原理主服务器上的Heartbeat程序周期性地发送状态消息,以表示本机的当前状态。备份服务器上的Heartbeat程序会实时地监听主服务器发送的状态消息。当主服务器故障时,备份服务器在设定的时间间隔内没有收到主服务器的状态消息,就认为主服务器已经失效,它会自动接管主服务器的IP地址和服务程序,继续提供服务。主服务器从故障中恢复后,会重新发送状态消息,并要求接管IP地址和服务程序,备份服务器收到该消息后,会自动放弃IP地址和服务程序,以便主服务器接管。Heartbeat软件支持三种服务器间通信方式:串口通信、PPP协议通信、UDP通信。系统结构如图1。图l2.2Heartbeat的软件结构Heartbeat软件的总体结构如图2。图2Heartbeat软件主要由图中所示的4个进程和服务程序监控脚本、资源管理脚本等部分组成,本机的进程间通过管道发送消息,并由读写进程进行机器间状态消息的传递。其各部分说明如下:(1)命令处理进程(control_process函数):接受管理员的命令,转换为消息写入管道。(2)消息处理进程(master_status_process函数):周期性地发送状态消息,监控服务程序和其他机器的状态,当服务程序或其他机器发生故障时,发送状态消息,并调用资源管理脚本进行IP地址等资源的接管或释放。(3)读消息进程(read_child函数):从消息通道(串口线或网络)上读取消息,并写入管道。(4)写消息进程(write_child函数):从管道中读取消息,并发送到消息通道上。(5)资源管理脚本(ResourceManager):启动或停止服务程序,声明IP地址或释放IP地址。3Heartbeat的安装与配置3.1安装Heartbeat使用标准的RPM包进行分发,安装十分简单,只需运行一个命令即可:rpm—iheartbeat-0.4.8.i386.rpm也可以使用RPM包管理工具进行安装。3.2配置Heartbeat主要有三个配置文件ha.cf、authkeys、haresources,放在/etc/ha.d/目录下,需要用户手工生成或从安装包中拷贝例子文件进行修改,下面介绍一下这三个文件的配置:(1)authkeys文件主要内容:authll(31122shal3md5Heartbeat可以对机器问交换的消息进行加密,这个文件就是选择加密方式的,其中crc只进行crc校验。auth后面的数字应为选择的方法,其他两种不用的方法就用“静”号注释掉。(2)ha.cf文件主要内容debugfile/var/log/ha—debuglogfile/vat/log/ha-logkeepalive2deadtime1010.0.0.1/dev/ttys210.0.0.2/dev/watchdognodel,snamenode2snamedebule和lole是设置调试文件和日志文件的,建议使用lole项。keepalive项设置机器间交换状态信息的间隔,缺省为2秒,必须设置。deadtime项设置确定机器故障的时间,即在deadtime时间内没有收到一台机器的状态信息,则认为该机器已经故障。缺省为1O秒,必须设置。serial项是在使用串口线进行直接通讯时使用,后面需指定串口的设备名。PPP—udp项是在串口线上使用PPP—udp协议时使用,后面必须指明两个串口设备以及它们的IP地址(使用内部地址)。baud项设置串口通讯时的速率。udppofl项是使用UDP协议进行通讯时使用,用于设置端口,缺省是694。udp项设置使用UDP协议进行通讯时使用的网络设备。node项设置主要服务器和备份服务器,取值为使用“an—ame—a”命令查看得到的机器名,必须设置。(3)haresources文件内容nodename10.0.0.34servicenamenodename是作为主要服务器的机器名称,必须为使用“uname—a”命令查看得到的机器名;10.0.0.34是服务器对外的IP地址;service_name是要进行备份的服务,它必须与该服务在/etc/rc.d/init.d/目录下的启动脚本的名称相同。4对Heartbeat软件的改进4.1Heartbeat软件存在的一些缺点Heartbeat软件在服务器状态的检测和资源的接管上都实现得很好,但是在实际应用中仍然存在一些缺点,主要是:(1)Heartbeat软件只检测服务器的状态,不检测服务程序的状态,在服务程序出现软件故障而停止服务的时候,Heart—beat软件无法检测到这种情况,这在一定程度上降低了系统的可靠性。(2)在服务器故障时,Heartbeat可以进行机器的自动切换,但是不能及时把故障通知管理员,不便于整个系统的维护。(3)服务器故障时,Heartbeat只能进行机器的自动切换,不支持用户自定义其他操作,灵活性较差。4.2改进的目的因为Heartbeat软件提供源代码,所以笔者针对上面所说的两个问题,对其源代码进行了修改,改进的目的在于:(1)监测服务器状态的同时,也监测服务程序的状态,当服务程序故障时,也能自动进行主机与备份机的切换。应支持对多种服务程序的检测,并留给用户实现自定义监测的灵活性。(2)出现故障时,Heartbeat应该能通过邮件通知管理员,并说明是服务器故障还是服务程序故障。(3)用户可以自定义出现故障时的操作,出现故障时,由Heartbeat调用这些操作。4-3改进的实现改进主要改写了master_status_process函数,改进后的流程如下,其中黑体部分是新增加的或经过改动的:for(;;(msg!=NULL))f.send_local—status()发送本机状态信息check—for—timeouts()检查是否有更新状态超时的节点。如有。进行相应处理check_service_status()检测服务进程m~g=iLmsgfromst~am(f,iface)读取消息if(strcasecmp(type,T_STATUS)==O)f此消息是状态消息strcopy(thisnode一status,status);更新消息发送者的状态if(此消息是check_service_status()发出的状态信息){if(服务进程状态由active变为dead){释放资源执行dosth_after_service_dead脚本;服务进程状态由dead变为active接管资源。启动服务进程}}}}其中:check_service_status()函数调用了一个同名的shell脚本,执行检测服务进程的工作,脚本内容如下:#!/bin/sh#./etc/ha.d/shellfuncscase、/etc/rc.d/init.d/namedstatusin[Rr]unningIOKha_clustermsg-!MSGt=statusdest=$1st=active!MSG;:)ha_clustermsg((一!MSGt=statusdest=$1st=dead!MSG;;esac注:脚本中黑体部分就是监测服务程序的命令,用户可以根据服务程序的不同,修改这个命令来监测不同的服务程序,例如,“named”是DNS服务程序的名字,换为“httpd”即可监测WEB服务程序,用户也可以修改这个脚本文件,以适应其他的特殊要求。check—for—timeouts()函数对主服务器发来的状态更新信息进行检查,如果超过指定时间,没有收到新的状态信息,就认为主服务器已经失效,开始进行接管动作。改进后,在进行接管动作之前,执行“dosth_after_mach_dead”脚本。该脚本使用shell编写,用户可以在该脚本中写入“mail”命令及时地通知管理员服务器失效,也可以由用户根据不同的应用写入特定的命令,执行一些必要的操作。dosth—after_service_dead脚本也使用shell编写,用户可以在该脚本中写入“mail”命令通知管理员主服务器上的服务程序失效,也可以写入其他的命令。这两个脚本可以由用户自由编写,以适应用户的不同需要,而且不必修改源程序,极大地提高了系统管理上的灵活性。5结论Heartbeat软件性能可靠、适用范围广、安装配置简单,而且是免费软件,并提供源代码,利于改进和二次开发,十分适合中小企业及单位应用于关键业务,提供高可靠性的服务。而且经改进后,可靠性进一步提高,并可以适应用户的不同需求,管理更加灵活。(收稿日期:2001年10月)参考文献1.计算机系统容错技
本文标题:利用Heartbeat实现Linux上的双机热备份系统
链接地址:https://www.777doc.com/doc-2608755 .html