适用于双控高可用存储系统的磁盘心跳收发方法_2

文档序号:9326621阅读:来源:国知局
都意味着磁盘心跳没有正常收发。
[0050]磁盘心跳给磁盘带来额外的磁盘I/O开销,但对性能的影响可以忽略不计。以m=2来计算:当心跳正常收发时,发送端和接收端共访问心跳盘4次,1PS开销为2。当心跳没有正常收发时(例如发送端和接收端中只有一个在线时),不写入重复的数据,每个心跳只有一次读操作,1PS开销为0.5。
[0051]对磁盘的写入操作为磁盘同步1/0,保证每次写入必须落到磁盘,不使用缓存。
[0052]主节点当且仅当存储池可用时发送磁盘心跳。若存储池在主节点不可用,则暂停发送磁盘心跳,以免对存储池的导入导出造成干扰。
[0053]4.预防脑裂
[0054]高可用系统中,存储池在不同的节点同时被导入造成数据不一致的现象称为“脑裂”。在节点导入存储池之前,检测该存储池是否已有磁盘心跳。若已有磁盘心跳,则放弃导入存储池,避免发生脑裂。
[0055]发送磁盘心跳具体流程如图2所示,包括以下步骤:
[0056]1.1主节点检查存储池状态,若可用,转步骤1.2 ;否则转步骤1.4。
[0057]1.2读取心跳区域,若存在心跳标记,意味着上次心跳没有接收,转步骤1.4 ;否则转步骤1.3。
[0058]1.3向心跳区域写入心跳标记,本次心跳发送成功。转步骤1.4。
[0059]1.4 等待 m 秒(2<m<5),转步骤 1.1。
[0060]其中步骤1.1中,存储池的主节点当且仅当存储池可用时发送磁盘心跳。由于检查存储池状态的操作是个耗时的操作,为了保证心跳能以恒定的周期发送,本发明以异步方式感知存储池状态。由另外的线程定时地执行查询存储池状态的操作并实时更新状态标记。主节点在发送磁盘心跳前只需读取状态标记来判断存储池是否可用。
[0061]接收磁盘心跳具体步骤如图3所示,具体包括以下步骤:
[0062]2.1读取心跳区域,心跳标记若存在,转步骤2.2 ;否则意味着上次心跳发送失败,
转步骤2.3。
[0063]2.2清除心跳标记,本次心跳接收成功,转步骤2.4。
[0064]2.3心跳连续发送失败次数若超过上限,转步骤2.5 ;否则转步骤2.4。
[0065]2.4 等待 m 秒(2<m<5),转步骤 2.1。
[0066]2.5结束磁盘心跳的接收。
[0067]主节点离线或与JBOD的链路断开时,心跳区域将长时间没有心跳标记。此时备节点停止接收磁盘心跳,切换成为存储池的主节点以接管数据服务。
[0068]脑裂预防检测:在节点导入存储池之前,需要先读取心跳区域。若心跳标记不存在,说明没有节点对这个存储池发送磁盘心跳,允许导入存储池。
[0069]若心跳标记存在,可能的原因是:1、对端节点正在给该存储池发送心跳;2、心跳标记由于节点掉电等原因残留在了磁盘上。为了加以区分,需等待η秒(m〈n〈10)后,再次读取心跳区域。若心跳标记仍然存在,则不允许本节点导入存储池。等待时间(η秒)大于磁盘心跳收发周期(m秒),是为了保证不错过可能正在发送的磁盘心跳。具体步骤如图4所示。
【主权项】
1.一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,包括以下步骤: .1)将共享存储池作为双控节点的存储资源,自动选择存储池的一块磁盘作为心跳盘; .2)发送端在心跳盘的心跳区域写入心跳标记,接收端读取心跳标记后将其清除; .3)当存储池的磁盘发生变动时,自动更新心跳盘以保证磁盘心跳连续收发。2.根据权利要求1所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,所述的存储池有且仅有一块心跳盘。3.根据权利要求1所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,所述的心跳区域为磁盘非数据区域,收发心跳的方式为直接读写磁盘非数据区域;主节点作为发送端写入心跳标记,备节点作为接收端清除心跳标记。4.根据权利要求1所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,所述的心跳标记为主备节点约定的特定字符串。5.根据权利要求1所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,所述的发送端发送心跳具体为: .1.1)主节点检查存储池状态,若可用,转步骤1.2 ;否则转步骤1.4 ; .1.2)读取心跳区域,若存在心跳标记,转步骤1.4 ;否则转步骤1.3 ; . 1.3)向心跳区域写入心跳标记,本次心跳发送成功,并转步骤1.4 ; . 1.4)等待m秒,转步骤1.1。.6.根据权利要求5所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,所述的主节点以异步方式感知存储池状态。7.根据权利要求5所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,线程定时查询存储池状态并实时更新状态标记,主节点在发送磁盘心跳前只需读取状态标记来判断存储池是否可用。8.根据权利要求1所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,所述的接收端接收心跳具体如下: .2.1)读取心跳区域,心跳标记若存在,转步骤2.2 ;否则转步骤2.3 ; .2.2)清除心跳标记,本次心跳接收成功,转步骤2.4 ; .2.3)心跳连续发送失败次数若超过上限,转步骤2.5 ;否则转步骤2.4。 . 2.4)等待m秒,转步骤2.1 ; .2.5)结束磁盘心跳的接收。9.根据权利要求1所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,节点导入存储池之前,对存储池进行脑裂预防检测。10.根据权利要求9所述的一种适用于双控高可用存储系统的磁盘心跳收发方法,其特征在于,所述的脑裂预防检测具体如下: .3.1)判断是否存在心跳标记,若为是,执行步骤3.2,若没有心跳标记残留,允许导入存储池; .3.2)若有心跳标记残留,等待η秒后再次检查心跳标记是否存在,若存在,不允许导入存储池,否则允许导入存储池。
【专利摘要】本发明涉及一种适用于双控高可用存储系统的磁盘心跳收发方法,包括以下步骤:1)将共享存储池作为双控节点的存储资源,自动选择存储池的一块磁盘作为心跳盘;2)发送端在心跳盘的心跳区域写入心跳标记,接收端读取心跳标记后将其清除;3)当存储池的磁盘发生变动时,自动更新心跳盘以保证磁盘心跳连续收发。与现有技术相比,本发明具有提高了双控高可用存储系统感知节点状态和资源状态的能力等优点。
【IPC分类】G06F3/06
【公开号】CN105045533
【申请号】CN201510401828
【发明人】黄思倜, 卢波, 李燕
【申请人】上海爱数软件有限公司
【公开日】2015年11月11日
【申请日】2015年7月9日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1