专利名称:高可用集群系统的裂脑预防方法
技术领域:
本发明属于计算机集群技术领域,具体涉及两种预防集群系统裂脑问题的方法,保证系 统的高可靠性。
背景技术:
随着通信网络技术的飞速发展,电信、金融、电子政务等关键领域对服务器可用性的要 求越来越高,由于服务器故障导致的停止提供服务将造成巨大的损失,采用高可用集群系统 可以大幅提高系统的可用性,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。
双机高可用集群系统由两个被称为节点的服务器通过网络(或串口等其他连接方式)连 接组成。在这两台服务器A、 B中,A为工作机,B为备份机,它们之间通过心跳线来连接。 一般在服务器上都配有两块网卡,其中一块专门用于两台服务器(节点)间的通讯。主服务 器和备份服务器上都运行着heartbeat程序,通过传送诸如"我活着"这样的信息来监测对方 的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就激活fake程序,让备份 服务器接管主服务器器继续提供服务;当备份服务器器又从主服务器器收到"我活着"这样的 信息时,它就使fake程序无效,从而释放IP地址,这样主服务器器就开始重新接管服务提 供的工作了。这样可以在最大限度上保证服务器不间断的正常提供服务。
虽然集群系统可以大幅提高服务器的可用性,但也会出现裂脑情况,相应带来数据可靠 性的问题。
集群的两个节点通常都连接着一个共享的存储设备,当主节点发生故障时,会停止对共 享存储设备的使用,这时备用节点接管故障节点的任务开始读写存储设备。但是当两个节点 间的连接出现故障时,会出现主节点运行正常而被备用节点误认为运行故障,这样将导致两 个节点同时对存储设备进行读写,数据会被破坏,这种情况称为裂脑。在电信、金融、电子 政务等关键领域中数据被破坏可能会造成不可弥补的重大损失。
发明内容
本发明的目的是克服上述裂脑问题,提供两种有效预防裂脑的方法,此两种方法不需任 何额外硬件支持。
第--种方法是通过检测最后2根心跳线是否同时断来判断是否发生裂脑。如果心跳断裂间隔超过一个常量,就宣布裂脑。具体步骤如下
1) …-般主节点和各用节点之间会有两条或两条以上的心跳链路,heartbeat稈序一直在 监视心跳的状态。
2) 设T1为上一次心跳断时间,初始化为0, T2为当前时间。
3) 节点的集群软件(比如heartbeat程序)监视到收到心跳lnk状态改变事件,若为 ONLINE,执行步骤3,若为DEAD,执行步骤4。
4) 心跳lnk状态改变为0NLINE,说明心跳恢复,则将T1重新设为0。
5) 心跳lnk状态改变为DEAD,说明另一节点故障或两节点间心跳链路故障,检査几条心 跳链路的状态是否已经全都为DEAD即心跳全部断,如果是就在这时获取T1、 T2的值,若T1 不等于0且(T2-T1)大于预先设定的常量值,则可判断是心跳链路发生故障,不在备用节点启 动服务。若T1等于0或0"2-T1)小于预先设定的常量值,则是节点故障,在备用节点启动服务。
第二种方法是通过ping浮动IP方法判断服务是否已经在对方节点启动从而预防裂脑,具
体步骤如下
1) 收到心跳lnk状态改变事件,节点启动服务前,ping对方节点浮动IP判断服务是否已 经在对方节点启动,通过MAC校验或其他校验方法来判断是否对方节点。
2) 如果服务在对方节点启动,本节点服务不进行启动。如果本地工作链路不通,本地不 会启动服务,如果对方节点工作链路不通,对方节点不会启动服务,从而避免了2个节点同时
启动同一服务的问题。
图1为双机高可用集群系统拓扑图
具体实施例方式
本发明主要针对双机高可用集群系统,可以很容易的实现在各种平台上,经过发明人多 次的实现和测试,本发明可以有效的预防裂脑发生。
图l示出了有代表性的双机高可用集群系统拓扑图,系统有两台节点,服务器节点A和 B。每台服务器有四张网卡eth0-eth3。 eth0和ethl设置bonding,采用热备模式,其中 eth0作为Active,连接到交换机A, ethl作为Backup,连接到交换机B。通过设置对外 服务管理,产生公共网卡IP (public IP)地址,作为工作链路。eth2和eth3和另一节点对应的网卡通过交叉网线相连,并且两个节点通过串口线将各自的第一个串口相连,这些连 接将作为心跳链路,负责传输心跳信号。此外,两台机器通过SCSI线缆与共享的磁盘阵列 相连,运行在两台服务器中的集群软件包含本发明的实现程序。
本发明的第 一种方法首先判断两条交叉网线和一条串口线上心跳链路的心跳状态是否都 为断裂,如果是就用当前时间减去上一次心跳断裂的时间,差值大T预先设定的常量就可判 断是心跳链路故障,差值小于预先设定的常量就可判断是对方节点故障。
本发明的第二种方法在收到心跳lnk状态改变事件后,节点启动服务前,pjng对方节点浮 动IP172.16.100.10和172.16.100.12判断服务是否已经在对方节点启动,通过MAC校验 来判断是否对方节点。如果服务在对方节点启动,本节点服务不进行启动。如果本地工作链 路不通,本地不会启动服务,如果对方节点工作链路不通,对方节点不会启动服务,从而避 免了 2个节点同时启动同 一服务的问题。
下面是本发明两种裂脑预防方法伪代码的实现
第一种方法,即通过检测最后2根心跳线是否同时断来判断是否发生裂脑的方法。 Tl为上一次心跳断时间,初始化为0 T2 =当前时间 if(lnk状态变为DEAD)《
if(Tl != 0 && (T2 - Tl) > C(zte)){ if(active_lnk_cnt == 0 K if(ping通对方网口IPK 判断为裂脑发生
}else{ /*只有一根心跳,或者心跳断间隔< C(zte) */ 忽略,当做节点死处理
Tl = T2j }else{ /* lnk状态变为ONLINE */ if(activejnk一cnt >= 2){
Tl = 0; /*心跳恢复,Tl清零*/
第二种方法,即通过ping浮动IP方法判断服务是否已经在对方节点启动的方法。if(工作链路连通K
/*启动服务前先进行ping浮动IP裂脑判断。*/ if(浮动IP存在)(
从/proc/arp取得该浮动IP的对应MAC地址,和对方节点MAC比较
if(并且MAC属于对方节点网络接口 K
/*服务已经在对方节点运行*/ 启动失败,返回
}else{
正常启动
》else(工作链路不通K /*集群实时检测工作链路状态*/ 在本节点自动关闭所有和该工作链路相关服务
权利要求
1.一种高可用集群系统的裂脑预防方法,包括以下步骤1)一般主节点和备用节点之间会有两条或两条以上的心跳链路,heartbeat程序一直在监视心跳的状态。2)设T1为上一次心跳断时间,初始化为0,T2为当前时间。3)节点的heartbeat程序监视到收到心跳Ink状态改变事件,若为ONLINE,执行步骤3,若为DEAD,执行步骤4。4)心跳Ink状态改变为ONLINE,说明心跳恢复,则将T1重新设为0。5)心跳Ink状态改变为DEAD,说明另一节点故障或两节点间心跳链路故障,检查几条心跳链路的状态是否已经全都为DEAD即心跳全部断,如果是就在这时获取T1、T2的值,若T1不等于0且(T2-T1)大于预先设定的常量值,则可判断是心跳链路发生故障,不在备用节点启动服务。若T1等于0或(T2-T1)小于预先设定的常量值,则是节点故障,在备用节点启动服务。
2. 如权力要求1所述的一种高可用集群系统的裂脑预防方法,其特征在于步骤1中的 心跳链路可以是交叉网线或串口线。
3. 如权力要求1所述的一种高可用集群系统的裂脑预防方法,其特征在于步骤3中的 heartbeat程序可以是其他任何能监视心跳状态的集群软件。
4. 如权力要求l所述的一种高可用集群系统的裂脑预防方法,其特征在于步骤4中的 心跳状态ONLINE可以是其他任何表示心跳恢复的符号。
5. 如权力要求1所述的一种高可用集群系统的裂脑预防方法,其特征在于步骤5中的 心跳状态DEAD可以是其他任何表示心跳断裂的符号。
6. —种高可用集群系统的裂脑预防方法,包括以下步骤1) 收到心跳lnk状态改变事件,节点启动服务前,ping对方节点浮动IP判断服务是否已 经在对方节点启动,通过MAC校验来判断是否对方节点。2) 如果服务在对方节点启动,本节点服务不进行启动。如果本地工作链路不通,本地不 会启动服务,如果对方节点工作链路不通,对方节点不会启动服务,从而避免了2个节点同时 启动同一服务的问题。
7. 如权力要求6所述的一种高可用集群系统的裂脑预防方法,其特征在于步骤1中可 以通过MAC校验外的其他校验方法来判断是否对方节点。
全文摘要
本发明提供两种集群系统的预防裂脑方法。第一种方法是通过检测最后2根心跳线是否同时断来判断是否发生裂脑,第二种方法是通过ping浮动IP方法判断服务是否已经在对方节点启动从而预防裂脑。这两种方法都能有效预防双机高可用集群系统的裂脑问题,保障数据不被破坏,且都具有不需任何额外硬件支持的优点。
文档编号H04L1/00GK101291243SQ20071002755
公开日2008年10月22日 申请日期2007年4月16日 优先权日2007年4月16日
发明者晶 周, 梁晓君, 罗锦华, 强 蔡, 邵济平, 晟 邹, 颜定成 申请人:广东省新支点技术服务有限公司