基于多方决策机制的双机热备模型

2014-12-23 01:18李晓勇
计算机工程与设计 2014年9期
关键词:热备三元组双机

刘 刚,马 威,李晓勇

(1.中国铁路总公司 铁道部信息技术中心,北京100844;2.北京交通大学 计算机与信息技术学院,北京100044)

0 引 言

双机热备是常用的提高系统服务可用性方法之一。比较经典的双机热备协议有VRRP[1]和HSRP[2],很多厂商和开源组织也针对其平台产品推出相应的双机热备方案,比如Linux-HA[3]。双机热备机制的一般原理是主、从服务器/设备通过心跳 (heart beat)协议对对方可用状态的检测和判断,一旦从服务器确认主服务器不可用,就会接管其功能并对客户端提供相关服务,对双机热备机制的研究主要集中在故障发现、服务恢复以及主、从服务器一致性保证方面[3-6]。

但是传统的双机热备机制可能会存在裂脑 (split brain)风险[7,8]。所谓裂脑是指由于主、从服务器之间的通信机制(或心跳机制,heart beat)失效而导致的相互对对方状态的误判,并导致双方不能一致地对外提供服务。有很多原因可能会导致心跳机制失效,比如物理线路问题或心跳软件故障等。Fencing 和Quorum 机制是防范裂脑的常见方法[8,9],比如采用SCSI reserve 和Quorum Daemon 方法、双机状态一致性同步[10]等,但是这些方法也存在很多局限性,比如可能会引入新的单点故障问题,另外这些方法并不通用,比如难以应用在网络设备的双机热备中。

为了克服或缓解传统双机热备机制中存在的 “裂脑”风险,本文提出一种基于多方决策机制的双机热备通用模型。所谓 “多方决策机制”是指主、从服务器不仅依赖自身对对方的观测结果来判断对方的可用状态,而且还依赖服务客户端的观测结果来进一步判断主从服务器的真实可用状态。将客户端的观测结果也作为服务器状态的判定因子是合理的,因为这些服务本身就是为它们提供的,结合主、从服务器和客户端观测结果于一体的多边决策机制能够有效避免双边决策机制的局限性和片面性。另外,本文提出的双机热备模型不仅可以用于主机、数据库服务的热备,也可以用于网络设备的热备。

1 基于多方决策机制的双机热备模型

服务是否可用应该是针对客户而言的,但是在传统的双机热备模型中,并没有从客户端的角度来判断服务的可用性。基于多方决策机制的双机热备模型包括3个重要决策参与实体:主服务器、从服务器和客户端,如图1所示。

图1 基于多方决策机制的双机热备模型结构

对图1结构中各参与实体,我们用通信三元组<m,s,c>表示它与其它2个实体的通信状态,其中,m、s、c分别表示它与主服务器、从服务器和客户端的通信状态;实体之间的通信关系是双向的,即如果实体A 到实体B的通信正常,那么反过来B到A 的通信也正常;反之,如果实体A 到实体B的没有通信关系,那么反过来B 到A也没有通信关系。通信三元组中各元素的值只有0和1这2种,值为0时表示两者之间没有通信关系,1 表示双方通信正常,对每个实体,我们假定它与自身的通信状态恒为1。

图1模型将全部客户端作为一个参与实体,即只要有一个客户端与主服务器或从服务器之间通信正常,那么就认为客户端实体与主服务器或从服务器之间的通信是正常的。

为描述方便,我们用M 表示主服务器的通信三元组、S 表示从服务器的通信三元组、C 表示客户端的通信三元组。

图1模型中,每个实体与其它2个实体之间的通信状态都有4种可能。比如对主服务器有:<1,1,1>表示与其它2个实体之间通信正常;<1,1,0>表示与从服务器通信正常,而与客户端没有通信联系;<1,0,1>表示与从服务器没有通信联系,而与客户端通信正常;<1,0,0>表示与其它2个实体之间都没有通信联系。表1对此给出了详细描述。

表1 各实体通信状态描述

由于通信是双向的,因此表1中3个参与实体的通信状态并不是都能随机组合,比如M=<1,1,1>与C=<0,1,1>就不能同时出现,因为M=<1,1,1>表示主服务器和客户端通信正常,但C=<0,1,1>却表示客户端与主服务器没有通信。排除各种相互矛盾的组合后,表2中列出了3个参与实体通信状态的所有可能组合,并给出了相关含义的解释。

下面我们针对图1模型给出相关定义。

定义1 信息交换规则:基于多方决策机制的双机热备模型中各实体要遵循如下规则:

(1)每个实体都保存一个内部数据结构T,T 是一个三元组T,T=<M,S,C>,其中M、S、C 分别是主、从服务器和客户端的通信状态三元组。系统初始化后,各实体的T 被设置为<<0,0,0>,<0,0,0>,<0,0,0>>;

(2)各实体每隔时间t根据自己的网络连接状态生成对应的通信状态三元组M、S 或C,更新到各自的T 中,并将其尽力发送到其它两个实体。比如主服务器会生成其通信状态三元组M,将其更新自己所保存T 中的M 项并发送到从服务器和客户端;从服务器会生成其通信状态三元组S,将其更新自己所保存T 中的S 项并发送到主服务器和客户端;客户端会生成其通信状态三元组C,将其更新自己所保存T 中的C 项并发送到主服务器和从服务器;

表2 实体间通信状态可能组合及其解释

(3)每个实体在收到其它实体发来的通信状态三元组后,会对T 中对应项进行直接更新;比如主服务器收到从服务器发过来的S 后,会直接更新自己所保存T 中的S 项;

(4)如果某实体在时间段e内都没有收到其它实体的通信状态三元组,就将其T 中对应的项设置为<0,0,0>;比如如果主服务器在过去的e时间段内都没收到从服务器的通信三元组,就会将其T 中对应的S 项设置为<0,0,0>。

根据定义1信息交换规则,各个实体内部的三元组T实际上表示了它对系统全面通信关系的认识。要注意每个实体的T 与系统真实的<M,S,C>并不完全一致,这是因为如果2个实体之间没有通信联系,那么他们就不能获得对方的真实通信状态。表3 中给出了各种通信关系下,每个实体的三元组内容。

表3 不同通信环境中各实体的三元组T 值

从表3可以看出,对于每个实体,除了在与其它2个实体都没有通信联系外 (表3中的阴影项),其三元组T 的值与系统通信状态<M,S,C>是一一对应的,这表示即便每个实体所 “认识”到的系统通信状态与系统真实的通信状态不一样,但并不会影响它对系统真实通信状态的正确理解。实际上,如果一个实体如果与其它实体没有通信联系,那么其它实体的真实通信状态对它也没有任何意义。比如表3最后两行中,主服务器的T 值表示它与从服务器和客户端已经没有任何通信联系,因此不管从服务器和客户端存在通信联系 (表3倒数第二行)还是不存在通信联系 (表3倒数第一行),主服务器都知道自己不能再对外提供服务。

定义2 服务切换规则:基于多方决策机制的双机热备模型遵循如下服务切换规则:

(1)当主服务器保存的T 为<<1,1,0>,<1,1,1>,<0,0,0>>或<<1,0,0>,<0,0,0>,<0,0,0>>时,主服务器退出服务,否则继续提供服务;

(2)当从服务器保存的T 为<<1,1,0>,<1,1,1>,<0,1,1>>或<<0,0,0>,<0,1,1>,<0,1,1>>时,从服务器接管服务,否则继续备用服务。

从表3可以看出,当主服务器保存的T 为<<1,1,0>,<1,1,0>,<0,0,0>>时,从服务器保存的T也为<<1,1,0>,<1,1,0>,<0,0,0>>,此时,主、从服务器与客户端都没有通信,因此对客户端都不可用,也就不存在服务器切换要求。在实际系统中,这种情况下,主、从服务器应该发出告警信息,提醒管理人员网络可能发生故障。

2 安全性分析

要判断基于多方决策机制的双机热备模型是否能正常工作,就必须验证它是否会存在主、从服务器同时争夺对外提供服务的情况,即从服务器试图接管服务时,主服务器是否还要继续提供服务;如果存在争夺服务的情况,那么就可以认为该模型存在 “裂脑”的可能。

首先从服务器接管或者退出的条件进行分析:

根据定义2服务切换规则,从服务器只有在其三元组T 为<<1,1,0>,<1,1,1>,<0,1,1>>或<<0,0,0>,<0,1,1>,<0,1,1>>时,才试图接管服务,此时,主服务器三元组T 分别为<<1,1,0>,<1,1,1>,<0,0,0>>或<<1,0,0>,<0,0,0>,<0,0,0>>,正好是主服务器主动退出服务的条件。显然,基于多方决策机制的双机热备模型避免了主、从服务器 “裂脑”的可能。

然后从上述条件产生的原因进行分析:

从上一节描述可以看出,正是由于客户端的参与,才使得主、从服务器对彼此状态的判断有了更多的依据,进而对彼此状态做出正确的判断。客户端作为服务对象,它们对主、从服务器的状态判断有2个作用:首先它确立了多数优势判断原则,从而打破了传统主、从服务器因为数量相等而导致的在相互状态判断出现矛盾时的争议;其次,在客户端不能为主、从服务器提供判断依据时,即当客户端三元组T 为<<0,0,0>,<0,0,0>,<1,0,0>>时,主、从服务器也无法为客户端提供服务,因此即使彼此出现状态判断矛盾也不会带来更多的服务可用性问题。

3 实现方法

基于多方决策机制的双机热备模型在实现上没有技术障碍。本文推荐的方法是在主、从服务器上都运行双机热备代理软件,同时选择若干客户机,并在这些客户机安装运行相关的客户端代理软件。这些代理软件主要支持定义1和定义2中的规则:

(1)各实体通过IP 组播方式 (Multicast)相互发送hello报文,报告各自的通信状态三元组<m,s,c>;

(2)各实体根据其通信状态和接收到的hello报文信息,对其三元组T=<M,S,C>进行维护。

为了保证通信状态信息交换的实时性和可靠性,所有实体都需要维护几个时间变量,包括:

(1)hello报文发送间隔时间hello-time,对应定义1中的时间t。每个实体每隔时间t向其它实体外发送hello报文,报告其通信状态;

(2)T 中元素项过期时间expire-time,对应定义1 中的时间e。如果一个实体在expire-time内没有收到其它实体的通信状态信息,那么它就将其三元组T 中对应元素设置为<0,0,0>;比如在expire-time内,如果主服务器没有收到来自任何客户端的hello报文,那么其T 中的C被设置为<0,0,0>。expire-time应该大于hello-time,考虑到网络的可能延迟,一般前者至少设置为后者的3倍。

由于所有客户端整体作为一个参与实体,因此对于任意客户端,它生成客户端通信状态三元组C 的方式不同于其它2个实体。所有客户端都会根据自己的通信状态和其它客户端的hello报文来设置自己的通信状态三元组,比如如果某客户端与从服务器没有通信联系,但是只要它收到有任何一个客户端在其hello报文里报告与从服务器通信正常,那么它就会将其通信状态三元组<m,s,c>中的s位设置为1;类似原理,对于主、从服务器,只要有一个客户端与其有通信连接,那么其通信状态三元组<m,s,c>中的c位就应该被设置为1。

另外,要尽量避免客户端同时离线带来的问题。如果所有客户端都被关机,那么主、从服务器都会认为与客户端的通信出现故障。为了避免这种现象的发生,选择客户机时要注意以下事项:①选择适当数量的客户机;②确认这些客户机不会同时离线或关机;③尽量确保这些客户机不同时连接在同一个网络接入设备上,避免网络设备故障导致所有客户机同时离线。

4 结束语

双机热备在保证服务高可用性方面应用广泛。双机热备方案主要是通过心跳协议来进行可用状态的判断,因此会存在 “裂脑”的风险。在现有的防 “裂脑”的机制往往缺乏通用性,有些方案会导致新的单点故障问题等。本文提出了一种基于多方决策机制的双机热备通用模型,引入了服务客户端对系统服务状态的观测结果,并将其作为主、从服务器判断对方是否可用的重要因子,对包括主、从服务器和客户端在内的多方观测结果进行综合分析,为判断系统服务状态提供依据,有效避免了传统双边决策机制的局限性和片面性,同时也具有多种服务模式的通用性。

基于多方决策机制的双机热备模型可以克服传统双机热备系统中可能出现的 “裂脑”问题。经理论分析,该模型实现方法并不复杂,配置灵活,同时不要求对系统平台和应用程序进行改动,有较好的应用推广价值。

[1]IETF.Virtual router redundancy protocol(VRRP)version 3 for IPv4 and IPv6 [EB/OL].http://tools.ietf.org/html/rfc5798,2010.

[2]Cisco.Cisco hot standby router protocol(HSRP) [EB/OL].[2012-09-26].http://www.cisco.com/en/US/tech/tk648/tk362/tk321/tsd_technology_support_sub-protocol_home.html.

[3]Bharadwaj S.Dual server hot standby architecture for disaster recovery [EB/OL].http://webserver.iiitb.ac.in/sites/default/files/uploads/IIITB-TR-2012-004.pdf,2012.

[4]Liu Zhiming.Fault detection for high availability RAID system[C]//Sixth International Conference on Networked Computing and Advanced Information Management.IEEE,2010:27-32.

[5]Nakamura S,Nakayama K,Nakagawa T.Optimal backup interval of database by incremental backup method [C]//IEEE International Conference on Industrial Engineering and Engineering Management,2009.

[6]Rizwan SM,Khurana V,Taneja G.Reliability analysis of a hot standby industrial system [J].International Journal of Modelling &Simulation,2010,30 (3):315.

[7]Linux-HA.Linux-HA’s documentation [EB/OL].[2011-02-28].http://linux-ha.org/wiki/Main_Page.

[8]Schatz,Bob,Oleg Kiselev.System and method for preventing data corruption in computer system clusters [P].U.S.Patent No.7,631,066,2009.

[9]Tech Thoughts.Split-brain,quorum,and fencing-updated[EB/OL] .[2007-10-10].http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html.

[10]YANG Xiaofen,WANG Yonghui,LIU Yi,et al.Design and implementation of dual-server hot-standby system for realtime database [J].Computer Engineering and Applications,2012,48 (29):124-127 (in Chinese). [杨晓芬,王永会,刘轶,等.实时数据库系统双机热备机制设计与实现 [J].计算机工程与应用,2012,48 (29):124-127.]

猜你喜欢
热备三元组双机
特征标三元组的本原诱导子
热备动车组配置方案优化模型
东海区实时海洋观测数据库双机热备系统解决方案
关于余挠三元组的periodic-模
双机、双桨轴系下水前的安装工艺
一种应用于分布式网络的地址分配及热备技术
一个时态RDF存储系统的设计与实现
双机牵引ZDJ9道岔不同步问题的处理
Loader轴在双机桁架机械手上的应用
三元组辐射场的建模与仿真