用于分布式文件系统中磁盘检测处理的方法和设备与流程

文档序号:11690980阅读:132来源:国知局
用于分布式文件系统中磁盘检测处理的方法和设备与流程

本申请涉及计算机领域,尤其涉及一种用于分布式文件系统中磁盘检测处理的技术。



背景技术:

在大规模分布式存储系统中,单台数据存储服务器会配有很多块硬盘,在某些硬盘硬件故障的情况下,会产生磁盘挂起输入输出(io)操作的现象,表现是执行输入输出操作的线程处于不可中断的睡眠状态(d状态),此时线程不响应任何操作会造成数据存储服务进程中的某些线程挂起在磁盘操作上,无法正常执行,这通常会造成整个数据存储服务进程失去响应,无法提供数据读写服务。一旦出现这种磁盘故障导致的d状态,除非机器重启才能解除d状态。

现有的分布式存储系统如hdfs,通常是不处理这种异常,完全靠运维人员下线磁盘重启机器恢复服务;由于数据存储节点配有多块数据盘,单块磁盘挂起就会导致整个数据存储节点无法提供服务,导致分布式存储系统中其他的数据存储节点上产生大量的复制数据的网络流量和磁盘读写操作。依靠运维的流程去发现并重启机器,具有较长的响应周期。

也有一些系统采用定制硬件的方法,来解除磁盘挂起的状态,使存储服务节点进程本身不需要额外处理磁盘挂起的问题。定制硬件要投入的昂贵的硬件研发成本,还有批量生产上的制约,和标准接口的兼容性问题,只有极少数具有实力的公司能够实施,不具有普遍适用性。



技术实现要素:

本申请的目的是提供一种用于分布式文件系统中磁盘检测处理的方法与设备,以解决检测磁盘挂起故障并能规避磁盘挂起带来的不良影响。

根据本申请的一个方面,提供了一种用于分布式文件系统中磁盘检测处理的方法,包括:

创建磁盘检测守护线程,并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程;

利用所述磁盘检测线程执行针对所述磁盘的输入输出操作,并记录所述输入输出操作的操作开始时间直至相应所述输入输出操作结束;

利用所述磁盘检测守护线程从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应所述输入输出操作的操作持续时间;

当所述操作持续时间超过第一时间阈值,则将相应所述输入输出操作所对应的磁盘的状态标记为挂起状态。

根据本申请的另一方面,还提供了一种用于分布式文件系统中磁盘检测处理的设备,包括:

创建装置,用于创建磁盘检测守护线程,并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程;

执行装置,用于利用所述磁盘检测线程执行针对所述磁盘的输入输出操作,并记录所述输入输出操作的操作开始时间直至相应所述输入输出操作结束;

比较装置,用于利用所述磁盘检测守护线程从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应所述输入输出操作的操作持续时间;

标记装置,用于当所述操作持续时间超过第一时间阈值,则将相应所述输入输出操作所对应的磁盘的状态标记为挂起状态。

与现有技术相比,根据本申请实施例的方法和设备,通过创建磁盘检测守护线程并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程;所述磁盘检测线程周期性执行一些试探性的输入输出操作来检测磁盘是否可以正常访问,在每次执行试探性输入输出操作之前,会记录一个操作开始时间,试探性输入输出操作结束之后再把操作开始时间清除;利用所述磁盘检测守护线程从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应所述输入输出操作的操作持续时间;当所述操作持续时间超过第一时间阈值,则将相应所述输入输出操作所 对应的磁盘的状态标记为挂起状态。进一步地,在数据存储节点过程中,为每一所述磁盘对应创建一用于调度输入输出操作请求的输入输出请求队列和一用于执行所述输入输出操作请求的输入输出处理线程。从而实现当某块磁盘出现输入输出操作挂起问题之后,能够检测到此问题,并且只有和故障磁盘相关的线程才会被挂起,其余线程不受影响,并在后续操作中避免向故障磁盘上发起新的输入输出操作,使得数据存储节点能够屏蔽这块故障磁盘,继续提供服务。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一个方面的一种用于分布式文件系统中磁盘检测处理的方法的流程示意图;

图2示出根据本申请一个方面的一种用于分布式文件系统中磁盘检测处理的一个优选实施例的示意图;

图3示出根据本申请又一个方面的一种用于分布式文件系统中磁盘检测处理的设备的结构示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

图1示出根据本申请一个方面的一种用于分布式文件系统中磁盘检测处理的方法的流程示意图。所述方法包括步骤s11、步骤s12、步骤s13和步骤s14。其中,在步骤s11中,创建磁盘检测守护线程,并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程;在步骤s12中,利用所述磁盘检测线程执行针对所述磁盘的输入输出操作,并记录所述输入输出操作的操作开始时间直至相应所述输入输出操作结束;在步骤s13中,利用所述磁盘检测守护线程从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应所述输入输出操作的操作持续 时间;在步骤s14中,当所述操作持续时间超过第一时间阈值,则将相应所述输入输出操作所对应的磁盘的状态标记为挂起状态。

具体地,在步骤s11中,创建磁盘检测守护线程,并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程。

在此,磁盘检测守护线程是所有磁盘共享的一个守护线程,负责检测磁盘检测线程是否正常工作,其中,磁盘检测线程可为每块磁盘一个后台扫描的线程,负责周期性地对该磁盘执行一些常规的io操作,如读写操作、创建文件、删除文件等,以检测磁盘是否可以正常访问,磁盘检测线程也可为所有磁盘共同的一个后台扫描的线程,负责周期性地对所有磁盘执行一些常规的io操作以检测所有磁盘是否可以正常访问。

具体地,在步骤s12中,利用所述磁盘检测线程执行针对所述磁盘的输入输出操作,并记录所述输入输出操作的操作开始时间直至相应所述输入输出操作结束。

在一优选实施例中,数据存储节点中的磁盘检测守护线程针对每一块磁盘创建一个磁盘检测线程,磁盘检测线程周期性执行一些试探性的输入输出(io)操作如读写操作、创建文件等以检测磁盘是否可以正常访问,在每次执行试探性io操作之前,会记录一个操作开始时间,磁盘检测守护线程如果发现磁盘检测线程的操作开始时间被设置,说明该磁盘检测线程有一个正在进行的试探性io操作。

具体地,在步骤s13中,利用所述磁盘检测守护线程从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应所述输入输出操作的操作持续时间。

接前例,磁盘检测守护线程发现磁盘检测线程的操作开始时间被设置,获取到操作开始时间,比较所得的操作开始时间和当前时间得到该试探性io操作持续时间。

具体地,在步骤s14中,当所述操作持续时间超过第一时间阈值,则将相应所述输入输出操作所对应的磁盘的状态标记为挂起状态。

继续接前例,比较操作开始时间和当前时间得到的io操作持续时间如果超过一定的阈值,如取一个远远超出一次正常io操作的时间,经验 值为10分钟,说明这次的试探性io操作被挂起,磁盘检测线程失去响应,磁盘检测守护线程一旦发现某一个磁盘检测线程失去响应,就可以判定该磁盘出现了挂起io操作的故障,把该磁盘的状态进行标记为挂起状态。

本申请一实施例所述方法用于分布式文件系统中磁盘检测处理,通过创建磁盘检测守护线程并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程,磁盘检测守护线程周期性地查询磁盘检测线程是否被挂起,能够发现某块磁盘出现挂起io操作问题,并且只有和故障磁盘相关的线程才被挂起,其余线程不受影响,并在后续操作中避免往故障磁盘上发起新的io操作,使得数据存储节点能够屏蔽这块故障磁盘,继续提供服务。

优选地,所述步骤s11包括:创建磁盘检测守护线程;利用所述磁盘检测守护线程创建多个磁盘检测线程,其中,每一所述磁盘检测线程对应一磁盘。

在一实施例中,数据存储节点中的磁盘检测守护线程针对每一块磁盘创建一个磁盘检测线程,接着,利用每一所述磁盘检测线程周期性执行针对其对应所述磁盘的输入输出操作。更优选地,所述利用每一所述磁盘检测线程周期性执行针对其对应所述磁盘的输入输出操作包括:利用所述磁盘检测线程执行输入输出操作,以访问对应所述磁盘。例如,磁盘检测线程每隔10秒执行一些如创建文件、删除文件、读操作或写操作等试探性的io操作来检测磁盘是否可以正常访问。磁盘检测守护线程每秒执行检测,查看磁盘检测线程的设置状态。

更优选地,所述步骤s13包括:利用所述磁盘检测守护线程周期性依次从多个所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取所述输入输出的操作持续时间。

在又一优选实施例中,scanbegintime表示试探性io操作开始时间,磁盘检测线程每隔10秒执行一个试探性io操作,某次试探性io操作开始前设置scanbegintime=18:50:00,假设这个io操作耗时不到1秒结束,然后磁盘检测线程设置scanbegintime=0;磁盘检测守护线程每秒查看一次scanbegintime,可能有两种情况,一是发现scanbegintime=0,则不需要执行其他操作;二是刚好发现scanbegintime=18:50:00,则和当前时间18:50:00 进行比较,发现时间差不到10分钟,仍然不需要执行其他操作。若磁盘检测线程每隔10秒执行一个试探性io操作,某次设置scanbegintime=18:50:10,该io操作被挂起,超过10分钟还没结束,磁盘检测守护线程每秒查看一次scanbegintime,在10分钟之内,发现scanbegintime=18:50:10,但是和当前时间进行比较,发现时间差不到10分钟,不需执行其他操作;在10分钟之后,发现scanbegintime=18:50:10和当前时间19:00:20比较,时间差已超过10分钟,则判定磁盘处于挂起状态,将该磁盘状态标记为挂起状态。

可选地,步骤s11包括:创建磁盘检测守护线程;利用所述磁盘检测守护线程创建与所有磁盘对应的一个磁盘检测线程。

在又一实施例中,创建磁盘检测守护线程并利用磁盘检测守护线程创建一磁盘检测线程,所有的磁盘共用该磁盘检测线程。

可选地,步骤s12包括:利用所述磁盘检测线程执行针对不同磁盘的输入输出操作,并记录每次所述输入输出操作所对应的磁盘的信息。

优选地,所述利用每一所述磁盘检测线程周期性执行与其对应所述磁盘的输入输出操作包括:利用所述磁盘检测线程执行输入输出操作,以访问对应所述磁盘。在此,利用磁盘检测线程执行一些试探性的如创建文件、删除文件、读写操作等输入输出操作来检测磁盘是否可以正常访问。同时,记录每次输入输出操作所对应的磁盘的信息,如当前检测的是哪块磁盘及所在位置等以便对出问题的磁盘进行标记。

优选地,在所述步骤s12中,记录所述输入输出操作的操作开始时间;当所述输入输出操作结束,在相应所述磁盘检测线程中清除相应所述操作开始时间。

在此,某次试探性io操作的操作开始时间scanbegintime在操作开始时设置为18:10:00,记录该时间,当io操作结束后,在执行该io操作对应的磁盘检测线程中清除该io操作的操作开始时间,即将一个表示操作开始时间的变量设置为0,如scanbegintime=0,清除操作开始时间则表示当前没有试探性io操作在执行。

优选地,所述方法还包括:为每一所述磁盘对应创建一用于调度输入输出操作请求的输入输出请求队列和一用于执行所述输入输出操作请求的输入 输出处理线程。

在此,所述输入输出(io)请求队列是指每块磁盘设置一个独立的队列,所有要访问这个磁盘的io请求都要先进入到这个队列,就是该磁盘的io请求队列。所述输入输出(io)处理线程是指每块磁盘设置若干处理io请求的线程,负责从这块磁盘对应的io请求队列中取出请求并执行。在数据存储节点进程中,为每个数据盘设置一个专属io请求队列和一组专属的io处理线程,所有对这块数据盘的io操作都要先进入到此io请求队列中,由该磁盘专属的io处理线程从队列中取出请求,执行操作,在此,每块数据盘为一个磁盘。如果某块数据盘产生了磁盘挂起操作的故障,在把该数据盘标记为故障之前,只有该数据盘专属的io处理线程不响应,该数据盘专属的io请求队列无法消耗,影响不会扩散到整个进程,其余数据盘的请求都能正常处理,在把挂起的磁盘的状态标记为挂起状态后,将不会再有新的请求进入队列。

可选地,所述方法还包括:利用所述输入输出请求队列记录每一进入的输入输出操作请求的出队时间;利用所述磁盘检测守护线程从所述输入输出请求队列中获取所述输入输出操作请求的出队时间,并比较所述出队时间和当前时间,以获取所述输入输出操作请求的已执行时间;当所述输入输出操作请求的已执行时间超出第二时间阈值,则将相应所述输入输出操作请求所对应的磁盘的状态标记为挂起状态。

在此,利用输入输出请求队列里请求的执行时间来判定磁盘产生了挂起操作的故障,根据io请求队列对应的io处理线程记录每一进入io操作请求的出队时间,然后执行输入输出操作并在此次输入输出操作结束后将出队时间清零,利用磁盘检测守护线程获取出队时间,比较出队时间和当前时间以得到该io操作请求的已执行时间。当所得的已执行时间超过一定的阈值时,说明这次的io操作被挂起,将该磁盘的状态进行标记为挂起状态。

图2示出根据本申请一个方面的一种用于分布式文件系统中磁盘检测处理的一个优选实施例的示意图。根据图2所示结合图1方法流程图将优选实施例进行描述,在步骤s11中,创建磁盘检测守护线程,并利用磁盘检测守护线程创建多个磁盘检测线程,其中,一个磁盘检测守护线程对应多个磁盘检测线程,如图2中的磁盘检测线程1、磁盘检测线程2……磁 盘检测线程n,一个磁盘检测线程对应一个磁盘,一个磁盘设置一个专属的io请求队列和一组io处理线程(图2中只给出io请求队列对应的其中一个io处理线程);在步骤s12中,利用磁盘检测线程周期性地执行针对所述磁盘的一些试探性io操作用来检测磁盘是否可以正常访问,在每次执行io操作之前记录所述io操作的操作开始时间直至相应所述io操作结束;在io操作结束后再把操作开始时间清除;在步骤s13中,磁盘检测守护线程周期性查询磁盘检测线程,如果发现磁盘检测线程的操作开始时间被设置,说明该磁盘的检测线程有一个正在进行的试探性io操作,从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应试探性io操作的操作持续时间;在步骤s14中,当获得的操作持续时间超过第一时间阈值,说明这次的试探性io操作被挂起,磁盘检测线程失去响应,磁盘检测守护线程一旦发现某一个磁盘检测线程失去响应,就可以判定该磁盘出现了挂起io操作的故障,则将相应所述试探性io操作所对应的磁盘的状态标记为挂起状态。

图3示出根据本申请又一个方面的一种用于分布式文件系统中磁盘检测处理的设备的结构示意图。所述设备包括创建装置11、执行装置12、比较装置13和标记装置14。其中,创建装置11创建磁盘检测守护线程,并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程;执行装置12利用所述磁盘检测线程执行针对所述磁盘的输入输出操作,并记录所述输入输出操作的操作开始时间直至相应所述输入输出操作结束;比较装置13利用所述磁盘检测守护线程从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应所述输入输出操作的操作持续时间;标记装置14当所述操作持续时间超过第一时间阈值,则将相应所述输入输出操作所对应的磁盘的状态标记为挂起状态。

在此,所述设备1包括但不限于用户设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备其包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、pda等,所述移动电子产品可以采用任意操作系统,如android操作系统、ios操作系统等。优选地,设备1还可以是运行于所述用户设备、或用户设备与网络设备、触 摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

具体地,创建装置11创建磁盘检测守护线程,并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程。

在此,磁盘检测守护线程是所有磁盘共享的一个守护线程,负责检测磁盘检测线程是否正常工作,其中,磁盘检测线程可为每块磁盘一个后台扫描的线程,负责周期性地对该磁盘执行一些常规的io操作,如读写操作、创建文件、删除文件等,以检测磁盘是否可以正常访问,磁盘检测线程也可为所有磁盘共同的一个后台扫描的线程,负责周期性地对所有磁盘执行一些常规的io操作以检测所有磁盘是否可以正常访问。

具体地,执行装置12利用所述磁盘检测线程执行针对所述磁盘的输入输出操作,并记录所述输入输出操作的操作开始时间直至相应所述输入输出操作结束。

在一优选实施例中,数据存储节点中的磁盘检测守护线程针对每一块磁盘创建一个磁盘检测线程,磁盘检测线程周期性执行一些试探性的输入输出(io)操作以检测磁盘是否可以正常访问,在每次执行试探性io操作之前,会记录一个操作开始时间,磁盘检测守护线程如果发现磁盘检测线程的操作开始时间被设置,说明该磁盘检测线程有一个正在进行的试探性io操作。

具体地,比较装置13利用所述磁盘检测守护线程从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应所述输入输出操作的操作持续时间。

接前例,磁盘检测守护线程发现磁盘检测线程的操作开始时间被设置,获取到操作开始时间,比较所得的操作开始时间和当前时间得到该试探性io操作持续时间。

具体地,所述标记装置14用于当所述操作持续时间超过第一时间阈值,则将相应所述输入输出操作所对应的磁盘的状态标记为挂起状态。

继续接前例,比较操作开始时间和当前时间得到的io操作持续时间 如果超过一定的阈值,如取一个远远超出一次正常io操作的时间,经验值为10分钟,说明这次的试探性io操作被挂起,磁盘检测线程失去响应,磁盘检测守护线程一旦发现某一个磁盘检测线程失去响应,就可以判定该磁盘出现了挂起io操作的故障,把该磁盘的状态进行标记为挂起状态。

本申请一实施例所述设备用于分布式文件系统中磁盘检测处理,通过创建磁盘检测守护线程并利用所述磁盘检测守护线程创建与磁盘对应的一个或多个磁盘检测线程,磁盘检测守护线程周期性地查询磁盘检测线程是否被挂起,能够发现某块磁盘出现挂起io操作问题,并且只有和故障磁盘相关的线程才被挂起,其余线程不受影响,并在后续操作中避免往故障磁盘上发起新的io操作,使得数据存储节点能够屏蔽这块故障磁盘,继续提供服务。

优选地,所述创建装置11用于:创建磁盘检测守护线程;利用所述磁盘检测守护线程创建多个磁盘检测线程,其中,每一所述磁盘检测线程对应一磁盘。

在一实施例中,数据存储节点中的磁盘检测守护线程针对每一块磁盘创建一个磁盘检测线程,接着,利用每一所述磁盘检测线程周期性执行针对其对应所述磁盘的输入输出操作。更优选地,所述利用每一所述磁盘检测线程周期性执行针对其对应所述磁盘的输入输出操作包括:利用所述磁盘检测线程执行输入输出操作,以访问对应所述磁盘。例如,磁盘检测线程每隔10秒执行一些如创建文件、删除文件、读操作或写操作等试探性的io操作来检测磁盘是否可以正常访问。磁盘检测守护线程每秒执行检测,查看磁盘检测线程的设置状态。

更优选地,所述执行装置13用于:利用所述磁盘检测守护线程周期性依次从多个所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取所述输入输出的操作持续时间。

在又一优选实施例中,scanbegintime表示试探性io操作开始时间,磁盘检测线程每隔10秒执行一个试探性io操作,某次试探性io操作开始前设置scanbegintime=18:50:00,假设这个io操作耗时不到1秒结束,然后磁盘检测线程设置scanbegintime=0;磁盘检测守护线程每秒查看一次scanbegintime,可能有两种情况,一是发现scanbegintime=0,则不需要做 什么;二是刚好发现scanbegintime=18:50:00,则和当前时间18:50:00进行比较,发现时间差不到10分钟,仍然不需要做什么。若磁盘检测线程每隔10秒执行一个试探性io操作,某次设置scanbegintime=18:50:10,该io操作被挂起,超过10分钟还没结束,磁盘检测守护线程每秒查看一次scanbegintime,在10分钟之内,发现scanbegintime=18:50:10,但是和当前时间进行比较,发现时间差不到10分钟,不需做什么;在10分钟之后,发现scanbegintime=18:50:10和当前时间19:00:20比较,时间差已超过10分钟,判定磁盘处于挂起状态,将该磁盘状态标记为挂起状态。

可选地,所述创建装置11还用于:创建磁盘检测守护线程;利用所述磁盘检测守护线程创建与所有磁盘对应的一个磁盘检测线程。

在又一实施例中,创建磁盘检测守护线程并利用磁盘检测守护线程创建一磁盘检测线程,所有的磁盘共用该磁盘检测线程。

可选地,所述执行装置12还用于:利用所述磁盘检测线程执行针对不同磁盘的输入输出操作,并记录每次所述输入输出操作所对应的磁盘的信息。

优选地,所述利用每一所述磁盘检测线程周期性执行与其对应所述磁盘的输入输出操作包括:利用所述磁盘检测线程执行输入输出操作,以访问对应所述磁盘。在此,利用磁盘检测线程执行一些试探性的如创建文件、删除文件、读写操作等输入输出操作来检测磁盘是否可以正常访问。同时,记录每次输入输出操作所对应的磁盘的信息,如当前检测的是哪块磁盘及所在位置等以便对出问题的磁盘进行标记。

优选地,所述执行装置12还包括记录单元(未示出)和清除单元(未示出),记录单元用于记录所述输入输出操作的操作开始时间;清除单元用于当所述输入输出操作结束,在相应所述磁盘检测线程中清除相应所述操作开始时间。

在此,某次试探性io操作的操作开始时间scanbegintime在操作开始时设置为18:10:00,记录该时间,当io操作结束后,在执行该io操作对应的磁盘检测线程中清除该io操作的操作开始时间,即将一个表示操作开始时间的变量设置为0,如scanbegintime=0,清除操作开始时间则表示当前没有试探性io操作在执行。

优选地,所述设备还包括请求处理装置(未示出),用于为每一所述磁盘对应创建一用于调度输入输出操作请求的输入输出请求队列和一用于执行所述输入输出操作请求的输入输出处理线程。

在此,所述输入输出(io)请求队列是指每块磁盘设置一个独立的队列,所有要访问这个磁盘的io请求都要先进入到这个队列,就是该磁盘的io请求队列。所述输入输出(io)处理线程是指每块磁盘设置若干处理io请求的线程,负责从这块磁盘对应的io请求队列中取出请求并执行。在数据存储节点进程中,为每个数据盘设置一个专属io请求队列和一组专属的io处理线程,所有对这块数据盘的io操作都要先进入到此io请求队列中,由该磁盘专属的io处理线程从队列中取出请求,执行操作,在此,每块数据盘为一个磁盘。如果某块数据盘产生了磁盘挂起操作的故障,在把该数据盘标记为故障之前,只有该数据盘专属的io处理线程不响应,该数据盘专属的io请求队列无法消耗,影响不会扩散到整个进程,其余数据盘的请求都能正常处理,在把挂起的磁盘的状态标记为挂起状态后,将不会再有新的请求进入队列。

可选地,所述设备还包括:出队时间记录装置(未示出)、获取持续时间装置(未示出)和处理装置(未示出),其中,所述出队时间记录装置用于利用所述输入输出请求队列记录每一进入的输入输出操作请求的出队时间;获取持续时间装置用于利用所述磁盘检测守护线程从所述输入输出请求队列中获取所述输入输出操作请求的出队时间,并比较所述出队时间和当前时间,以获取所述输入输出操作请求的已执行时间;处理装置用于当所述输入输出操作请求的已执行时间超出第二时间阈值,则将相应所述输入输出操作请求所对应的磁盘的状态标记为挂起状态。

在此,利用输入输出请求队列里请求的执行时间来判定磁盘产生了挂起操作的故障,根据io请求队列对应的io处理线程记录每一进入io操作请求的出队时间,然后执行输入输出操作并在此次输入输出操作结束后将出队时间清零,利用磁盘检测守护线程获取出队时间,比较出队时间和当前时间以得到该io操作请求的已执行时间。当所得的已执行时间超过一定的阈值时,说明这次的io操作被挂起,将该磁盘的状态进行标记为挂起状态。

图2示出根据本申请一个方面的一种用于分布式文件系统中磁盘检测 处理的一个优选实施例的示意图。根据图2所示结合图3设备结构图将优选实施例进行描述,创建装置11创建磁盘检测守护线程,并利用磁盘检测守护线程创建多个磁盘检测线程,其中,一个磁盘检测守护线程对应多个磁盘检测线程,如图2中的磁盘检测线程1、磁盘检测线程2……磁盘检测线程n,一个磁盘检测线程对应一个磁盘,一个磁盘设置一个专属的io请求队列和一组io处理线程(图2中只给出io请求队列对应的其中一个io处理线程);执行装置12利用磁盘检测线程周期性地执行针对所述磁盘的一些试探性io操作用来检测磁盘是否可以正常访问,在每次执行io操作之前记录所述io操作的操作开始时间直至相应所述io操作结束;在io操作结束后再把操作开始时间清除;比较装置13用于磁盘检测守护线程周期性查询磁盘检测线程,如果发现磁盘检测线程的操作开始时间被设置,说明该磁盘的检测线程有一个正在进行的试探性io操作,从所述磁盘检测线程获取所述操作开始时间,并比较所述操作开始时间与当前时间以获取相应试探性io操作的操作持续时间;标记装置14用于当获得的操作持续时间超过第一时间阈值,说明这次的试探性io操作被挂起,磁盘检测线程失去响应,磁盘检测守护线程一旦发现某一个磁盘检测线程失去响应,就可以判定该磁盘出现了挂起io操作的故障,则将相应所述试探性io操作所对应的磁盘的状态标记为挂起状态。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承 载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

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