; u% I3 r r" J5 H 在功能实现上,故障判别机制和传统定时器的作用是相同的。对于传统定时器方式:在处理器未收到对方的心跳信息时,启动定时器,在所设置的时间内仍没有收到信息,判断为处理器失效,这时由于等待deadline可能已经延误了主备切换的时间。 5 M, }6 ]( f2 p3 h1 E 由于本方案采取冗余心跳网络,对于一条心跳链路来说,如果处理器未收到心跳信息,则进入故障判别模式,询问另一条心跳线是否收到心跳信息;如果结果一致,则迅速启动主备切换。这样可以减少不必要的等待时间,也可以避免由于线路拥塞造成的误判。& ]5 O: W; Q. T M" @: A 2.2 分级的自适应周期设计) ]$ i# R' k3 c
针对心跳周期难以设定的问题,采用了一种自适应周期的设计。其原理是:首先设定高、中、低三种心跳信任级别的周期:1s、3s、5s。心跳频率调节原理如图3所示,通过最近发生的N次心跳求其平均值Tr与三个级别相比较,以确定其下一阶段采用的心跳频率。这样可以根据实际网络运行的情况实现高可用性。" G2 Z+ s& y; V) `
* x* G+ A! h' F
) x0 I# F3 q0 r8 v% q# K+ o 2.3 基于网络层的心跳传输机制设计% C2 g! G# k- b' G- h% s8 b
由于以往的心跳传输基本采用TCP或UDP方式,在实现中必须遵从TCP/IP协议信息处理的层次流程,使实时性的要求无法保证。为了缩短处理时经过的层次,设计了一种基于网络层的心跳传输方式。 % T+ ^ ]) ]7 B/ x 心跳模块工作层次结构图如图4所示。心跳模块与上层应用完全分隔开,它处于链路层和网络层。通过在链路层对帧头的类型字段的检查,区分出心跳报文与IP报文。如果是IP报文,则送入上层协议栈;如果是心跳报文,则进入心跳报文队列,并触发一个中断,通告心跳模块进行处理。以往通过应用层的心跳信息必须通过插口层再到应用层进行处理,这个过程要经过路由、选径、报文确认等一对一地心跳传输中所不必要的步骤,增加了网络的开销,更降低了传输效率。 ( u% Y$ u; n& e/ m, A) c
# l; g+ E) `0 e, z/ B5 D8 h( t* I" h# ^( `) m6 \. V
- v s" j2 G: Z/ D2 W 以上设计的方案在ACR路由器的主控支撑软件主备切换模块中,已成为心跳探测机制工作中关键的一环。实践证明,此方案不仅在发现故障上实现了最低延迟,同时将误判率降至最低,为主备切换做好了基础性工作。从而为保证系统可靠性提供了前提。但在实现时增加了系统的复杂性,因此如何设计一个高效、准确且实用的心跳协议仍是双机热备系统设计中需认真考虑的关键问题之一。 . z, S( d1 p, ]+ i& [& N. L参考文献 & L8 F e0 S F- J; [6 p[1] 尹康凯,王明伟,李善平.高可用性机群中多个节点的心跳模型研究.计算机工程,2005.5 p4 z1 r% G+ ?9 ^' I
[2] David Patterson,Aaron Brown, Pete Broadwell. Recovery oriented computing(ROC): motivation,definition,techniques,and case STUDIES[R].Technical Report CSD-02-1175,UC Berkeley,2002.# U' j" K. H: ^3 K' ?- p
[3] Sameer Srivastava. Redundancy management for network devices. 2003. IEEE2 d; \/ c5 k8 w8 | o0 ^1 x$ Q' o
[4] Evan Marcus,Hal Stern. 高可用性系统设计.北京:清华大学出版社,2005.; e+ y) i, p1 [# b& q
[5] John L H, David A P. Computer architecture: A quantitative approach[M].北京:机械工业出版社, 2002.