一种基于ICFS系统的OSD故障定位方法及系统与流程

文档序号:15399545发布日期:2018-09-11 17:09阅读:1670来源:国知局

本发明涉及分布式系统技术领域,特别是涉及一种基于icfs系统的osd故障定位方法及系统。



背景技术:

目前对于海量存储产品,用户可以自行定义数据的冗余规则(例如副本或者纠删),并通过crush算法指定数据的物理存储位置,完成故障域的分离。但是在存储系统例如icfs(inspurclusterfilesystem,分布式文件系统)系统中,一个存储节点支持12到54个磁盘不等,使得其osd的故障率也大大高于其他系统。根据icfs系统提供的数据冗余规则,允许存储节点出现磁盘故障,但必须保证集群可以正常使用且数据不丢失,但是目前icfs系统中osd故障处理都需要开发人员进行现场定位,定位时间长,降低了集群的性能。

因此,如何提供一种解决上述技术问题的方案是本领域技术人员目前需要解决的问题。



技术实现要素:

本发明的目的是提供一种基于icfs系统的osd故障定位方法及系统,为可能发生的故障提供了定位方向,缩短了故障定位时间,提高了故障处理效率,提高了集群的性能。

为解决上述技术问题,本发明提供了一种基于icfs系统的osd故障定位方法,包括:

预先对icfs系统中的osd的故障进行分类及对所述故障对应的故障判定方式进行分类;

获取所述icfs系统的故障判定信息,所述故障判定信息包括所述icfs系统中各个osd的osd信息和/或所述icfs系统的数据冗余规则;

根据所述故障判定信息并结合预先设置好的故障判定方式及故障的分类判定是否存在osd发生故障。

优选地,所述osd的故障分类包括osddown和/或osd的容量达到极限范围和/或osd震荡和/或osd慢盘。

优选地,当所述osd的故障分类包括osddown时,所述osddown包括故障域内的部分osddown、不同故障域内的共同持有一些对象的数据的osd同时down和osddown掉且不在osdtree中。

优选地,所述osddown对应的故障判定方式为:

输入icfs-s指令后,所述icfs系统中的各个osd的osd信息中,存在osd的状态信息为down;

所述osd的容量达到极限范围对应的故障判定方式为:

输入icfs-s指令后,存在nearfull告警信息;

所述osd震荡对应的故障判定方式为:

所述icfs系统中,存在osd的状态在第一预设时间内多次交替出现up和down;

所述osd慢盘对应的故障判定方式为:

所述icfs系统的状态出现blocked。

优选地,该方法还包括:

预先针对所述osd的不同类别的故障制定故障解决策略;

在判定所述icfs系统存在故障后,该方法还包括:

根据判定的所述icfs系统的故障确定故障解决策略;

对所述icfs系统实施确定的故障解决策略,以解决所述icfs系统的故障。

优选地,当所述osd的故障分类包括osddown时,对于故障域内的部分osddown,所述对所述icfs系统实施确定的故障解决策略的过程具体为:

通过monosddownoutinterval参数将时间间隔修改为第二预设时间,所述时间间隔为把down掉的osd标记为out的时间间隔,以便在把故障osd标记为out前修复故障。

优选地,当所述osd的故障分类包括osd的容量达到极限范围时,所述对所述icfs系统实施确定的故障解决策略的过程具体为:

对所述icfs系统进行扩容或者调整osd权重。

优选地,当所述osd的故障分类包括osd震荡时,所述对所述icfs系统实施确定的故障解决策略的过程具体为:

修改震荡参数osd操作线程池的超时告警时间osdopthreadtimeout、osd操作线程池的超时自杀时间osdopthreadsuicidetimeout、filestore操作线程池的超时自杀时间filestoreopsuicidetimeout、osd之间互ping的时间间隔osdheartbeatinterval及osd心跳检测的超时时间osdheartbeatgrace。

优选地,在根据所述故障判定信息并结合预先设置好的故障判定方式及故障的分类判定所述icfs系统不存在故障后,该方法还包括:

获取系统日志;

根据所述系统日志对所述icfs系统进行故障分析。

为解决上述技术问题,本发明还提供了一种基于icfs系统的osd故障定位系统,包括:

分类单元,用于预先对icfs系统中的osd的故障进行分类及对所述故障对应的故障判定方式进行分类;

获取单元,用于获取所述icfs系统的故障判定信息,所述故障判定信息包括所述icfs系统中各个osd的osd信息和/或所述icfs系统的数据冗余规则;

故障定位单元,用于根据所述故障判定信息并结合预先设置好的故障判定方式及故障的分类判定是否存在osd发生故障。

本发明提供了一种基于icfs系统的osd故障定位方法及系统,包括预先对icfs系统中的osd的故障进行分类及对故障对应的故障判定方式进行分类;获取icfs系统的故障判定信息,故障判定信息包括icfs系统中各个osd的osd信息和/或icfs系统的数据冗余规则;根据故障判定信息并结合预先设置好的故障判定方式及故障的分类判定是否存在osd发生故障。可见,本申请预先对osd的故障和故障判定方式进行分类,并作为后续osd故障定位的判定依据,以便后续结合icfs系统的故障判定信息来判定osd是否存在故障,为可能发生的故障提供了定位方向,缩短了故障定位时间,提高了故障处理效率,提高了集群的性能。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种基于icfs系统的osd故障定位方法的过程流程图;

图2为本发明提供的一种基于icfs系统的osd故障定位系统的结构示意图。

具体实施方式

本发明的核心是提供一种基于icfs系统的osd故障定位方法及系统,为可能发生的故障提供了定位方向,缩短了故障定位时间,提高了故障处理效率,提高了集群的性能。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参照图1,图1为本发明提供的一种基于icfs系统的osd故障定位方法的过程流程图,该方法包括:

步骤11:预先对icfs系统中的osd的故障进行分类及对故障对应的故障判定方式进行分类;

osd进程是icfs系统进行大量数据处理的关键进程,所以,osd的不正常必然会直接影响icfs系统的可用性。为了后续能够快速定位问题,考虑到osd在不同故障因素下产生的故障也是不同的,本申请首先对icfs系统中的osd的故障进行分类,同时,对osd的各类故障的判定方式也进行分类。

需要说明的是,不同的故障其对应的故障判定方式通常是不同的,同一故障对应的故障判定方式也可以是不同的,本申请对于将osd的故障分多少类及故障对应的故障判定方式为哪个故障判定方式不作特别的限定。

步骤12:获取icfs系统的故障判定信息,故障判定信息包括icfs系统中各个osd的osd信息和/或icfs系统的数据冗余规则;

可以理解的是,这里的osd信息包括判定预先设定的osd的故障时所需的信息,也即故障判定方式中所需的信息,因此,具体获取哪些osd信息本申请在此不做特别的限定,根据预设的osd的故障进行确定。

另外,在一些osd故障判定(例如不同故障域内的共同持有一些对象的数据的osd同时down)中还会用到icfs系统的数据冗余规则,需要根据icfs系统的数据冗余规则判定相关联的osd中最多有几个osd发生故障。

步骤13:根据故障判定信息并结合预先设置好的故障判定方式及故障的分类判定是否存在osd发生故障。

因为已经预先设置好osd的故障分类,在获取到osd的当前的故障判定信息后,将osd的当前的故障判定信息按照预先设置好的故障对应的故障判定方式来进行故障判定,如果符合故障判定方式,则说明此时存在osd发生故障,且该故障为符合的故障判定方式对应的故障。

可见,本申请预先对osd的故障和故障判定方式进行分类,并作为后续osd故障定位的判定依据,以便后续结合icfs系统的故障判定信息来判定osd是否存在故障,为可能发生的故障提供了定位方向,缩短了故障定位时间,提高了故障处理效率,提高了集群的性能。

在上述实施例的基础上:

作为一种优选地实施例,osd的故障分类包括osddown和/或osd的容量达到极限范围和/或osd震荡和/或osd慢盘。

具体地,考虑到在实际应用中,由于设备断电、硬盘故障等故障源的存在,osddown掉是不可以避免的,同时也是osd的常见故障。

另外,由于crush算法无法保证数据的绝对平均分布,数据写入集群时,有可能会出现某些osd的数据接近容量极限的情况,因此,osd的容量达到极限范围也是比较容易出现的故障。需要说明的是,这里的极限范围指的是距离极限值预设数值的范围,例如极限值为10g,极限范围9~10g。

此外,还可能出现一些原因导致osd发生震荡,例如集群压力大、内存吃紧导致的osd工作线程超时或者osd心跳检测超时,还例如某些osd的数据接近容量极限导致的集群网络故障或者产生了很大的延时而同时前端网络正常工作,这也可能导致osd震荡。

当icfs系统中的某个osd落盘出现延时时,可能会导致osd慢盘。

通过仔细分析和研究,作为一种优选地方案,本申请将osd的故障分为上述四类,基本把osd的故障涵盖了,普适性较好,大大缩短了osd故障定位时间,简化运维操作流程,同时为后续业务的及时跟进提供了保障,更为产品的售后服务提供了坚实的保障。

还需要说明的是,作为一种优选地实施例,本申请还可以按照先判断osddown,再判断osd的容量达到极限范围,再判断osd震荡,再判断osd慢盘的顺序来进行故障判断,该故障判断顺序是按照故障发生概率大小来划分的,也即osddown发生的概率>osd的容量达到极限范围发生的概率>osd震荡发生的概率>osd慢盘发生的概率,采用该种判断方式能够进一步提高故障判定速度。

作为一种优选地实施例,当osd的故障分类包括osddown时,osddown包括故障域内的部分osddown、不同故障域内的共同持有一些对象的数据的osd同时down和osddown掉且不在osdtree中。

具体地,设备断电、硬盘故障、数据写入集群时出现的某些osd的数据接近容量极限、osd存在缺陷等原因可能导致故障域内的部分osddown。设备断电、硬盘故障等原因可能会导致不同故障域内的共同持有一些对象的数据的osd同时down。此外,设备断电、硬盘故障等原因还可能会导致osddown掉且不在osdtree中。

本申请将故障域内的部分osddown进行进一步故障划分,为后续进行故障精准定位、快速解决故障问题提供了重要的保证。

作为一种优选地实施例,osddown对应的故障判定方式为:

输入icfs-s指令后,icfs系统中的各个osd的osd信息中,存在osd的状态信息为down;

osd的容量达到极限范围对应的故障判定方式为:

输入icfs-s指令后,存在nearfull告警信息;

osd震荡对应的故障判定方式为:

icfs系统中,存在osd的状态在第一预设时间内多次交替出现up和

down;

osd慢盘对应的故障判定方式为:

icfs系统的状态出现blocked。

具体地,输入icfs-s指令后,能够查询到icfs系统中所有的osd的osd信息,如果存在osd的状态信息为down或者out,则说明此时存在osddown掉了;如果icfs-s指令的输出中有nearfull等警告信息,则说明集群的某些osd的数据接近容量极限,集群需要紧急扩容或者调整权重;如果存在osd的状态一会up一会down,则说明该osd发生了震荡;如果icfs系统的集群状态出现blocked(数据无法完成落盘),则说明此时icfs系统出现了慢盘。采用上述故障判定方式,判断速度快,精度高。

上述几种故障判定方式只是本申请给出的几种优选方式,具体选用哪种故障判定方式本申请在此不作特别的限定。

作为一种优选地实施例,该方法还包括:

预先针对osd的不同类别的故障制定故障解决策略;

在判定icfs系统存在故障后,该方法还包括:

根据判定的icfs系统的故障确定故障解决策略;

对icfs系统实施确定的故障解决策略,以解决icfs系统的故障。

具体地,在对osd故障进行分类后,还针对osd的各类故障给出相应的故障解决策略,以便在发现故障后,无需再找解决方法,直接利用预设的故障解决策略来解决故障,提高故障处理的速度。此外,还需要说明的是,在故障处理前,需要检测icfs系统以及各个存储节点的osd状态,在处理完成后,要确保处理完成后存储系统正常,状态为ok,并通过icfsosdtree查看所有osd状态是否正常。

作为一种优选地实施例,当osd的故障分类包括osddown时,对于故障域内的部分osddown,对icfs系统实施确定的故障解决策略的过程具体为:

通过monosddownoutinterval参数将时间间隔修改为第二预设时间,时间间隔为把down掉的osd标记为out的时间间隔,以便在把故障osd标记为out前修复故障。

具体地,对于故障域内的部分osddown,由于可能会出现磁盘本身没有问题,只是该磁盘对应的osd有问题,也即物理磁盘没问题,只是软件层面出了问题的情况,因为,为了避免将该osd标记为out后而将该osd从icfs系统中剔除的情况出现,本申请在确定osd的故障为故障域内的部分osddown时,通过monosddownoutinterval参数将时间间隔修改为第二预设时间,这里的第二预设时间可以为300s,也即第二预设时间稍微长一些,以便能在把故障osd标记为out前修复osd故障,继续使用该osd。

作为一种优选地实施例,当osd的故障分类包括osddown时,对于不同故障域内的共同持有一些对象的数据的osd同时down,对icfs系统实施确定的故障解决策略的过程具体为:

kill掉发生故障osd的进程,并使用对象修复工具对pg进行修复故;

查找故障osd共有的pgid,执行python脚本,以保证故障osd共有的pg都保存在common_pg.txt文件中;

导出故障osd共有的pg(pg看成是一致性哈希中的虚拟节点,维护了一部分数据并且是数据迁移和改变的最小单位。它在icfs中承担着非常重要的角色,在一个pool中存在一定数量的pg(可动态增减),这些pg会被分布在多个osd,分布规则可以通过crushrule来定义。当osd发生故障时,pg会标记相关状态进行提升,所以pg数据需要导出);

新增osd及其对应的进程,并将故障osd共有的pg及故障osd的用户数据导入新增的osd;

启动新增的osd。

具体地,下面以集群中有4个osd,根据icfs系统的数据冗余规则确定最多两个相关osd故障为例对该故障解决策略作介绍:

如果故障域为osd,那么同时坏掉两块osd相关的硬盘或者两个osddown掉,集群会进入不正常状态,因为这两个osd可能共同持有一些对象的数据,而这两个osd同时down掉后,集群无法获得他们共有的对象。

解决方法为:

1)若集群中的osd.0(sdb1)和osd.1(sdc1)两个osddown掉,且不在故障域内,且使用systemctlstarticfs-osd@*无法将osd启动,而且查看icfsosdtree,看到osd.0和osd.1为down+out状态,需要使用对象修复工具来恢复osd.0和osd.1持有的数据,并kill掉不在同一故障域的osd.0和osd.1进程。

2)通过命令ls/var/lib/icfs/osd/icfs-0|grephead>/tmp/osd0_pg.txt找到osd.0和osd.1共有的pgid,执行python脚本,保证osd.0和osd.1共有的pg都保存在common_pg.txt文件中。

3)在/tmp创建需要的目录/data/sdb1、/data/sdc1、/export/sdb1、/export/sdc1,执行脚本并以pg为单位,导出sdb1和sdc1中的共同的pg(为了做数据备份,有必要同时导出sdb1和sdc1的对象数据,即底层pg)。

4)新增一个osd(osd.4)及其对应的进程,专门用来存放将要导入的故障osd共有的pg及故障osd的用户数据,执行脚本,导入数据。

5)导入数据完成后,启动osd.4,执行icfsosdunsetnoin,此时集群会向该osd恢复数据。恢复完成后,icfs-s可以看到集群的pg由stale变为down+peering状态,那么从osdmap、crushmap、auth中删除之前down掉的osd即可。

作为一种优选地实施例,当osd的故障分类包括osddown时,对于osddown掉且不在osdtree中,对icfs系统实施确定的故障解决策略的过程具体为:

通过命令cat/var/lib/icfs/osd/icfs-0/fsid查看down掉的osd0的fsid;

根据这个fsid,新增一个osd,且保证此时新增的osd号必须为0,否则该osd只能为in状态,无法为up状态,而且icfs-s显示pgremapped等信息;

添加该osd的授权信息并启动该osd。

作为一种优选地实施例,当osd的故障分类包括osd的容量达到极限范围时,对icfs系统实施确定的故障解决策略的过程具体为:

对icfs系统进行扩容或者调整osd权重。

具体地,关于扩容:通过命令icfs-admin-cluster--expand--hostinspur04--node_typeosd增加一个osd服务节点,完成后根据需求扩容mon与mds节点。

关于osd权重调整:若提示某个osd的数据已经接近容量极限,但是其他osd对应的硬盘剩余空间较多,可以执行icfsosdreweight-by-utilization调整osd权重,调整之后存储系统会重新remap数据。

通过上述两种故障解决策略可以快速有效地解决osd的容量达到极限范围这个问题,提高了故障处理效率和集群的性能。

作为一种优选地实施例,当osd的故障分类包括osd震荡时,对icfs系统实施确定的故障解决策略的过程具体为:

修改震荡参数osd操作线程池的超时告警时间osdopthreadtimeout、osd操作线程池的超时自杀时间osdopthreadsuicidetimeout、filestore操作线程池的超时自杀时间filestoreopsuicidetimeout、osd之间互ping的时间间隔osdheartbeatinterval及osd心跳检测的超时时间osdheartbeatgrace。

具体地,当osd发生震荡时,可通过修改震荡参数或强制停止震荡解决故障。

具体地,修改震荡参数:首先判断是否是线程超时或者心跳检测超时导致的osd震荡、崩溃。

具体判断方法为:若osd因断言失败而崩溃,日志中报出“hadsuicidetimedout”为线程超时;若monitor在osdmap中将该osd标记为down,日志中报出“wehaveenoughreporterstomarkosd.xdown”等内容为心跳检测超时;

然后修改icfs.conf文件中相关参数(参数:osd操作线程池的超时告警时间osdopthreadtimeout=60、osd操作线程池的超时自杀时间osdopthreadsuicidetimeout=600、filestore操作线程池的超时自杀时间filestoreopsuicidetimeout=600、osd之间互ping的时间间隔osdheartbeatinterval=20、osd心跳检测的超时时间osdheartbeatgrace=60;

最后重启mon与osd保证操作生效。

关于强制停止震动:首先遇到osd震荡的情形,强制通知monitor停止震荡;清除flags会在osdmapstructure中记录;阻止启动的osd被标记为in(分配数据),或者保护osd防止最终被标记为out;最后排查网络故障,恢复osd。

通过上述两种故障解决策略可以快速有效地解决osd震荡的问题,提高了故障处理效率和集群的性能。

作为一种优选地实施例,当osd的故障分类包括osd慢盘时,对icfs系统实施确定的故障解决策略的过程具体为:

执行lsblk,确定慢盘的osd盘符;

更换慢盘。

另外,可以通过如下方法判断是否存在慢盘:

执行icfs-s检测icfs系统是否出现blockedrequests;

如果出现,执行icfsosdperf查看osd落盘的延时情况,如出现某个osd的commit和latency的延时都很高(例如超过预设间隔),则判定该osd为慢盘。

通过上述故障解决策略可以快速有效地解决osd慢盘的问题,提高了故障处理效率和集群的性能。

作为一种优选地实施例,在根据故障判定信息并结合预先设置好的故障判定方式及故障的分类判定icfs系统不存在故障后,该方法还包括:

获取系统日志;

根据系统日志对icfs系统进行故障分析。

具体地,存在一些故障不在上述分类故障范围内,例如未知原因造成的osd故障,则此时排除上述预设设置的分类故障,结合系统日志进行后续进一步检测,进行准确定位解决,快速制定解决方案。

综上,本申请提供的故障定位方法,一方面,对可能发生的故障提供了定位方向,缩短了问题定位时间;另一方面,对于问题发生后及时解决问题提供了综合性的指导,为产品的售后服务提供了坚实的保障。

请参照图2,图2为本发明提供的一种基于icfs系统的osd故障定位系统的结构示意图,该系统包括:

分类单元1,用于预先对icfs系统中的osd的故障进行分类及对故障对应的故障判定方式进行分类;

获取单元2,用于获取icfs系统的故障判定信息,故障判定信息包括icfs系统中各个osd的osd信息和/或icfs系统的数据冗余规则;

故障定位单元3,用于根据故障判定信息并结合预先设置好的故障判定方式及故障的分类判定是否存在osd发生故障。

需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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