CN104331324A - MapReduce故障注入套件 - Google Patents
MapReduce故障注入套件 Download PDFInfo
- Publication number
- CN104331324A CN104331324A CN201410613333.1A CN201410613333A CN104331324A CN 104331324 A CN104331324 A CN 104331324A CN 201410613333 A CN201410613333 A CN 201410613333A CN 104331324 A CN104331324 A CN 104331324A
- Authority
- CN
- China
- Prior art keywords
- fault location
- direct fault
- module
- user
- kernel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
MapReduce故障注入套件,属于基于MapReduce的故障注入领域。解决了现有故障注入套件对Hadoop中的MapReduce进行故障注入复杂的问题。本发明包括管理模块、本地文件和目录故障注入模块、节点和进程故障注入模块和网络故障注入模块;管理模块用于负责存储、分析将用户输入的命令,进而调用相应的故障注入工具完成用户指定的故障注入工作;本地文件和目录故障注入模块用于将用户指定的故障注入到系统中指定目录或文件读写过程中;节点和进程故障注入模块用于将用户指定的故障注入到系统中的指定节点或进程中;网络故障注入模块用于将用户指定的故障注入到网络中。本发明主要对于MapReduce进行故障注入。
Description
技术领域
本发明属于基于MapReduce的故障注入领域。
背景技术
随着信息技术的不断发展,信息系统中的数据量也迅猛增加,传统的计算模式和存储方法已经无法满足日益增长的海量数据处理和存储的需求。在这种情形之下,具有强大的分布式计算能力的云计算技术应运而生,成为目前最理想的海量数据解决方案。随着云计算技术的不断发展与普及,这种解决方案所带来的困难与挑战也随之出现,数据的可靠性是其中至关重要的一个方面。分布式文件系统作为云存储的核心基础,承载着数据存储的重任,同时也负责保证数据的可靠性。
Hadoop是基于Google云平台的开源实现,是一个典型的云计算应用平台。Hadoop通过分布式文件系统(HDFS)和并行计算框架(MapReduce)这两个核心组件,来分别对集群的存储资源和计算资源进行统一的管理。但在实际应用中,集群中的机器不可避免的会发生节点失效故障、节点上的进程故障、系统内部互联的网络故障等各种故障问题。因此,开发MapReduce故障注入套件对云平台的容错能力评测具有重要的意义。
Hadoop中的MapReduce任务一般是用来进行海量数据处理的,属于一种计算资源敏感型任务类型。MapReduce任务在运行时会在各个计算节点上启动多种类型的进程进行并行计算。在各个节点的并行计算过程完成后,需要将各个子节点的计算结果同步到聚合节点上。因此,单个节点的计算效率低下将导致整个计算任务的效率下降。资源过载故障的发生将直接影响Hadoop平台中MapReduce任务的执行效率,研究不同严重程度的资源过载故障对于整个MapReduce任务的影响具有重要意义。
MapReduce任务的执行流程图具体参见图4;
JobTracker端执行流程:
1.用户提交作业到JobTracker,保存在jobInitQueue队列中。
2.JobTracker的JobQueueTaskScheduler对象不断轮询jobInitQueue队列,如果发现job就取出,并初始化。
3.启动服务器监听TaskTracker发送过来的Heartbeat。
4.JobTracker收到Heartbeat之后,会检查该Heartbeat的信息,如果发现错误会启动相应的错误处理程序。
5.如果TaskTracker在Heartbeat中包含了对Task的请求,JobTracker会添加相应的指令在对Heartbeat的回复中(HeartbeatResponse)。
TaskTracker端执行流程:
1.TaskTracker启动后,每隔一段时间就会向JobTracker发送Heratbeat消息。
2.Heartbeat中包含TaskTracker当前状态和对Task的请求。
3.TaskTracker内部有一个队列TaskQueue,包含了所有新加入的Task。
4.TaskTracker在收到JobTracker发送过来的HeartbeatResponse之后会对其进行检查,如果包含JobTracker新分配的Task,则将其加入到TaskQueue队列中s
5.在TaskTracker内部还有两个线程(MapLauncher和ReduceLauncher)不断的轮询TaskQueue。
6.Map Task、Reduce Task取出后,都需要进行本地化(将需要运行的jar文件、配置文件、输入数据等,一起拷贝到JobTracker的本地文件系统),方便任务在机器上独立运行。
7.本地化之后,TaskTracker会启动一个JVM进程来执行该Task。
JobClient:执行任务的客户端,JobTracker:任务调度器,TaskTracker:任务跟踪器,Task:具体的任务(Map OR Reduce),jobInitQueue:任务初始化队列,JobQueueTaskScheduler:任务调度模块,TaskQueue:任务队列,MapLauncher:Map启动线程,ReduceLauncher:Reduce启动线程,Heartbeat:心跳检测,JVM:Java虚拟机。
发明内容
本发明是为了解决现有故障注入套件对Hadoop中的MapReduce进行故障注入复杂的问题,本发明提供了一种MapReduce故障注入套件。
MapReduce故障注入套件,它包括管理模块、本地文件和目录故障注入模块、节点和进程故障注入模块和网络故障注入模块;
管理模块用于负责存储、分析将用户输入的命令,进而调用相应的故障注入工具完成用户指定的故障注入工作;
本地文件和目录故障注入模块用于将用户指定的故障注入到系统中指定目录或文件读写过程中;
节点和进程故障注入模块用于将用户指定的故障注入到系统中的指定节点或进程中;
网络故障注入模块用于将用户指定的故障注入到网络中。
本发明带来的有益效果是,应用本发明所述的MapReduce故障注入套件进行故障注入时,故障注入过程简单,解决了现有的分布式系统中缺少对分布式文件系统可靠性测试的套件,能对分布式系统中出现的问题提前做准备,使得系统可靠性提高。
附图说明
图1为本发明所述的MapReduce故障注入套件的原理示意图;
图2为具体实施方式三所述的节点和进程故障注入模块的原理示意图;
图3为具体实施方式五所述的网络故障注入模块用于将网络故障注入到网络中的原理示意图;
图4为MapReduce任务的执行流程图;
图5为MapReduce的故障注入位置的原理示意图;
图6为Kprobe内核调试机制工作原理示意图;
图7为网络故障注入工具的实现流程图;
图8为Linux文件系统层次图。
具体实施方式
具体实施方式一:参见图1说明本实施方式,本实施方式所述的MapReduce故障注入套件,它包括管理模块、本地文件和目录故障注入模块、节点和进程故障注入模块和网络故障注入模块;
管理模块用于负责存储、分析将用户输入的命令,进而调用相应的故障注入工具完成用户指定的故障注入工作;
本地文件和目录故障注入模块用于将用户指定的故障注入到系统中指定目录或文件读写过程中;
节点和进程故障注入模块用于将用户指定的故障注入到系统中的指定节点或进程中;
网络故障注入模块用于将用户指定的故障注入到网络中。
本实施方式,根据MapReduce任务的执行流程图4,打算针对节点和进程的容错性、网络故障的容错性文件和目录的容错性等方面设计故障注入位置实验,观察MapReduce的容错处理能力和故障恢复能力。
图5是MapReduce的故障注入位置的原理示意图;
1、节点和进程故障注入:MapReduce进行任务处理时,JobTracker和TaskTracker部署于集群节点上。JobTracker节点为作业进行资源调配和任务划分,TaskTracker节点负责执行相应的Map任务和Reduce任务。TaskTracker节点通过运行Map Task进程和Reduce Task进程来完成相应的Map任务和Reduce任务。无论是JobTracker节点或TaskTracker节点出现故障还是Map Task进程或Reduce Task进程出现异常,都可能产生较大影响。故障注入工具针对JobTracker和TaskTracker进行节点故障注入和节点内的进程进行故障注入,以及针对Map Task和Reduce Task进行进程故障注入,然后观察任务是否能够继续执行,以及执行结果有没有差错,得出MapReduce任务执行的容错能力。
故障集如下表3-1所示。
表3-1节点和进程故障集及故障参数
进程故障注入通过对指定节点中指定进程设置探针的方法对寄存器内容进行修改,来模拟实际应用中的进程故障和节点故障;节点则通过对节点中起决定性作用的进程进行故障注入在宏观上模拟节点的故障。
2、本地文件和目录故障注入:Map任务在执行过程中产生的中间结果是保存在执行该Map任务的节点本地文件系统中,当本地文件系统保存中间结果的文件或者目录发生故障时,对于MapReduce任务的执行也将产生影响。本地文件和目录故障注入通过在VFS(Virtual File System,虚拟文件系统)层将与实际的文件系统相关的系统调用截获下来,并进行修改成从而达到文件和目录故障注入的目的。
故障集如下表3-2所示。
表3-2文件和目录故障集及故障参数
该工具能够针对指定的文件或者目录,注入以上的操作失效故障,用户可以根据不同的测试需求,选择不同的文件或者目录进行相应的故障注入测试。
3、网络故障注入:
MapReduce执行过程中,JobTracker和各TaskTracker之间的通信都是通过网络来进行的,当MapReduce任务执行过程中发生不同类型的网络故障时,对MapReduce任务的执行效率也将产生影响。网络故障注入用于模拟JobTracker和各TaskTracker之间通信的网络故障,主要针对这些节点之间通信时发送的TCP数据包来进行故障注入。
故障集定义如表3-3所示:
表3-3网络故障集定义及故障参数
该工具能够模拟的网络故障包括:网络丢包、网络延迟、数据包重复、数据包损坏、数据包乱序等故障。
具体实施方式二:本实施方式与具体实施方式一所述的MapReduce故障注入套件的区别在于,所述的本地文件和目录故障注入模块包括如下单元:
用于通过加载内核模块实现文件和目录故障注入的文件和目录故障注入单元;
用于通过proc文件系统完成内核与用户空间的交互的单元;
用于通过proc文件系统将故障参数读取到内核空间,同时在内核里启动一个守护线程的单元,所述proc文件系统内部存有用户写入地故障参数;所述守护线程用于每隔1000ms从proc文件系统中读取control控制信息,用于控制故障注入的启动和停止;
用于根据control控制信息启动相应功能的单元,该单元用于在control控制信息为启动命令时,首先会保存VFS层原来的关于文件和目录的函数跳转表,然后根据故障配置信息,修改VFS层关于文件和目录的函数跳转表,最后跳转到用户自定义的带故障的函数里去执行,启动故障注入;该单元还用于在control控制信息为停止命令时,恢复VFS层关于文件和目录的函数跳转表,停止故障注入。
本实施方式,本故障注入工具能够针对Hadoop文件系统部署时存储在本地的文件或者目录进行故障注入,可以针对元数据文件。数据块文件、日志文件设计相关的故障注入实验,观察Hadoop对这些文件或文件所在的目录出故障的容错能力。
文件和目录故障注入工具的实现主要是通过加载内核模块,其中内核与用户空间的交互(故障参数的传递)是通过proc文件系统来完成。用户将故障参数写入到proc文件系统,内核模块通过proc文件系统将故障参数读取到内核空间,同时在内核里启动一个守护线程,该线程每隔1000ms就会从proc文件系统中读取control控制信息,用于控制故障注入的启动和停止。一共包含三种控制标志:START、STOP、CLEANUP分别表示开始故障注入、停止故障注入和清空故障配置信息。
内核态使用的故障信息数据结构为:
文件和目录故障注入原理:
Linux中文件系统(Mapreduce是以Linux操作系统为基础的)主要可以分为三大块:文件系统调用层、虚拟文件系统(Virtual File System,VFS)层、挂载到VFS中的各实际文件系统(如ext3、ext4、jffs等),
如图8所示Linux文件系统层次图,其中内核通过虚拟文件系统VFS层与各种具体的文件系统打交道。由于底层文件系统类型不同,文件操作的差异也很大,但是通过VFS提供的接口,可以让open、read、write等系统调用不用关心底层的存储介质和文件系统类型就可以正常工作。
为了对本地文件和目录注入故障,可以在本地文件系统之上的VFS文件系统层进行故障注入,这样不仅不依赖于具体的本地文件系统结构,又具有很强的通用性。比如TFS要求本地存储数据的磁盘文件系统被格式化为ext4格式,而Hadoop分布式文件系统通常使用ext3格式,在VFS层实现的故障注入工具就可以很方便的从Hadoop分布式文件系统移植到Taobao分布式文件系统。
VFS层主要是通过inode_operations、file_operations和dentry_operations这三个函数跳转表与实际的文件系统进行交互。这三个函数跳转表分别负责具体的索引节点、文件对象、目录项相关的操作函数的跳转(在具体的文件系统创建的时候对这三个函数跳转表进行初始化,分别关联到具体的文件系统操作)。也就是说,操作系统对索引节点、文件和目录的操作从VFS层通过这三个函数跳转表跳转到具体的文件系统相关操作中去执行。
而分布式文件系统是架设在本地文件系统之上的,实际数据的存储与读写还是要通过本地文件系统与磁盘进行交互。因此,在VFS层注入的故障也能直接影响到分布式文件系统中的文件操作。在VFS层,将与实际的文件系统相关的系统调用截获下来,并修改成相应的故障操作,从而达到文件和目录故障注入的目的。
具体实施方式三:参见图2说明本实施方式,本实施方式与具体实施方式一所述的MapReduce故障注入套件的区别在于,所述的节点和进程故障注入模块包括如下单元:
用于将用户将配置的故障参数写入到proc文件系统的单元,所述故障参数包括目标进程的pid、发生故障寄存器的位置、故障类型和触发中断的时钟节拍数,
加载内核单元,所述加载内核单元初始化时,在do_timer函数处添加自定义的用户处理函数,并且将用户配置的故障参数读入到内核,所述的自定义的用户处理函数为探针函数;
所述探针函数,用于从init进程开始,遍历内核进程列表,查找目标进程,并获取目标进程的pt_regs结构体信息,pt_regs结构体里面保存了CPU寄存器在内核态的镜像,通过向pt_regs结构体里面故障位置对应的寄存器,注入用户配置好的故障后,
将pt_regs结构体里面的内容恢复到目标进程,从而完成对目标进程的故障注入。
本实施方式,其中内核态与用户态的交互是通过proc文件系统来进行的,proc是一种伪文件系统,也叫虚拟文件系统,它负责存储的是内核运行状态的文件,整个文件系统都存在与内存中。用户将故障配置信息写入到proc文件系统内,处于内核态的程序便可以读取proc文件内容,从而达到内核态和用户态进行交互的目的。
节点和进程故障注入原理:
实际应用中,节点失效故障可能是由系统断电、硬件故障、软件错误等多种原因造成的,进程失效故障多是由于数据流、控制流错误等引起的。而对于这两种实际应用中具有代表性的故障,均可由系统内的CPU寄存器内容错误直接引发。通过软件手段来模拟现实中可能出现的由于CPU寄存器故障导致的应用进程失效或者节点整体宕机的故障情况。
进程是Hadoop平台运行的基本支撑,整个Hadoop平台的调度、同步等机制顺利执行都是由进程在底层操作系统上完成。本文实现的基于内核态的寄存器软件故障注入工具采用在系统时钟中断发生时修改Hadoop相关进程的当前寄存器状态的方法进行故障注入。时钟中断请求是操作系统中任务调度、进程切换的资源占用统计依据,是内核工作的生命线。
本故障注入工具使用时钟中断作为故障注入触发的条件。
当设定的整数倍的时钟中断请求发生时,通过在内核态修改Hadoop相关进程寄存器内容映射在内存中的镜像来对寄存器硬件故障进行模拟。
当中断请求返回时,操作系统内核在恢复进程上下文现场时,会将我们改写的内核堆栈寄存器内容恢复给Hadoop相关进程,从而达到寄存器故障注入的目的。
节点和进程故障注入工具的实现:
基于内核态的寄存器故障注入工具实现的节点和进程故障注入工具中的故障信息数据结构:
其中,target_pid定义了故障注入的目标进程;fault_location定义了故障注入的位置集合;fault_type定义了故障注入的类型;fault_interval定义了故障触发经过的整数倍数的时钟中断请求;fault_inject_control定义了故障注入的控制标志,包括:“START”、“STOP”和“CLEAR”三种控制标识,分别代表了故障注入的开始、停止和清理的操作。
在实现时工具选用了内核时钟函数do_timer作为探针关联的内核API。利用Kprobe探针注册流程在do_timer处完成探针注册,将自定义的故障注入代码关联到Kprobe的pre_handler处。同时,我们在内核中启动一个守护线程时刻监测故障触发的条件:如果满足触发条件,执行预先定义的故障注入函数;否则,继续进行监测直到满足条件或者退出。
具体实施方式四:本实施方式与具体实施方式一所述的MapReduce故障注入套件的区别在于,所述的节点和进程故障注入模块用于将用户指定的故障注入到系统中的指定节点中的具体过程为:
通过对Jobtrack节点和Tasktrack节点中指定系统进程进行故障注入,使指定系统进程失效,从而导致整个节点失效,完成对指定节点的故障注入。
本实施方式中,当使用基于内核态的寄存器软件故障注入工具对系统关键进程如init等进行故障注入操作时,可能导致操作系统崩溃现象的发生,从而导致计算系统的不可用。这种故障类型能够模拟Hadoop集群中节点宕机故障的发生,达到节点失效故障注入的目的。
类Unix操作系统中提供了一种简单而强大的内核调试工具—Kprobe。Kropbe探针允许测试人员能够不对操作系统源代码进行修改,而以动态内核模块加载的方式自由灵活地对内核态的API进行跟踪和调试。如图6所示,它提供了一种探针机制,开发人员可以指定一个内核API作为跟踪目标。Kprobe能够将开发人员编写的自定义函数关联到指定的内核API处。当操作系统的该内核API被调用时,将会优先执行该内核API所关联的探针函数,然后才会进行正常的内核API处理执行流程。
Kprobe内核调试机制工作原理示意图,参见图6,基于内核态的寄存器软件故障注入工具是基于Kprobe内核调试模块的寄存器内容修改技术实现的,通过对不同类型的进程进行故障注入操作,可以有效地模拟Hadoop平台现实应用中出现的应用进程失效和节点整体宕机故障类型。基于内核态的寄存器软件故障注入通过在时钟中断的内核响应函数处插入故障代码来完成相应的故障注入操作。在故障注入测试时,可以设定任意整数倍的时钟节拍作为触发条件。
具体实施方式五:参见图3说明本实施方式,本实施方式与具体实施方式一所述的MapReduce故障注入套件的区别在于,所述的网络故障注入模块用于将用户指定的故障注入到网络中的具体过程为:
在Linux内核2.6之前,加载内核模块,将自定义函数注册到钩子函数NF_IP_PRE_ROUTING中,网络层IP数据包从网络设备驱动进入内核IP协议栈,进行IP校验以后,
首先被钩子函数NF_IP_PRE_ROUTING处理,每当有IP数据包经过钩子点的时,网络筛选系统NetFilter按照优先级别依次调用注册函数,从而使得用户在内核模块中参与对IP数据包的处理,使IP数据包发生网络故障,
然后进入输入数据包路由模块,该输入数据包路由模块决定是将IP数据包转发出去还是传递给本机内部进程;
如果IP数据包发送给本机内部进程,在经过钩子函数NF_IP_LOCAL_IN处理之后传递给本机的上层协议后,自动完成剩余的网络传输;
如果IP数据包需要被转发,则先经过钩子函数NF_IP_FORWARD处理,再经过钩子函数NF_IP_POST_ROUTING处理后传输到网络,
对于由本地进程产生的数据包,先经过钩子函数NF_IP_LOCAL_OUT处理,再进输出数据包路由模块进行路由选择,然后经过钩子函数NF_IP_POST_ROUTING处理后传输到网络。
本实施方式,通过加载内模块的方法,用户可以将自己定义的函数注册到钩子函数中,这样每当有数据包经过该钩子点的时候,NetFilter就会按照优先级别依次调用这些注册函数,从而使得用户能够在内核模块中参与对数据包的处理。
网络故障注入原理:
Hadoop系统中的通信都是通过RPC(Remote Procedure Call,远程过程调用)机制来实现的,在网络层的传输协议是基于TCP的。因此为了模拟网络中的各种故障注入,可以针对这些节点之间通信时发送的TCP数据包来进行故障注入的设计。
Linux内核提供了一套基于netfilter的网络防火墙架构,通过该架构,用户可以在整个网络流程的IP层若干位置设置自己的钩子(hook)函数,当IP数据包经过这些位置时,钩子函数就会被调用,通过在这些钩子函数里对数据包进行延迟发送、丢弃或者修改等操作,可以模拟出各种现实应用中的网络故障,从而达到故障注入的目的。
netfilter定义的五个钩子函数(hook);网络层IP数据包从网络设备驱动进入内核IP协议栈,进行IP校验以后,首先被第一个钩子函数NF_IP_PRE_ROUTING处理,然后进入输入数据包路由模块,该模块决定是将其转发出去还是传递给本机内部进程;如果数据包是发送给本机的,在经过钩子函数NF_IP_LOCAL_IN处理之后传递给本机的上层协议;如果需要被转发,则先经过钩子函数NF_IP_FORWARD处理,再经过钩子函数NF_IP_POST_ROUTING处理后才能传输到网络;对于由本地进程产生的数据包,需要先经过钩子函数NF_IP_LOCAL_OUT处理,再进行路由选择,然后经过钩子函数NF_IP_POST_ROUTING处理后才能传输到网络。
网络故障注入工具的实现:
通过Netfilter的钩子函数处理数据包之后,必须返回下面预定义的返回值中的一个:
NF_DROP:丢弃该数据包,后续不再进行处理;
NF_ACCEPT:继续按原来的流程正常传输;
NF_STOLEN:告知Netfilter忘掉该数据包,不需要做后续处理;
NF_QUEUE:将该数据包放到用户空间的队列中去;
NF_REPEAT:请求Netfilter再次调用这个hook函数;
数据包从网络设备驱动进入内核之后,进行路由选择之前(也就是在NF_IP_PRE_ROUTING这个位置)注册自己的钩子函数,在钩子函数内部,对IP数据包进行相关的操作,从而模拟各种网络故障。
表3-4每种网络故障对应的钩子函数内部操作
整个网络故障注入工具的实现流程图如图7所示:
1.首先用户根据需要,配置故障注入参数(包括网络故障的类型、时间、比例),其中时间参数是在网络延迟故障时用到的参数,比例是数据包丢包、损坏、重复故障时用到的参数。
2.加载内核模块,并注册钩子函数。值得注意的时,在Linux内核2.6之前,是在NF_IP_PRE_ROUTING处注册钩子函数,内核2.6之后,这个变量名变成了NF_INET_PREROUTING.
3.根据用户配置的故障类型,在钩子函数内部对数据包进行相应的操作,模拟出各种相应的网络故障。
4.在注入网络故障的条件下运行工作负载,对集群的状态进行监控,并分析相关的日志文件,得出结论。
5.本故障注入工具能够针对网络环境,进行各种类型的网络故障注入,并在带故障的环境下,运行工作负载,评测HDFS对于网络故障的容错能力。
具体实施方式六:本实施方式与具体实施方式一所述的MapReduce故障注入套件的区别在于,所述的网络故障注入模块用于将用户指定的故障注入到网络中的具体过程为:
在Linux内核2.6之后,加载内核模块,将自定义函数注册到钩子函数NF_INET_PREROUTING中,网络层IP数据包从网络设备驱动进入内核IP协议栈,进行IP校验以后,
首先被钩子函数NF_INET_PREROUTING处理,每当有IP数据包经过钩子点的时,网络筛选系统NetFilter按照优先级别依次调用注册函数,从而使得用户在内核模块中参与对IP数据包的处理,使IP数据包发生网络故障,
然后进入输入数据包路由模块,该输入数据包路由模块决定是将IP数据包转发出去还是传递给本机内部进程;
如果IP数据包发送给本机内部进程,在经过钩子函数NF_IP_LOCAL_IN处理之后传递给本机的上层协议后,自动完成剩余的网络传输;
如果IP数据包需要被转发,则先经过钩子函数NF_IP_FORWARD处理,再经过钩子函数NF_IP_POST_ROUTING处理后传输到网络,
对于由本地进程产生的数据包,先经过钩子函数NF_IP_LOCAL_OUT处理,再进输出数据包路由模块进行路由选择,然后经过钩子函数NF_IP_POST_ROUTING处理后传输到网络。
Claims (6)
1.MapReduce故障注入套件,其特征在于,它包括管理模块、本地文件和目录故障注入模块、节点和进程故障注入模块和网络故障注入模块;
管理模块用于负责存储、分析将用户输入的命令,进而调用相应的故障注入工具完成用户指定的故障注入工作;
本地文件和目录故障注入模块用于将用户指定的故障注入到系统中指定目录或文件读写过程中;
节点和进程故障注入模块用于将用户指定的故障注入到系统中的指定节点或进程中;
网络故障注入模块用于将用户指定的故障注入到网络中。
2.根据权利要求1所述的MapReduce故障注入套件,其特征在于,所述的本地文件和目录故障注入模块包括如下单元:
用于通过加载内核模块实现文件和目录故障注入的文件和目录故障注入单元;
用于通过proc文件系统完成内核与用户空间的交互的单元;
用于通过proc文件系统将故障参数读取到内核空间,同时在内核里启动一个守护线程的单元,所述proc文件系统内部存有用户写入地故障参数;所述守护线程用于每隔1000ms从proc文件系统中读取control控制信息,用于控制故障注入的启动和停止;
用于根据control控制信息启动相应功能的单元,该单元用于在control控制信息为启动命令时,首先会保存VFS层原来的关于文件和目录的函数跳转表,然后根据故障配置信息,修改VFS层关于文件和目录的函数跳转表,最后跳转到用户自定义的带故障的函数里去执行,启动故障注入;该单元还用于在control控制信息为停止命令时,恢复VFS层关于文件和目录的函数跳转表,停止故障注入。
3.根据权利要求1所述的MapReduce故障注入套件,其特征在于,所述的节点和进程故障注入模块包括如下单元:
用于将用户将配置的故障参数写入到proc文件系统的单元,所述故障参数包括目标进程的pid、发生故障寄存器的位置、故障类型和触发中断的时钟节拍数,
加载内核单元,所述加载内核单元初始化时,在do_timer函数处添加自定义的用户处理函数,并且将用户配置的故障参数读入到内核,所述的自定义的用户处理函数为探针函数;
所述探针函数,用于从init进程开始,遍历内核进程列表,查找目标进程,并获取目标进程的pt_regs结构体信息,pt_regs结构体里面保存了CPU寄存器在内核态的镜像,通过向pt_regs结构体里面故障位置对应的寄存器,注入用户配置好的故障后,
将pt_regs结构体里面的内容恢复到目标进程,从而完成对目标进程的故障注入。
4.根据权利要求1所述的MapReduce故障注入套件,其特征在于,所述的节点和进程故障注入模块用于将用户指定的故障注入到系统中的指定节点中的具体过程为:
通过对Jobtrack节点和Tasktrack节点中指定系统进程进行故障注入,使指定系统进程失效,从而导致整个节点失效,完成对指定节点的故障注入。
5.根据权利要求1所述的MapReduce故障注入套件,其特征在于,所述的网络故障注入模块用于将用户指定的故障注入到网络中的具体过程为:
在Linux内核2.6之前,加载内核模块,将自定义函数注册到钩子函数NF_IP_PRE_ROUTING中,网络层IP数据包从网络设备驱动进入内核IP协议栈,进行IP校验以后,
首先被钩子函数NF_IP_PRE_ROUTING处理,每当有IP数据包经过钩子点的时,网络筛选系统NetFilter按照优先级别依次调用注册函数,从而使得用户在内核模块中参与对IP数据包的处理,使IP数据包发生网络故障,
然后进入输入数据包路由模块,该输入数据包路由模块决定是将IP数据包转发出去还是传递给本机内部进程;
如果IP数据包发送给本机内部进程,在经过钩子函数NF_IP_LOCAL_IN处理之后传递给本机的上层协议后,自动完成剩余的网络传输;
如果IP数据包需要被转发,则先经过钩子函数NF_IP_FORWARD处理,再经过钩子函数NF_IP_POST_ROUTING处理后传输到网络,
对于由本地进程产生的数据包,先经过钩子函数NF_IP_LOCAL_OUT处理,再进输出数据包路由模块进行路由选择,然后经过钩子函数NF_IP_POST_ROUTING处理后传输到网络。
6.根据权利要求1所述的MapReduce故障注入套件,其特征在于,所述的网络故障注入模块用于将用户指定的故障注入到网络中的具体过程为:
在Linux内核2.6之后,加载内核模块,将自定义函数注册到钩子函数NF_INET_PREROUTING中,网络层IP数据包从网络设备驱动进入内核IP协议栈,进行IP校验以后,
首先被钩子函数NF_INET_PREROUTING处理,每当有IP数据包经过钩子点的时,网络筛选系统NetFilter按照优先级别依次调用注册函数,从而使得用户在内核模块中参与对IP数据包的处理,使IP数据包发生网络故障,
然后进入输入数据包路由模块,该输入数据包路由模块决定是将IP数据包转发出去还是传递给本机内部进程;
如果IP数据包发送给本机内部进程,在经过钩子函数NF_IP_LOCAL_IN处理之后传递给本机的上层协议后,自动完成剩余的网络传输;
如果IP数据包需要被转发,则先经过钩子函数NF_IP_FORWARD处理,再经过钩子函数NF_IP_POST_ROUTING处理后传输到网络,
对于由本地进程产生的数据包,先经过钩子函数NF_IP_LOCAL_OUT处理,再进输出数据包路由模块进行路由选择,然后经过钩子函数NF_IP_POST_ROUTING处理后传输到网络。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410613333.1A CN104331324A (zh) | 2014-11-04 | 2014-11-04 | MapReduce故障注入套件 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410613333.1A CN104331324A (zh) | 2014-11-04 | 2014-11-04 | MapReduce故障注入套件 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104331324A true CN104331324A (zh) | 2015-02-04 |
Family
ID=52406058
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410613333.1A Pending CN104331324A (zh) | 2014-11-04 | 2014-11-04 | MapReduce故障注入套件 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104331324A (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104853061A (zh) * | 2015-05-05 | 2015-08-19 | 中国人民解放军国防科学技术大学 | 一种基于Hadoop的视频处理方法及系统 |
CN105407481A (zh) * | 2015-10-23 | 2016-03-16 | 上海斐讯数据通信技术有限公司 | 上网数据的获取方法 |
CN105550080A (zh) * | 2015-11-26 | 2016-05-04 | 广州华多网络科技有限公司 | 一种基于Linux进行服务器程序故障注入方法、装置及系统 |
CN106155904A (zh) * | 2016-06-30 | 2016-11-23 | 浪潮(北京)电子信息产业有限公司 | 一种故障注入工具配置方法及装置 |
CN106294036A (zh) * | 2015-05-21 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 一种硬件故障验证方法、装置及客户端 |
CN106383303A (zh) * | 2016-08-26 | 2017-02-08 | 哈尔滨工业大学 | 基于观察点与并行的故障注入模拟方法及装置 |
CN106598860A (zh) * | 2016-12-16 | 2017-04-26 | 郑州云海信息技术有限公司 | 一种多种故障注入测试方法 |
CN106776180A (zh) * | 2016-12-16 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种pcie故障注入方法及其装置及故障管理系统 |
CN108737187A (zh) * | 2018-05-23 | 2018-11-02 | 哈尔滨工业大学 | 一种can总线故障模拟系统及故障模拟方法 |
CN109542341A (zh) * | 2018-11-06 | 2019-03-29 | 网宿科技股份有限公司 | 一种读写io监测方法、装置、终端及计算机可读存储介质 |
CN109962885A (zh) * | 2017-12-22 | 2019-07-02 | 北京安天网络安全技术有限公司 | 物联网设备的网络安全防护方法及物联网设备 |
CN110673993A (zh) * | 2019-09-19 | 2020-01-10 | 聚好看科技股份有限公司 | 一种故障注入方法、平台及系统 |
CN111400182A (zh) * | 2020-03-16 | 2020-07-10 | 腾讯科技(深圳)有限公司 | 故障注入方法、装置、服务器及计算机可读存储介质 |
CN111984524A (zh) * | 2019-05-24 | 2020-11-24 | 阿里巴巴集团控股有限公司 | 故障注入方法、故障模拟方法、故障注入装置及存储介质 |
CN112270018A (zh) * | 2020-11-11 | 2021-01-26 | 中国科学院信息工程研究所 | 一种场景敏感的自动化放置钩子函数的系统及方法 |
CN112714015A (zh) * | 2020-12-23 | 2021-04-27 | 上海科梁信息工程股份有限公司 | 通信数据故障注入方法及其系统、通信设备和存储介质 |
CN113377598A (zh) * | 2021-06-30 | 2021-09-10 | 中国电信股份有限公司 | 用于故障模拟的系统、方法、电子设备及存储介质 |
CN114968694A (zh) * | 2022-05-27 | 2022-08-30 | 深信服科技股份有限公司 | 一种硬盘故障注入方法、装置、设备及存储介质 |
CN115328814A (zh) * | 2022-10-13 | 2022-11-11 | 苏州浪潮智能科技有限公司 | 基于镜像对的故障注入方法、装置、设备和存储介质 |
CN115729724A (zh) * | 2022-11-30 | 2023-03-03 | 中电金信软件有限公司 | 故障注入方法、故障测试系统、电子设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102270173A (zh) * | 2011-07-21 | 2011-12-07 | 哈尔滨工业大学 | 基于scsi驱动层的故障注入工具 |
CN102354298A (zh) * | 2011-07-27 | 2012-02-15 | 哈尔滨工业大学 | 基于staf的高端容错机故障注入自动化测试平台及方法 |
US20130091094A1 (en) * | 2011-10-06 | 2013-04-11 | International Business Machines Corporation | Accelerating data profiling process |
-
2014
- 2014-11-04 CN CN201410613333.1A patent/CN104331324A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102270173A (zh) * | 2011-07-21 | 2011-12-07 | 哈尔滨工业大学 | 基于scsi驱动层的故障注入工具 |
CN102354298A (zh) * | 2011-07-27 | 2012-02-15 | 哈尔滨工业大学 | 基于staf的高端容错机故障注入自动化测试平台及方法 |
US20130091094A1 (en) * | 2011-10-06 | 2013-04-11 | International Business Machines Corporation | Accelerating data profiling process |
Non-Patent Citations (1)
Title |
---|
赵志龙: "Hadoop容错能力测试平台的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104853061A (zh) * | 2015-05-05 | 2015-08-19 | 中国人民解放军国防科学技术大学 | 一种基于Hadoop的视频处理方法及系统 |
CN104853061B (zh) * | 2015-05-05 | 2016-06-01 | 中国人民解放军国防科学技术大学 | 一种基于Hadoop的视频处理方法及系统 |
CN106294036A (zh) * | 2015-05-21 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 一种硬件故障验证方法、装置及客户端 |
CN105407481A (zh) * | 2015-10-23 | 2016-03-16 | 上海斐讯数据通信技术有限公司 | 上网数据的获取方法 |
CN105550080A (zh) * | 2015-11-26 | 2016-05-04 | 广州华多网络科技有限公司 | 一种基于Linux进行服务器程序故障注入方法、装置及系统 |
CN106155904A (zh) * | 2016-06-30 | 2016-11-23 | 浪潮(北京)电子信息产业有限公司 | 一种故障注入工具配置方法及装置 |
CN106383303A (zh) * | 2016-08-26 | 2017-02-08 | 哈尔滨工业大学 | 基于观察点与并行的故障注入模拟方法及装置 |
CN106598860A (zh) * | 2016-12-16 | 2017-04-26 | 郑州云海信息技术有限公司 | 一种多种故障注入测试方法 |
CN106776180A (zh) * | 2016-12-16 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种pcie故障注入方法及其装置及故障管理系统 |
CN106598860B (zh) * | 2016-12-16 | 2019-02-05 | 郑州云海信息技术有限公司 | 一种多种故障注入测试方法 |
CN109962885A (zh) * | 2017-12-22 | 2019-07-02 | 北京安天网络安全技术有限公司 | 物联网设备的网络安全防护方法及物联网设备 |
CN108737187A (zh) * | 2018-05-23 | 2018-11-02 | 哈尔滨工业大学 | 一种can总线故障模拟系统及故障模拟方法 |
CN108737187B (zh) * | 2018-05-23 | 2021-07-20 | 哈尔滨工业大学 | 一种can总线故障模拟系统及故障模拟方法 |
CN109542341B (zh) * | 2018-11-06 | 2022-07-19 | 网宿科技股份有限公司 | 一种读写io监测方法、装置、终端及计算机可读存储介质 |
CN109542341A (zh) * | 2018-11-06 | 2019-03-29 | 网宿科技股份有限公司 | 一种读写io监测方法、装置、终端及计算机可读存储介质 |
CN111984524A (zh) * | 2019-05-24 | 2020-11-24 | 阿里巴巴集团控股有限公司 | 故障注入方法、故障模拟方法、故障注入装置及存储介质 |
CN110673993B (zh) * | 2019-09-19 | 2023-05-05 | 聚好看科技股份有限公司 | 一种故障注入方法、平台及系统 |
CN110673993A (zh) * | 2019-09-19 | 2020-01-10 | 聚好看科技股份有限公司 | 一种故障注入方法、平台及系统 |
CN111400182A (zh) * | 2020-03-16 | 2020-07-10 | 腾讯科技(深圳)有限公司 | 故障注入方法、装置、服务器及计算机可读存储介质 |
CN111400182B (zh) * | 2020-03-16 | 2021-08-17 | 腾讯科技(深圳)有限公司 | 故障注入方法、装置、服务器及计算机可读存储介质 |
CN112270018B (zh) * | 2020-11-11 | 2022-08-16 | 中国科学院信息工程研究所 | 一种场景敏感的自动化放置钩子函数的系统及方法 |
CN112270018A (zh) * | 2020-11-11 | 2021-01-26 | 中国科学院信息工程研究所 | 一种场景敏感的自动化放置钩子函数的系统及方法 |
CN112714015A (zh) * | 2020-12-23 | 2021-04-27 | 上海科梁信息工程股份有限公司 | 通信数据故障注入方法及其系统、通信设备和存储介质 |
CN112714015B (zh) * | 2020-12-23 | 2023-08-22 | 上海科梁信息科技股份有限公司 | 通信数据故障注入方法及其系统、通信设备和存储介质 |
CN113377598A (zh) * | 2021-06-30 | 2021-09-10 | 中国电信股份有限公司 | 用于故障模拟的系统、方法、电子设备及存储介质 |
CN114968694A (zh) * | 2022-05-27 | 2022-08-30 | 深信服科技股份有限公司 | 一种硬盘故障注入方法、装置、设备及存储介质 |
CN115328814A (zh) * | 2022-10-13 | 2022-11-11 | 苏州浪潮智能科技有限公司 | 基于镜像对的故障注入方法、装置、设备和存储介质 |
CN115328814B (zh) * | 2022-10-13 | 2023-04-14 | 苏州浪潮智能科技有限公司 | 基于镜像对的故障注入方法、装置、设备和存储介质 |
CN115729724A (zh) * | 2022-11-30 | 2023-03-03 | 中电金信软件有限公司 | 故障注入方法、故障测试系统、电子设备及可读存储介质 |
CN115729724B (zh) * | 2022-11-30 | 2024-05-10 | 中电金信软件有限公司 | 故障注入方法、故障测试系统、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104331324A (zh) | MapReduce故障注入套件 | |
Sherry et al. | Rollback-recovery for middleboxes | |
Katta et al. | Ravana: Controller fault-tolerance in software-defined networking | |
Gunawi et al. | {FATE} and {DESTINI}: A framework for cloud recovery testing | |
US7613597B2 (en) | Non-intrusive method for simulation or replay of external events related to an application process, and a system implementing said method | |
CN104461865A (zh) | 云环境下分布式文件系统可靠性测试套件 | |
US7984332B2 (en) | Distributed system checker | |
Chen et al. | CoFI: Consistency-guided fault injection for cloud systems | |
Leungwattanakit et al. | Modular software model checking for distributed systems | |
van Dongen et al. | A performance analysis of fault recovery in stream processing frameworks | |
Artho et al. | Software model checking for distributed systems with selector-based, non-blocking communication | |
CN109947535A (zh) | 面向虚拟机的故障注入套件 | |
US11474930B2 (en) | Software bug reproduction | |
Hoarau et al. | FAIL-FCI: Versatile fault injection | |
Artho et al. | Using checkpointing and virtualization for fault injection | |
Leungwattanakit et al. | Model checking distributed systems by combining caching and process checkpointing | |
Zamfir et al. | Automating the debugging of datacenter applications with ADDA | |
Chen | Chronos: Finding Timeout Bugs in Practical Distributed Systems by Deep-Priority Fuzzing with Transient Delay | |
Schirgi | Architectural quality attributes for the microservices of care | |
Schmidt et al. | Transparent Fault Tolerance for Stateful Applications in Kubernetes with Checkpoint/Restore | |
Yong | Replay and distributed breakpoints in an OSF DCE environment | |
Bergen et al. | Post-debugging in large scale big data analytic systems | |
Guo et al. | Paxos made parallel | |
Lyu et al. | Monarch: A Fuzzing Framework for Distributed File Systems | |
Felgentreff et al. | Implementing record and refinement for debugging timing-dependent communication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150204 |