CN114489474A - 一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统 - Google Patents

一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统 Download PDF

Info

Publication number
CN114489474A
CN114489474A CN202111454957.XA CN202111454957A CN114489474A CN 114489474 A CN114489474 A CN 114489474A CN 202111454957 A CN202111454957 A CN 202111454957A CN 114489474 A CN114489474 A CN 114489474A
Authority
CN
China
Prior art keywords
thread
file
blocking
operation request
file operation
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.)
Granted
Application number
CN202111454957.XA
Other languages
English (en)
Other versions
CN114489474B (zh
Inventor
周继峰
孙利杰
陈松政
刘文清
杨涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan Qilin Xin'an Technology Co ltd
Original Assignee
Hunan Qilin Xin'an Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan Qilin Xin'an Technology Co ltd filed Critical Hunan Qilin Xin'an Technology Co ltd
Priority to CN202111454957.XA priority Critical patent/CN114489474B/zh
Publication of CN114489474A publication Critical patent/CN114489474A/zh
Application granted granted Critical
Publication of CN114489474B publication Critical patent/CN114489474B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明公开了一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统,本发明解决GlusterFS IO阻塞造成文件系统挂起的方法包括在服务端副本服务进程glusterfsd定时根据链表TL和链表KL检测并修复发生IO阻塞的线程;判断发生IO阻塞且无法修复的线程与总线程数的占比超过设定阈值是否成立,若不成立,则本轮处理结束;否则,杀死服务端副本服务进程glusterfsd的服务,并向客户端发送指定的断开连接事件。本发明能够在GlusterFS发生单点故障时及时将单点故障修复或者将故障副本服务与集群脱离,保障整个分布式存储集群的不受影响。

Description

一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统
技术领域
本发明涉及分布式存储技术,具体涉及一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统。
背景技术
分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。常见的分布式文件系统有GlusterFS、Ceph、FastDFS、Lustre等,它们均各有所长,其中Glusterfs是一款开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过Infiniband RDMA或Tcp/Ip方式将许多主机,通过网络互联成一个并行的网络文件系统,具有可扩展性、高性能、高可用性等特点。本文将基于GlusterFS介绍一种解决该分布式存储系统的单点IO阻塞造成集群文件系统挂载的方法。
GlusterFS分布式存储系统通常使用多台服务器共同存储数据,多副本冗余,为保障数据的一致性以及安全性,当同组冗余副本(冗余副本分布在不同主机上)在线的情况下,存储在该组副本中的文件每个写请求均必须等待同组副本写完成,方可返回,如一方挂起或长时间阻塞均会对该文件的访问造成严重影响。当阻塞的请求对应的文件类型为文件夹时,会造成整个文件夹中的文件无法访问,更严重的是,当恰好阻塞的IO为‘/’文件夹,则整个分布式存储文件系统均会挂起,无法访问。由于计算机的复杂性,在GlusterFS作为一款应用层文件系统高度依赖操作系统的基础文件系统、计算机存储介质、计算机其它硬件模块的稳定性,而这些被依赖的对象并不受GlusterFS控制,当他们发生异常时,造成部分IO请求阻塞,此时GlusterFS文件系统无法及时发现与处理,就会对整个分布式存储集群造成严重影响,虽然现有GlusterFS存在一些检测机制,但能力偏弱,根据我们实际使用上的经验发现很多场景下无法满足,无法及时检测出故障并处理。通常情况下,当分布式存储集群中某台主机的操作系统发生了IO请求挂起时,在GlusterFS中体现在服务端副本服务进程glusterfsd的io-threads xlator的fop(即文件操作)处理线程(简称fop-threads)阻塞,这种阻塞又分两种情况:部分线程阻塞、全部线程阻塞,两种情况对分布式存储造成的影响稍有不同。部分线程阻塞:操作系统仅部分IO挂起,绝大部分IO可继续访问,如果挂起的部分IO为普通文件的IO请求,则对整个分布式存储集群受到影响体现在两个方面:(a)由于IO处理线程总数是一定的,存在部分IO处理线程阻塞后,当分布式存储IO请求负载很高的时候,会导致整体性能的下降、(b)挂起IO对应的文件无法正常访问。如果挂起的IO为文件夹请求,则会导致该文件夹下的所有子文件均无法访问,严重时甚至造成整个分布式文件系统的访问阻塞,如‘/’IO挂起。全部线程阻塞:当服务端副本服务进程glusterfsd进程的io-threads xlator的文件操作处理线程全部在操作系统处理阶段挂起,即会导致io-threads xlator的所有文件操作处理线程全部阻塞,随而导致整个分布式文件系统无法访问。因此,分布式存储集群中单点IO故障对整个分布式存储集群会带来严重影响,大规模部署时,随着集群主机的数量增加,分布式存储集群发生单点硬件故障的概率也成倍增加,因此,当发生单点故障导致IO挂起时,如何快速检测与恢复单点IO故障对集群的影响,是需要亟待解决的关键问题。
参见图1,服务端副本服务进程glusterfsd进程的io-threads xlator中定义了4种优先级的文件操作请求FOP队列(简称fop-queue),所有glusterfsd下发的文件操作请求fop均会根据其优先级分发到对应的fop-queue中,4种优先级队列分别为HI、Normal、Low、Least,每个优先级fop-queue队列限制了最大可同时处理该优先级的fop请求数量,默认为12,支持单独可调整每个优先级的并发数量。io-threads xlator为增加文件操作请求fop的并发处理,定义了同时默认最大12个并发线程(FOP threads≤12),这些线程会从各优先级fop-queue中读取fop请求来执行处理,优先原则是:只要优先级更高的fop-queue不为空,则优先从更高优先级的fop-queue中取fop请求。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种解决GlusterFSIO阻塞造成文件系统挂起的方法及系统,本发明旨在弥补GlusterFS现有IO挂载检测与修复能力不足的问题,能够在GlusterFS发生单点故障时及时将单点故障修复或者将故障副本服务与集群脱离,保障整个分布式存储集群的不受影响。
为了解决上述技术问题,本发明采用的技术方案为:
一种解决GlusterFS IO阻塞造成文件系统挂起的方法,包括:
1)通过服务端副本服务进程glusterfsd定时检测并修复发生IO阻塞的线程;
2)判断发生IO阻塞且无法修复的线程与总线程数的占比超过设定阈值是否成立,若不成立,则本轮处理结束,等待指定的间隔时间后跳转执行步骤1);否则,杀死服务端副本服务进程glusterfsd的服务,结束并退出。
可选地,步骤1)中检测并修复发生IO阻塞的线程时,包括根据链表TL和链表KL来检测并修复发生IO阻塞的线程,所述链表TL由线程结构体对象iot_thread_ctx作为成员Tx以链表方式串联组成,所述线程结构体对象iot_thread_ctx用于存储IO处理线程的状态以及上下文;所述链表KL由文件信息结构体对象iot_killed作为成员Kx以链表方式串联组成,所述文件信息结构体对象iot_killed用于记录因文件操作处理线程fop-threads的发生超过规定的阻塞时间而被曾经杀死的线程对应的文件信息。
可选地,所述线程结构体对象iot_thread_ctx包括:
循环链表头list_head list,用于串联所有线程的线程结构体对象iot_thread_ctx;
线程ID id,用于跟踪对应线程,以及根据需要杀死线程;
线程处理文件操作请求编号gen,用于统计当前线程所处理的文件操作请求顺序编号,文件操作处理线程每从文件操作请求队列fop-queue取一个文件操作请求处理,则该线程的对应的文件操作请求编号gen加1;
原文件操作请求编号oldgen,用于记录上一次线程处理文件操作请求gen的数值,通过比对文件操作请求编号gen与原文件操作请求编号oldgen值以判断线程是否发生阻塞;
状态status,用于保存当前线程状态,0代表睡眠状态,线程在空闲时会进入到自主睡眠状态,自主睡眠状态下忽略文件操作请求编号gen与原文件操作请求编号oldgen的比对结果;
阻塞状态blocking_statistics,当文件操作请求编号gen与原文件操作请求编号oldgen相等、且状态status的值为1成立时,判定该线程当前处阻塞状态,阻塞状态blocking_statistics的值自增1;当线程结束阻塞状态时,阻塞状态blocking_statistics清零;
上下文*stub,用于保存对应线程正在处理的文件操作请求的上下文,用于对应文件操作请求处理线程发生超过规定的阻塞时间时,返回文件操作请求失败给上层调用。
可选地,所述文件信息结构体对象iot_killed包括:
循环链表头list_head list,用于串联所有在规定的一段时间内发生过因IO阻塞而被强制杀死并返回的文件操作请求错误对应的文件信息;
文件标记gfid,用于记录对应文件的标记gfid,标记gfid为GlusterFS文件系统对文件的标记,文件标记gfid用于文件匹配;
路径*path,用于记录对应文件的具体路径,用于文件匹配。
可选地,所述根据链表TL和链表KL来检测并修复发生IO阻塞的线程包括:
1.1)重置用于统计本轮检测阻塞线程数量的全局统计变量BTC以及全局分优先级统计数组变量blocked[PR],其中PR代表各个优先级;
1.2)检测链表KL的周期是否超期,若链表KL的周期超期,则清空链表KL中所有的成员Kx;跳转下一步;
1.3)尝试从链表TL从读取一个成员Tx,若失败则将系统io-threads xlator的总线程限制数量累加上全局统计变量BTC,将系统io-threads xlator默认各优先级PR的线程限制数量分别累加对应的全局分优先级统计数组变量blocked[PR],跳转步骤2);否则,将读取得到的成员Tx作为当前成员Tx,跳转下一步;
1.4)判断当前成员Tx的原文件操作请求编号oldgen为0是否成立,若成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,跳转下一步;
1.5)判断当前成员Tx的状态status非0、文件操作请求编号gen与原文件操作请求编号oldgen相等是否同时成立,若不同时成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,将全局统计变量BTC自增1,当前成员Tx的阻塞状态blocking_statistics自增1,根据当前成员Tx对应线程的优先级PR将对应的全局分优先级统计数组变量blocked[PR]自增1,跳转下一步;
1.6)判断当前成员Tx的阻塞状态blocking_statistics大于预设门槛值LIMIT是否成立,若不成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,跳转下一步;
1.7)杀死当前成员Tx在系统io-threads xlator中对应的线程,通知上级应用程序;
1.8)遍历链表KL,判断链表KL中是否有与被杀死的当前成员Tx对应的文件记录,若链表KL中有与当前成员Tx对应的文件记录,则杀死服务端副本服务进程glusterfsd的服务,结束并退出;否则,将被杀死线程对应的当前成员Tx的文件信息作为成员Kx记录到链表KL中;从链表TL移除被杀死的当前成员Tx,并释放被杀死的当前成员Tx的资源,跳转步骤1.3)。
可选地,步骤2)中的设定阈值不小于70%。
可选地,步骤2)中杀死服务端副本服务进程glusterfsd的服务时,还包括向客户端发送指定的断开连接事件GF_CBK_BRICK_DOWN,使得客户端断开与服务端副本服务进程glusterfsd的连接状态以避免该IO阻塞对整个GlusterFS分布式存储系统所在的分布式存储集群的正常使用造成影响。
可选地,步骤1)和步骤2)是通过服务端副本服务进程glusterfsd中的看门狗线程iot_monitor执行的,所述看门狗线程iot_monitor为服务端副本服务进程glusterfsd的进程中IO线程管理器io-threads xlator中的线程。
此外,本发明还提供一种解决GlusterFS IO阻塞造成文件系统挂起的系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行所述解决GlusterFS IO阻塞造成文件系统挂起的方法的步骤。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有用于被计算机设备执行以实施所述解决GlusterFS IO阻塞造成文件系统挂起的方法的步骤的计算机程序。
和现有技术相比,本发明具有下述优点:本发明解决GlusterFS IO阻塞造成文件系统挂起的方法包括在服务端副本服务进程glusterfsd定时根据链表TL和链表KL检测并修复发生IO阻塞的线程;判断发生IO阻塞且无法修复的线程与总线程数的占比超过设定阈值是否成立,若不成立,则本轮处理结束;否则,杀死服务端副本服务进程glusterfsd的服务。本发明方法可以使得基于GlusterFS的分布式存储集群在发生单点操作系统IO挂起故障时,能够及时被glusterfsd服务检测到,并作出相应的应对措施,保障IO挂起不会对整个分布式存储集群造成性能、可用性、稳定性等多个维度的影响,有效的提高了整个分布式存储集群系统的高可用性,大大提升了集群的稳定性。较好的避免了因为单点故障可能造成的分布式存储集群性能下降以及存储不可用的情况发生。
附图说明
图1为现有GlusterFS系统中的线程优先级示意图。
图2为本发明实施例方法的基本流程示意图。
图3为实施例中链表TL及其成员Tx的结构示意图。
图4为实施例中链表KL及其成员Kx的结构示意图。
图5为实施例中检测并修复发生IO阻塞的线程的流程示意图。
具体实施方式
如图1所示,本实施例解决GlusterFS IO阻塞造成文件系统挂起的方法包括:
1)通过服务端副本服务进程glusterfsd定时检测并修复发生IO阻塞的线程;
2)判断发生IO阻塞且无法修复的线程与总线程数的占比超过设定阈值是否成立,若不成立,则本轮处理结束,等待指定的间隔时间后跳转执行步骤1);否则,杀死服务端副本服务进程glusterfsd的服务,结束并退出。
本实施例中,步骤1)中检测并修复发生IO阻塞的线程时,包括根据链表TL和链表KL来检测并修复发生IO阻塞的线程,所述链表TL由线程结构体对象iot_thread_ctx作为成员Tx以链表方式串联组成,所述线程结构体对象iot_thread_ctx用于存储IO处理线程的状态以及上下文;所述链表KL由文件信息结构体对象iot_killed作为成员Kx以链表方式串联组成,所述文件信息结构体对象iot_killed用于记录因文件操作处理线程fop-threads的发生超过规定的阻塞时间而被曾经杀死的线程对应的文件信息(即当前fop操作的文件)。
如图3所示,本实施例中线程结构体对象iot_thread_ctx包括:
循环链表头list_head list,用于串联所有线程的线程结构体对象iot_thread_ctx;
线程ID id,用于跟踪对应线程,以及根据需要杀死线程;
线程处理文件操作请求编号gen,用于统计当前线程所处理的文件操作请求顺序编号,文件操作处理线程每从文件操作请求队列fop-queue取一个文件操作请求处理,则该线程的对应的文件操作请求编号gen加1;
原文件操作请求编号oldgen,用于记录上一次线程处理文件操作请求gen的数值,通过比对文件操作请求编号gen与原文件操作请求编号oldgen值以判断线程是否发生阻塞;
状态status,用于保存当前线程状态,0代表睡眠状态,线程在空闲时会进入到自主睡眠状态,自主睡眠状态下忽略文件操作请求编号gen与原文件操作请求编号oldgen的比对结果;
阻塞状态blocking_statistics,当文件操作请求编号gen与原文件操作请求编号oldgen相等、且状态status的值为1成立(gen=oldgen&&status=1)时,判定该线程当前处阻塞状态,阻塞状态blocking_statistics的值自增1;当线程结束阻塞状态时,阻塞状态blocking_statistics清零;
上下文*stub,用于保存对应线程正在处理的文件操作请求的上下文,用于对应文件操作请求处理线程发生超过规定的阻塞时间时,返回文件操作请求失败给上层调用。
本实施例中,线程结构体对象iot_thread_ctx中各元素的字段类型如下:
循环链表头list_head list为结构体对象struct,线程ID id为线程号pthread_t,上下文*stub为函数调用指针call_stub_t,其余字段均为uint32_t字段。
如图4所示,本实施例中文件信息结构体对象iot_killed包括:
循环链表头list_head list,用于串联所有在规定的一段时间内发生过因IO阻塞而被强制杀死并返回的文件操作请求错误对应的文件信息;
文件标记gfid,用于记录对应文件的标记gfid,标记gfid为GlusterFS文件系统对文件的标记,文件标记gfid用于文件匹配;
路径*path,用于记录对应文件的具体路径,用于文件匹配。
本实施例中文件信息结构体对象iot_killed中的循环链表头list_head list为结构体对象,文件标记gfid为UUID字段uuid_t,路径*path为char类型。
如图5所示,本实施例根据链表TL和链表KL来检测并修复发生IO阻塞的线程包括:
1.1)重置用于统计本轮检测阻塞线程数量的全局统计变量BTC以及全局分优先级统计数组变量blocked[PR],其中PR代表各个优先级;
1.2)检测链表KL的周期是否超期,若链表KL的周期超期,则清空链表KL中所有的成员Kx;跳转下一步;
1.3)尝试从链表TL从读取一个成员Tx,若失败则将系统io-threads xlator的总线程限制数量累加上全局统计变量BTC,将系统io-threads xlator默认各优先级PR的线程限制数量分别累加对应的全局分优先级统计数组变量blocked[PR],跳转步骤2);否则,将读取得到的成员Tx作为当前成员Tx,跳转下一步;
1.4)判断当前成员Tx的原文件操作请求编号oldgen为0是否成立,若成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,跳转下一步;
1.5)判断当前成员Tx的状态status非0、文件操作请求编号gen与原文件操作请求编号oldgen相等是否同时成立,若不同时成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,将全局统计变量BTC自增1,当前成员Tx的阻塞状态blocking_statistics自增1,根据当前成员Tx对应线程的优先级PR将对应的全局分优先级统计数组变量blocked[PR]自增1,跳转下一步;
1.6)判断当前成员Tx的阻塞状态blocking_statistics大于预设门槛值LIMIT是否成立,若不成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,跳转下一步;
1.7)杀死当前成员Tx在系统io-threads xlator中对应的线程,通知上级应用程序;
1.8)遍历链表KL,判断链表KL中是否有与被杀死的当前成员Tx对应的文件记录,若链表KL中有与当前成员Tx对应的文件记录,则杀死服务端副本服务进程glusterfsd的服务,结束并退出;否则,将被杀死线程对应的当前成员Tx的文件信息作为成员Kx记录到链表KL中;从链表TL移除被杀死的当前成员Tx,并释放被杀死的当前成员Tx的资源,跳转步骤1.3)。
一般而言,步骤2)中的设定阈值不小于70%,例如本实施例中取值为80%。
作为一种可选的实施方式,本实施例步骤2)中杀死服务端副本服务进程glusterfsd的服务时,还包括向客户端发送指定的断开连接事件GF_CBK_BRICK_DOWN,使得客户端断开与服务端副本服务进程glusterfsd的连接状态以避免该IO阻塞对整个GlusterFS分布式存储系统所在的分布式存储集群的正常使用造成影响。断开连接事件GF_CBK_BRICK_DOWN为本实施例中定义的一种新的事件类型,用于IO挂起修复时快速通知GlusterFS客户端及时做针对性处理。当检测到存在大量IO挂起无法及时修复时,会向客户端发送断开连接事件GF_CBK_BRICK_DOWN,客户端接收到断开连接事件GF_CBK_BRICK_DOWN后及时断开与该glusterfsd的连接状态,从而可以避免该glusterfsd阻塞对整个分布式存储集群造正常使用造成影响。
为了提高本实施例方法的可靠性,本实施例步骤1)和步骤2)是通过服务端副本服务进程glusterfsd中的看门狗线程iot_monitor执行的,所述看门狗线程iot_monitor为服务端副本服务进程glusterfsd的进程中IO线程管理器io-threads xlator中的线程。
本实施例解决GlusterFS IO阻塞造成文件系统挂起的方法可作为glusterfs源代码的源代码补丁patch,在开源的glusterfs源代码基础上增加本实施例解决GlusterFS IO阻塞造成文件系统挂起的方法的源代码补丁patch,编译后得到新版本的glusterfs软件,并用该版本部署分布式存储集群。使用本实施例解决GlusterFS IO阻塞造成文件系统挂起的方法可以使得基于GlusterFS的分布式存储集群在发生单点操作系统IO挂起故障时,能够及时被glusterfsd服务检测到,并作出相应的应对措施,保障IO挂起不会对整个分布式存储集群造成性能、可用性、稳定性等多个维度的影响,有效的提高了整个分布式存储集群系统的高可用性,大大提升了集群的稳定性。较好的避免了因为单点故障可能造成的分布式存储集群性能下降以及存储不可用的情况发生。
此外,本实施例还提供一种解决GlusterFS IO阻塞造成文件系统挂起的系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行前述解决GlusterFS IO阻塞造成文件系统挂起的方法的步骤。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有用于被计算机设备执行以实施前述解决GlusterFS IO阻塞造成文件系统挂起的方法的步骤的计算机程序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,包括:
1)通过服务端副本服务进程glusterfsd定时检测并修复发生IO阻塞的线程;
2)判断发生IO阻塞且无法修复的线程与总线程数的占比超过设定阈值是否成立,若不成立,则本轮处理结束,等待指定的间隔时间后跳转执行步骤1);否则,杀死服务端副本服务进程glusterfsd的服务,结束并退出。
2.根据权利要求1所述的解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,步骤1)中检测并修复发生IO阻塞的线程时,包括根据链表TL和链表KL来检测并修复发生IO阻塞的线程,所述链表TL由线程结构体对象iot_thread_ctx作为成员Tx以链表方式串联组成,所述线程结构体对象iot_thread_ctx用于存储IO处理线程的状态以及上下文;所述链表KL由文件信息结构体对象iot_killed作为成员Kx以链表方式串联组成,所述文件信息结构体对象iot_killed用于记录因文件操作处理线程fop-threads的发生超过规定的阻塞时间而被曾经杀死的线程对应的文件信息。
3.根据权利要求2所述的解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,所述线程结构体对象iot_thread_ctx包括:
循环链表头list_head list,用于串联所有线程的线程结构体对象iot_thread_ctx;
线程ID id,用于跟踪对应线程,以及根据需要杀死线程;
线程处理文件操作请求编号gen,用于统计当前线程所处理的文件操作请求顺序编号,文件操作处理线程每从文件操作请求队列fop-queue取一个文件操作请求处理,则该线程的对应的文件操作请求编号gen加1;
原文件操作请求编号oldgen,用于记录上一次线程处理文件操作请求gen的数值,通过比对文件操作请求编号gen与原文件操作请求编号oldgen值以判断线程是否发生阻塞;
状态status,用于保存当前线程状态,0代表睡眠状态,线程在空闲时会进入到自主睡眠状态,自主睡眠状态下忽略文件操作请求编号gen与原文件操作请求编号oldgen的比对结果;
阻塞状态blocking_statistics,当文件操作请求编号gen与原文件操作请求编号oldgen相等、且状态status的值为1成立时,判定该线程当前处阻塞状态,阻塞状态blocking_statistics的值自增1;当线程结束阻塞状态时,阻塞状态blocking_statistics清零;
上下文*stub,用于保存对应线程正在处理的文件操作请求的上下文,用于对应文件操作请求处理线程发生超过规定的阻塞时间时,返回文件操作请求失败给上层调用。
4.根据权利要求3所述的解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,所述文件信息结构体对象iot_killed包括:
循环链表头list_head list,用于串联所有在规定的一段时间内发生过因IO阻塞而被强制杀死并返回的文件操作请求错误对应的文件信息;
文件标记gfid,用于记录对应文件的标记gfid,标记gfid为GlusterFS文件系统对文件的标记,文件标记gfid用于文件匹配;
路径*path,用于记录对应文件的具体路径,用于文件匹配。
5.根据权利要求4所述的解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,所述根据链表TL和链表KL来检测并修复发生IO阻塞的线程包括:
1.1)重置用于统计本轮检测阻塞线程数量的全局统计变量BTC以及全局分优先级统计数组变量blocked[PR],其中PR代表各个优先级;
1.2)检测链表KL的周期是否超期,若链表KL的周期超期,则清空链表KL中所有的成员Kx;跳转下一步;
1.3)尝试从链表TL从读取一个成员Tx,若失败则将系统io-threads xlator的总线程限制数量累加上全局统计变量BTC,将系统io-threads xlator默认各优先级PR的线程限制数量分别累加对应的全局分优先级统计数组变量blocked[PR],跳转步骤2);否则,将读取得到的成员Tx作为当前成员Tx,跳转下一步;
1.4)判断当前成员Tx的原文件操作请求编号oldgen为0是否成立,若成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,跳转下一步;
1.5)判断当前成员Tx的状态status非0、文件操作请求编号gen与原文件操作请求编号oldgen相等是否同时成立,若不同时成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,将全局统计变量BTC自增1,当前成员Tx的阻塞状态blocking_statistics自增1,根据当前成员Tx对应线程的优先级PR将对应的全局分优先级统计数组变量blocked[PR]自增1,跳转下一步;
1.6)判断当前成员Tx的阻塞状态blocking_statistics大于预设门槛值LIMIT是否成立,若不成立,则将当前成员Tx的文件操作请求编号gen赋值给原文件操作请求编号oldgen、阻塞状态blocking_statistics清零,跳转步骤1.3);否则,跳转下一步;
1.7)杀死当前成员Tx在系统io-threads xlator中对应的线程,通知上级应用程序;
1.8)遍历链表KL,判断链表KL中是否有与被杀死的当前成员Tx对应的文件记录,若链表KL中有与当前成员Tx对应的文件记录,则杀死服务端副本服务进程glusterfsd的服务,结束并退出;否则,将被杀死线程对应的当前成员Tx的文件信息作为成员Kx记录到链表KL中;从链表TL移除被杀死的当前成员Tx,并释放被杀死的当前成员Tx的资源,跳转步骤1.3)。
6.根据权利要求1所述的解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,步骤2)中的设定阈值不小于70%。
7.根据权利要求1所述的解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,步骤2)中杀死服务端副本服务进程glusterfsd的服务时,还包括向客户端发送指定的断开连接事件GF_CBK_BRICK_DOWN,使得客户端断开与服务端副本服务进程glusterfsd的连接状态以避免该IO阻塞对整个GlusterFS分布式存储系统所在的分布式存储集群的正常使用造成影响。
8.根据权利要求1所述的解决GlusterFS IO阻塞造成文件系统挂起的方法,其特征在于,步骤1)和步骤2)是通过服务端副本服务进程glusterfsd中的看门狗线程iot_monitor执行的,所述看门狗线程iot_monitor为服务端副本服务进程glusterfsd的进程中IO线程管理器io-threads xlator中的线程。
9.一种解决GlusterFS IO阻塞造成文件系统挂起的系统,包括相互连接的微处理器和存储器,其特征在于,该微处理器被编程或配置以执行权利要求1~8中任意一项所述解决GlusterFS IO阻塞造成文件系统挂起的方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质中存储有用于被计算机设备执行以实施权利要求1~8中任意一项所述解决GlusterFS IO阻塞造成文件系统挂起的方法的步骤的计算机程序。
CN202111454957.XA 2021-12-01 2021-12-01 一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统 Active CN114489474B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111454957.XA CN114489474B (zh) 2021-12-01 2021-12-01 一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111454957.XA CN114489474B (zh) 2021-12-01 2021-12-01 一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统

Publications (2)

Publication Number Publication Date
CN114489474A true CN114489474A (zh) 2022-05-13
CN114489474B CN114489474B (zh) 2024-04-09

Family

ID=81492398

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111454957.XA Active CN114489474B (zh) 2021-12-01 2021-12-01 一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统

Country Status (1)

Country Link
CN (1) CN114489474B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017016245A (ja) * 2015-06-29 2017-01-19 富士通株式会社 ストレージシステム,ストレージ制御装置およびストレージ制御プログラム
US9612924B1 (en) * 2014-06-25 2017-04-04 Amazon Technologies, Inc. Fault tolerance in a distributed file system
US20170255642A1 (en) * 2016-01-28 2017-09-07 Weka.IO LTD Quality of Service Management in a Distributed Storage System
CN110737534A (zh) * 2019-10-29 2020-01-31 京东数字科技控股有限公司 任务的处理方法、装置和服务器
CN111078121A (zh) * 2018-10-18 2020-04-28 深信服科技股份有限公司 一种分布式存储系统数据迁移方法、系统、及相关组件
US20200278810A1 (en) * 2019-03-01 2020-09-03 Goke Taiwan Research Laboratory Ltd. Method for Mitigating Writing-Performance Variation and Preventing IO Blocking in a Solid-State Drive
CN111913667A (zh) * 2020-08-06 2020-11-10 平安科技(深圳)有限公司 一种基于Ceph的OSD阻塞检测方法、系统、终端及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9612924B1 (en) * 2014-06-25 2017-04-04 Amazon Technologies, Inc. Fault tolerance in a distributed file system
JP2017016245A (ja) * 2015-06-29 2017-01-19 富士通株式会社 ストレージシステム,ストレージ制御装置およびストレージ制御プログラム
US20170255642A1 (en) * 2016-01-28 2017-09-07 Weka.IO LTD Quality of Service Management in a Distributed Storage System
CN111078121A (zh) * 2018-10-18 2020-04-28 深信服科技股份有限公司 一种分布式存储系统数据迁移方法、系统、及相关组件
US20200278810A1 (en) * 2019-03-01 2020-09-03 Goke Taiwan Research Laboratory Ltd. Method for Mitigating Writing-Performance Variation and Preventing IO Blocking in a Solid-State Drive
CN110737534A (zh) * 2019-10-29 2020-01-31 京东数字科技控股有限公司 任务的处理方法、装置和服务器
CN111913667A (zh) * 2020-08-06 2020-11-10 平安科技(深圳)有限公司 一种基于Ceph的OSD阻塞检测方法、系统、终端及存储介质

Also Published As

Publication number Publication date
CN114489474B (zh) 2024-04-09

Similar Documents

Publication Publication Date Title
CN111901422B (zh) 一种集群中节点的管理方法、系统及装置
US10261853B1 (en) Dynamic replication error retry and recovery
EP3142011B1 (en) Anomaly recovery method for virtual machine in distributed environment
US20180267869A1 (en) Method and apparatus for processing gateway device fault
US10091215B1 (en) Client isolation in a distributed queue
CN107480014B (zh) 一种高可用设备切换方法及装置
CN109445927B (zh) 一种存储集群的任务管理方法及装置
US10819611B2 (en) Dynamic timeout-based fault detection
US20080148272A1 (en) Job allocation program, method and apparatus
CN109710456B (zh) 一种数据恢复方法及装置
CN110727508A (zh) 一种任务调度系统和调度方法
JP2013196238A (ja) バッチ処理システム
US7401256B2 (en) System and method for highly available data processing in cluster system
JP2007520003A (ja) コンピュータ障害発生時に複数のコンピュータの配列を操作する方法
CN109684130B (zh) 一种机房间数据备份的方法及装置
US9720796B2 (en) Information processing apparatus, information processing system, control method for information processing system, and medium
CN111930719B (zh) 一种数据库访问方法、装置及系统
CN111352746B (zh) 消息限流方法、存储介质
CN112667467A (zh) 集群的自适应限流方法、装置、计算机设备及存储介质
CN114489474A (zh) 一种解决GlusterFS IO阻塞造成文件系统挂起的方法及系统
Dinu et al. Hadoop’s overload tolerant design exacerbates failure detection and recovery
JP6269199B2 (ja) 管理サーバおよび障害復旧方法、並びにコンピュータ・プログラム
CN114237910A (zh) 客户端负载均衡实现方法及装置
CN115454718A (zh) 一种自动化数据库备份文件有效性检测方法
JP4485560B2 (ja) コンピュータ・システム及びシステム管理プログラム

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant