基于HDFS的节点失效的快速检测与恢复方法及系统与流程

文档序号:12477694阅读:1870来源:国知局
基于HDFS的节点失效的快速检测与恢复方法及系统与流程

本发明涉及存储集群的技术领域,特别是涉及一种基于HDFS的节点失效的快速检测与恢复方法及系统。



背景技术:

随着整个社会的信息化程度不断提高,社会生活逐渐与计算机系统密不可分。目前,计算机系统已全面进入“云计算”、“大数据”时代,由大规模服务器集群响应海量请求和处理海量数据已经成为必然趋势。将相互独立的、分散的计算机通过网络互联,使它们成为一个集群,宏观上以单一系统的模式对其进行管理。对用户而言,集群像是一个独立的服务器。

然而,仅仅具有高性能计算能力的集群系统还远远不能满足这种大规模应用的需要,必须还能够提供持久高效稳定的服务,即提供一定的可用性。所谓计算机系统的可用性,一般定义为计算机系统正常工作时间与计算机系统总运行时间之比。对于某些执行关键使命的计算机系统,要求系统能够长时间稳定运行,即具备365x24小时不停顿运行的能力。对于这类系统,暂时的宕机都会导致数据的丢失继而引发灾难性的后果。

分布式系统特别是集群的容错机制现已成为当今国际学术界研究的热点,吸引了众多的研究人员。众多研究机构和开源组织在系统容错和检查点技术方面做了大量的工作。典型的系统包括Linux-HA(High Available,高可用)的Heartbeat、openssl、Amoeba等。

Linux-HA开源项目提供的Heartbeat软件是基于Linux平台的高可用软件。该项目于1999年开始启动,现已发展到2.0版本,并随大多数Linux版本一起发行,应用广泛。Heartbeat是运行在操作系统之上的用户级软件,可以在多种类Unix平台上运行,具有较好的可移植性,可以在毫秒级发现节点失效。Heartbeat具有易用性、安全性、简单性和低成本等优点,支持串口通讯,即节点间可通过串口传递心跳消息。Heartbeat通过冗余来消除单点故障。当发生节点失效时,自动进行故障恢复并由备份系统接管工作。最初的Heartbeat软件仅支持两个节点,即双机热备份的工作模式。即在主机工作时,备份机通过心跳消息来监控主机的工作状态。一旦发现主机失效,立即接管主机的工作,从而实现主机故障对用户透明。

目前集群的文件系统常用GFS(Google File System,Google文件系统),其衍生的HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)由于易于布置在常用设备上而广受欢迎。在HDFS中保障数据安全所采用的机制主要包括冗余备份、心跳检测以及安全模型等。其中,心跳检测是失效检测中最常采用的技术之一,通过周期性的检查各个节点的工作状态,来便于系统对各个节点进行检测与管理。然而,现有的HDFS检测和恢复机制依然不能满足系统安全的需求。

容灾系统只有拥有快速而准确的失效检测技术,才能在正常时期避免网络信息延迟事件或网络丢包事件带来的干扰,并且在灾难发生后最短的时间内检测到失效,提高系统的效率。因此,如何快速检测和恢复失效节点,提高集群系统的可用性,尽最大可能避免因节点失效而导致的严重后果,成为当前集群系统研究的热点问题之一。



技术实现要素:

鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于HDFS的节点失效的快速检测与恢复方法及系统,在HDFS原有检测机制上维护一个危险数据节点队列,并对该危险数据节点队列中各数据节点的数据块进行比对以找出相同数据块,并将相同数据块提前加入待恢复队列,优先进行相同数据块的恢复,从而在保证各数据节点的数据块可用,基本不增加网络带宽的前提下,提前恢复了危险数据块,降低了系统风险。

为实现上述目的及其他相关目的,本发明提供一种基于HDFS的节点失效的快速检测与恢复方法,包括以下步骤:设定危险节点时间间隔,若在危险节点时间间隔未检测到数据节点的心跳信息,则判断该数据节点为危险节点,将其加入危险数据节点队列;所述危险节点时间间隔须小于判断数据节点宕机所需时间;在危险数据节点队列中,查找各数据节点中的相同数据块;根据相同数据块的出现次数设置恢复优先级,并根据恢复优先级将相同数据块加入待恢复队列,优先进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复方法,其中:若数据节点在加入危险数据节点队列后,被判断处于宕机状态,则将所述数据节点从危险数据节点列表中移除,并加入到待恢复队列依次进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复方法,其中:在待恢复队列中,对于不同优先级的数据块,根据恢复优先级先后对不同的数据块进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复方法,其中:在待恢复队列中,对于相同恢复优先级的不同数据块,按照加入恢复队列的先后依次进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复方法,其中:对于相同数据块,存活副本数越多,优先级越低;存活副本数越少,优先级越高;所述存活副本数等于所有副本数减去宕机副本数和相同数据块的出现次数。

同时,本发明还提供一种基于HDFS的节点失效的快速检测与恢复系统,包括检测判断模块、查找模块和恢复模块;

所述检测判断模块用于设定危险节点时间间隔,并在危险节点时间间隔未检测到数据节点的心跳信息时,判断该数据节点为危险节点,将其加入危险数据节点队列;所述危险节点时间间隔须小于判断数据节点宕机所需时间;

所述查找模块用于在危险数据节点队列中,查找各数据节点中的相同数据块;

所述恢复模块用于根据相同数据块的出现次数设置恢复优先级,并根据恢复优先级将相同数据块加入待恢复队列,优先进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复系统,其中:所述检测判断模块中,若数据节点在加入危险数据节点队列后,被判断处于宕机状态,则将所述数据节点从危险数据节点列表中移除,并加入到待恢复队列依次进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复系统,其中:在待恢复队列中,对于不同优先级的数据块,根据恢复优先级先后对不同的数据块进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复系统,其中:在待恢复队列中,对于相同恢复优先级的不同数据块,按照加入恢复队列的先后依次进行恢复。

根据上述的基于HDFS的节点失效的快速检测与恢复系统,其中:所述恢复模块中,对于相同数据块,存活副本数越多,优先级越低;存活副本数越少,优先级越高;所述存活副本数等于所有副本数减去宕机副本数和相同数据块的出现次数。

如上所述,本发明的基于HDFS的节点失效的快速检测与恢复方法及系统,具有以下有益效果:

(1)在HDFS原有检测机制上维护一个危险数据节点队列,并对该危险数据节点队列中各数据节点的数据块进行比对以找出相同数据块,并将相同数据块提前加入待恢复队列,优先进行相同数据块的恢复;

(2)保证各数据节点的数据块可用,基本不增加网络带宽;

(3)提前恢复了危险数据块,降低了系统风险。

附图说明

图1显示为现有技术中不同数据节点中相同数据块宕机检测恢复示意图;

图2显示为本发明的基于HDFS的节点失效的快速检测与恢复方法的流程图;

图3显示为本发明中不同数据节点中相同数据块宕机检测恢复示意图;

图4显示为本发明的基于HDFS的节点失效的快速检测与恢复系统的结构示意图。

元件标号说明

1 检测判断模块

2 查找模块

3 恢复模块

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

HDFS中包含两种节点,分别以管理者-工作者的模式运行,即一个名字节点(管理者)和多个数据节点(工作者)。名字节点管理文件系统的命名空间,维护着这个文件系统树及这个树内所有的文件和索引目录,也记录着每个文件的每个块所在的数据节点。数据节点是文件系统的工作者,存储并提供定位块的服务,并且定时的向名字节点发送它们存储的块的列表。

在HDFS中,采用主从形式管理名字节点和数据节点。其中数据节点采用三备份策略,当其中一份对应节点宕机的备份失效后可以从其他节点快速恢复。数据节点定期向名字节点发送心跳信息,名字节点通过心跳判断数据节点状态。名字节点对心跳信息进行定期检查,如果名字节点在2次检查间隔和10次心跳间隔中未收到数据节点的心跳信息,则判定该数据节点宕机。若连续两次判断该数据节点宕机,则从名字节点中移除该数据节点信息,然后调用恢复机制对其进行恢复。其中,两次判断节点是否宕机是考虑到故障处理需要对heartbeats和datanodeMap等同步操作,心跳处理函数就不能对他们更新,容易在系统超负载、机架故障造成大量数据节点故障时误判。

具体地,判断数据节点宕机所需时间的计算公式为:

timeout=2*heartbeat.recheck.interval+10*dfs.heartbeat.interval

其中,heartbeat.recheck.interval表示心跳检查间隔,dfs.heartbeat.interval表示心跳间隔。通常默认heartbeat.recheck.interval为5分钟,默认dfs.heartbeat.interval为3秒。因此,名字节点如果在10分钟+30秒后,仍然没有收到数据节点的心跳,就认为该数据节点已经宕机,并标记为宕机(dead)。

图1所示为现有技术中不同数据节点中相同数据块宕机检测恢复示意图,其显示了数据节点宕机可能造成的数据块危险系数提高的情况。其中,数据节点B和数据节点A有相同的数据块b1。数据节点A和B向名字节点持续发送心跳信息,名字节点检测心跳信息。图中纵向虚线表示检测时间点,上次检测时间是5min时刻,显示数据节点A和B都处于运行正常状态。在检测后某时刻数据节点B失效,则其中数据块b1也失效。在接下来的一次检测也就是10min时刻,检测到数据节点B失效。之后要再做一次确认,也就是在15min时刻(忽略30s的心跳发送时间间隔)再次确认,发现数据节点B的确失效,故在15min时将数据节点B加入待恢复队列,也就是将数据块b1加入待恢复队列。由于待恢复队列中可能还有之前未恢复的数据块,故并不是立刻恢复该数据块。再过一段时间,即在图中t2时刻数据节点B中数据块b1被恢复,其副本数满足系统需求。

如果在数据节点B出现问题后与其有共同数据块b1的数据节点A在t1时刻也发生故障,在10min时刻未检测到其心跳,则在15min时刻要再确认一次。但是,在此次确认中因为先发现了第二次确认的已失效的数据节点B,那么对应的数据节点A的失效就会被忽视,并在之后的20min时刻才会被发现。此时,再将数据节点A加入到待恢复队列,过段时间其中块b1恢复后其副本数满足系统需求。因此,在t1到t2这段时间里对于块b1来说,其数据节点危险系数增大,因为可用副本数为1。而系统发现这种情况并恢复第一个数据块的时刻也在10分30秒之后。由上可知,现有技术中的数据节点的检测恢复机制中,故障处理前需要再次确认故障状态,再进行故障检测和故障恢复。由于在故障检测时间点和故障恢复之间存在较长时间差,忽视这段时间内故障节点的检测,拥有相同数据块的数据节点可能出问题,导致该数据块的备份数降为1或0,存在数据丢失风险。

本发明的基于HDFS的节点失效的快速检测与恢复方法在判断数据节点宕机状态前,加入一种危险(danger)状态判断。若在T时间(T<10min)未检测到数据节点的心跳信息,则认为该数据节点处于危险状态,将该数据节点加入到危险数据节点队列中,并对危险数据节点队列中各数据节点的数据块进行比对以找出相同数据块,该相同数据块即为危险数据块。系统为相同数据块设置恢复优先级,将该相同数据块提前加入到待恢复队列进行恢复,从而将宕机数据节点中的危险数据块提前进行恢复,降低了危险数据块的风险。

参照图2,本发明的基于HDFS的节点失效的快速检测与恢复方法包括以下步骤:

步骤S1、设定危险节点时间间隔,若在危险节点时间间隔未检测到数据节点的心跳信息,则判断该数据节点为危险节点,将其加入危险数据节点队列;其中,危险节点时间间隔须小于判断数据节点宕机所需时间。

其中,判断数据节点宕机所需时间通常为10min+30s。优选地,危险节点时间间隔设置为5min。

具体地,遍历心跳信息表中每条心跳信息。心跳信息表用于记录每次心跳时各个数据节点的心跳信息。因此,遍历心跳信息表,也就是检测对应的每个数据节点,判断其所处的状态。如果在危险节点时间间隔,未检测到数据节点的心跳信息,则判定该数据节点处于危险状态。如果数据节点处于非危险状态却被加入了危险数据节点队列,则需要将其从危险数据节点队列中移除。这是因为部分数据节点可能是短期内由于网络状况与名字节点失去连接,之后又恢复连接。因此,将此类数据节点从危险数据节点列表中移除,能够减少不必要的系统负担。

若数据节点在加入危险数据节点队列后,被判断处于宕机状态,也就是说在10min30s后被判断为处于宕机状态,则将其从危险数据节点列表中移除,并根据现有机制,将该数据节点加入到待恢复队列依次进行恢复。

步骤S2、在危险数据节点队列中,查找各数据节点中的相同数据块。

具体地,在危险数据节点队列中的数据节点中,出现两次及以上的数据块即为所要查找的相同数据块。

步骤S3、根据相同数据块的出现次数设置恢复优先级,并根据恢复优先级将相同数据块加入待恢复队列,优先进行恢复。

其中,相同数据块出现的次数越多,表明其存活的副本数越少,则恢复优先级越高;相同数据块出现的次数越少,表明其存活的副本数越多,则恢复优先级越低。

设定相同数据块的出现次数为该数据块的危险系数。其中,危险系数越大,表明该数据块的存活副本数越少,危险程度越高。反之,危险系数越小,表明该数据块的存活副本数越多,危险程度越低。危险系数通常取值为0、1和2。

具体地,在数据块block的定义中加入danger标记,danger=0,1,2。通过定义countDangerNodes(Block b)函数判断数据块b在危险节点队列中出现的次数。通过blocksMaps查询存储该数据块副本的其他数据节点信息,因此查询相同的数据块也就转化为查询存储该数据块副本的其他数据节点在危险数据节点队列中出现的次数。在危险数据节点队列中每出现一个存储该数据块副本的数据节点,则该数据块的危险系数danger加1。遍历完危险数据节点队列后,即可返回得到该数据块block对应的危险系数。当引入危险系数danger后,存活副本数为原存活副本数减去危险系数后的值。采用现有机制中恢复数据块时要检测该数据块的存活副本数countNodes,只需将存活副本数修改为原存活副本数减去危险系数后的值。这样不对现有机制做过多修改,现有机制也可以正常运行。其中,原存活副本数等于所有副本数减去处于宕机状态的副本数。

具体地,对于相同数据块,存活副本数越多,优先级越低;存活副本数越少,优先级越高;所述存活副本数等于所有副本数减去宕机副本数和相同数据块的出现次数。即存活副本数等于所有副本数减去宕机副本数和危险系数。

在待恢复队列中,根据恢复优先级先后对不同的数据块进行恢复;对于相同恢复优先级的不同数据块,则按照加入恢复队列的先后依次进行恢复。

图3所示为本发明中不同数据节点中相同数据块宕机检测恢复示意图。由图可知,数据节点A、B有着相同的数据块b1。在第二次确认数据节点失效之前,也就是t1时刻检测该数据节点是否属于危险节点。其中,判断该数据节点上次检测时间与此次检测的时间间隔是否超过设置的危险节点时间间隔,如果是,则将该数据节点加入危险数据节点队列。若设置的危险检测点是t1时刻,即t1时刻与10min时刻间的时间间隔等于危险节点时间间隔,那么数据节点A和B将在此刻加入到危险数据节点队列中;同时,遍历危险数据节点队列中的数据块,将相同的数据块根据出现次数设置恢复优先级,并根据恢复优先级优先进行恢复。也就是说,此处的数据块b1被加入待恢复队列,其加入队列的时刻是t1时刻,过一段时间后被恢复,这时b1副本数符合系统要求。

下面结合具体实施例来进一步说明本发明的基于HDFS的节点失效的快速检测与恢复方法。

1、修改代码重新编译

对HDFS对应代码进行修改,并将做过修改的代码文件重新编译,导出相应的jar文件,替换原有文件。在数据节点和名字节点上用的的源码都是修改编译后的源码。

2、环境部署:

以四台计算机为例搭建,其中包括

一个master节点(名字节点),为master 192.168.0.136

三个slave节点(数据节点),分别为slave 192.168.0.137、slave 192.168.0.138和slave192.168.0.139。

首先,修改master节点上的配置文件,需要修改的文件有:

/etc/hostname,/etc/hosts,/home/hadoop/hadoop/conf/masters,/home/hadoop/hadoop/conf/slaves,/home/hadoop/hadoop/conf/core-site.xml,/home/hadoop/hadoop/conf/hdfs-site.xml,/home/hadoop/hadoop/conf/mapred-site.xml

接着,修改每台计算机的/etc/hostname,以便于进行网络配置。以192.168.0.136为例,修改/etc/hostname,将原来的localhost改成n136。其他机器也如此。

然后,修改master(即n136)上的/etc/hosts,将里面所有的内容都注释掉,添加以下信息:

该步骤是将每个节点的ip和计算机名联系起来,因为在hadoop中,防止出现找不到计算机名而报错的情况。

接着,修改master上的/home/hadoop/hadoop/conf/masters文件,把里面原来的localhost修改成n136,将计算机名与hadoop配置文件中的节点角色联系起来。

再修改master上的/home/hadoop/hadoop/conf/slaves文件,把里面的localhost清除,添加以下信息:d137 d138 d139

接着,修改master节点上的/home/hadoop/hadoop/conf/core-site.xml文件,只需修改fs.default.name项为:

这里指明文件系统的入口是master(即n136)的9000号端口。

接着,修改master上的/home/hadoop/hadoop/conf/hdfs-site.xml文件,把dfs.replication改成默认的3(采用默认值3)。

最后,修改master上的/home/hadoop/hadoop/conf/mapred-site.xml文件,修改mapred.job.tracker:

这里将MapReduce中的jobtracker放在了master上,其实也可以放在其他节点上,这根据具体情况而定,与对HDFS修改做测试无关。

3、测试

在master为1、slaver为3的集群中,通过客户端向集群数据节点写入文件,使其中两个数据节点宕机,等待系统信息输出。在检测到数据节点失效及进行数据节点恢复时系统会输出相应时间信息,过段时间后查看加入待恢复队列时系统打印出的数据节点开始恢复的时间信息。根据返回时间信息调整危险节点时间间隔(heartbeatDangerInterval)参数,使其系统在固定数据量范围内达到性能最优。

参照图4,本发明的基于HDFS的节点失效的快速检测与恢复系统包括检测判断模块1、查找模块2和恢复模块3。

检测判断模块1用于设定危险节点时间间隔,并在危险节点时间间隔未检测到数据节点的心跳信息时,判断该数据节点为危险节点,将其加入危险数据节点队列;其中,危险节点时间间隔须小于判断数据节点宕机所需时间。

其中,判断数据节点宕机所需时间通常为10min+30s。优选地,危险节点时间间隔设置为5min。

具体地,遍历心跳信息表中每条心跳信息。心跳信息表用于记录每次心跳时各个数据节点的心跳信息。因此,遍历心跳信息表,也就是检测对应的每个数据节点,判断其所处的状态。如果在危险节点时间间隔,未检测到数据节点的心跳信息,则判定该数据节点处于危险状态。如果数据节点处于非危险状态却被加入了危险数据节点队列,则需要将其从危险数据节点队列中移除。这是因为部分数据节点可能是短期内由于网络状况与名字节点失去连接,之后又恢复连接。因此,将此类数据节点从危险数据节点列表中移除,能够减少不必要的系统负担。

若数据节点在加入危险数据节点队列后,被判断处于宕机状态,也就是说在10min30s后被判断为处于宕机状态,则将其从危险数据节点列表中移除,并根据现有机制,将该数据节点加入到待恢复队列依次进行恢复。

查找模块2与检测判断模块1相连,用于在危险数据节点队列中,查找各数据节点中的相同数据块。

具体地,在危险数据节点队列中的数据节点中,出现两次及以上的数据块即为所要查找的相同数据块。

恢复模块3与查找模块2相连,用于根据相同数据块的出现次数设置恢复优先级,并根据恢复优先级将相同数据块加入待恢复队列,优先进行恢复。

其中,相同数据块出现的次数越多,表明其存活的副本数越少,则恢复优先级越高;相同数据块出现的次数越少,表明其存活的副本数越多,则恢复优先级越低。

设定相同数据块的出现次数为该数据块的危险系数。其中,危险系数越大,表明该数据块的存活副本数越少,危险程度越高。反之,危险系数越小,表明该数据块的存活副本数越多,危险程度越低。危险系数通常取值为0、1和2。

具体地,在数据块block的定义中加入danger标记,danger=0,1,2。通过定义countDangerNodes(Block b)函数判断数据块b在危险节点队列中出现的次数。通过blocksMaps查询存储该数据块副本的其他数据节点信息,因此查询相同的数据块也就转化为查询存储该数据块副本的其他数据节点在危险数据节点队列中出现的次数。在危险数据节点队列中每出现一个存储该数据块副本的数据节点,则该数据块的危险系数danger加1。遍历完危险数据节点队列后,即可返回得到该数据块block对应的危险系数。当引入危险系数danger后,存活副本数为原存活副本数减去危险系数后的值。采用现有机制中恢复数据块时要检测该数据块的存活副本数countNodes,只需将存活副本数修改为原存活副本数减去危险系数后的值。这样不对现有机制做过多修改,现有机制也可以正常运行。其中,原存活副本数等于所有副本数减去处于宕机状态的副本数。

具体地,对于相同数据块,存活副本数越多,优先级越低;存活副本数越少,优先级越高;所述存活副本数等于所有副本数减去宕机副本数和相同数据块的出现次数。即存活副本数等于所有副本数减去宕机副本数和危险系数。

在待恢复队列中,根据恢复优先级先后对不同的数据块进行恢复;对于相同恢复优先级的不同数据块,则按照加入恢复队列的先后依次进行恢复。

综上所述,本发明的基于HDFS的节点失效的快速检测与恢复方法及系统在HDFS原有检测机制上维护一个危险数据节点队列,并对该危险数据节点队列中各数据节点的数据块进行比对以找出相同数据块,并将相同数据块提前加入待恢复队列,优先进行相同数据块的恢复;保证各数据节点的数据块可用,基本不增加网络带宽;提前恢复了危险数据块,降低了系统风险。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1