一种已打开文件的关闭方法、计算机设备和存储介质与流程

文档序号:22428678发布日期:2020-10-02 10:06阅读:192来源:国知局
一种已打开文件的关闭方法、计算机设备和存储介质与流程

本申请涉及分布式对象存储技术领域,尤其涉及一种已打开文件的关闭方法、计算机设备和存储介质。



背景技术:

网络文件系统(networkfilesystem,以下简称nfs)是freebsd支持的文件系统中的一种,它允许网络中的计算机之间通过tcp/ip网络共享资源;因具较好的稳定性和可扩展性,被广泛的应用与分布式存储领域,如存储服务集群通过nfs服务向用户提供数据服务。用户能够在客户端上访问存储服务集群中的数据,例如用户在客户端上打开某个文件并进行读写操作。

现有nfs服务所使用的nfsv3协议中,nfs服务端不会主动关闭已打开的文件。只有在清除缓存、删除文件时才会执行关闭操作。clustertrivialdatabase,轻量级的集群数据库实现,以下简称ctdb,用以管理nfs服务端节点成员执行恢复/故障切换,ip重新定位以及监控管理服务的状态。具体地在透明故障切换时,ctdb的虚拟ip地址飘移到新的nfs服务端后,原有nfs服务端打开的文件不会主动关闭,新的nfs服务端又会打开正在进行读写的文件,此时会导致第一个客户端访问该文件后,另外一个客户端再对该文件进行写操作时认为多客户端同时访问一个文件,由缓存写变为直写,性能降低,而第一个客户端已经结束了访问。严重影响了客户端的写性能,甚至数据不一致。



技术实现要素:

基于此,有必要针对上述技术问题提供一种已打开文件的关闭方法、计算机设备和存储介质。

根据本发明的一方面,提供了一种已打开文件的关闭方法,所述方法包括:

nfs服务端与客户端建立传输控制协议链接;

所述nfs服务端接收所述客户端发送的文件打开指令和文件关闭指令,并根据所述文件打开指令和所述文件关闭指令创建已打开文件链表;

响应于所述nfs服务端销毁所述传输控制协议链接,则所述nfs服务端根据所述已打开文件链表向所述客户端发送第一文件关闭请求;

所述客户端接收并响应所述第一文件关闭请求以进行文件关闭操作。

在其中一个实施例中,所述方法还包括:

nfs服务端获取客户端正在使用文件信息,并根据所述客户端正在使用文件信息对所述已打开文件链表进行标记,以得到标记后的已打开文件链表;

nfs服务端创建关闭文件线程,并利用所述关闭文件线程和标记后的已打开文件链表按照第一预设时间间隔向所述客户端发送第二文件关闭请求;

所述客户端接收并响应所述第二文件关闭请求以进行文件关闭操作。

在其中一个实施例中,所述nfs服务端获取客户端正在使用文件信息,并根据所述客户端正在使用文件信息对所述已打开文件链表进行标记,以得到标记后的已打开文件链表的步骤包括:

nfs服务端根据所述已打开文件链表向所述客户端发送第一文件使用状态查询请求;

客户端响应所述第一文件使用状态查询请求以得到第一查询结果,并将所述第一查询结果返回至所述nfs服务端,其中,所述第一查询结果包括正在使用文件和未使用文件;

nfs服务端利用所述第一查询结果对所述已打开文件链表进行标记。

在其中一个实施例中,所述第一预设时间间隔为三十秒。

在其中一个实施例中,所述nfs服务端接收所述客户端发送的文件打开指令和文件关闭指令,并根据所述文件打开指令和所述文件关闭指令创建已打开文件链表的步骤包括:

所述nfs服务端创建空链表;

所述nfs服务端根据所述文件打开指令确定第一文件信息,以及根据所述文件关闭指令确定第二文件信息;

nfs服务端根据所述第一文件信息向所述空链表中增加文件信息,以及根据所述第二文件信息从空链表中删除文件信息,以得到所述已打开文件链表。

在其中一个实施例中,所述文件关闭指令包括清除缓存和删除文件。

在其中一个实施例中,所述方法还包括:

nfs服务端按照第二预设时间间隔和所述已打开文件链表向所述客户端发送第二文件使用状态查询请求,其中,所述第二查询结果包括正在使用文件和未使用文件;

客户端响应所述第二文件使用状态查询请求以得到第二查询结果,并将所述第二查询结果返回至所述nfs服务端;

nfs服务端根据所述第二查询结果确定文件未使用的时长,以得到长时间未使用文件;

nfs服务端向所述客户端发送第三文件关闭请求以关闭所述长时间未使用文件。

在其中一个实施例中,所述客户端为多个,且所述已打开文件链表中包括每一客户端的ip信息。

本发明的又一方面,还提供了一种计算机设备,该计算机设备包括:

至少一个处理器;以及

存储器,存储器存储有可在处理器上运行的计算机程序,处理器执行程序时执行前述的已打开文件的关闭方法。

本发明的再一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时执行前述的已打开文件的关闭方法。

上述已打开文件的关闭方法、计算机设备和存储介质,通过在nfs服务端与客户端建立连接后,创建已打开文件链表,并在传输协议连接销毁时由nfs服务端主动向客户发送文件关闭请求,有效的避免了因nfs服务端高可用时进行透明故障切换导致的多个客户端同时访问一个文件,保证了客户端与存储服务集群的数据一致性,且不会影响到客户端的读写性能。

附图说明

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

图1为本发明一个实施例中已打开文件的关闭方法流程示意图;

图2为本发明另一个实施例中已打开文件的关闭方法流程示意图;

图3为本发明又一个实施例中步骤210的子流程示意图;

图4为本发明又一个实施例中已打开文件的关闭方法流程示意图;

图5为本发明另一个实施例中已打开文件的关闭方法流程示意图;

图6为本发明另一个实施例中算机设备的内部结构图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

请参照如图1所示,本申请提供的一种已打开文件的关闭方法,具体的该方法包括以下步骤:

s110,nfs服务端与客户端建立传输控制协议链接。

其中,nfs服务端是由ctdb管理,设置有多个nfs服务节点,ctdb通过设置虚拟ip与nfs服务节点建立连接。传输控制协议链接即为tcp链接,通过tcp链接用户能够在客户端上访问存储服务集群中的数据,客户端是指用户侧使用的设备例如计算机,例如用户在计算机上打开并编辑存储服务集群中的文件。

s120,nfs服务端接收客户端发送的文件打开指令和文件关闭指令,并根据文件打开指令和文件关闭指令创建已打开文件链表。

其中,文件打开指令是指客户端发出了打开存储服务集群中某一文件的命令,例如cache_inode_open;文件关闭指令是指客户端发出了关闭存储服务集群中某一个件的命令,例如cache_inode_close;较佳的,文件关闭指令包括清除缓存和删除文件。

s130,响应于nfs服务端销毁传输控制协议链接,则nfs服务端根据已打开文件链表向客户端发送第一文件关闭请求;

其中,销毁传输控制协议链接是指ctdb进行ip切换时,会发送rst报文,nfs服务端收到rst报文后,从而关闭tcp链接,例如使用gsh_xprt_unref命令销毁xprt。

s140,客户端接收并响应第一文件关闭请求以进行文件关闭操作。

上述已打开文件的关闭方法,通过在nfs服务端与客户端建立连接后,创建已打开文件链表,并在传输协议连接销毁时由nfs服务端主动向客户发送文件关闭请求,有效的避免了因nfs服务端高可用时进行透明故障切换导致的多个客户端同时访问一个文件,保证了客户端与存储服务集群的数据一致性,且不会影响到客户端的读写性能。

在又一个实施例中,请参照图2所示,与前一个实施例不同的是由客户端正在使用文件时第一文件关闭请求无法将已打开文件关闭,本实施例提供的已打开文件的关闭方法,还包括以下步骤:

s210,nfs服务端获取客户端正在使用文件信息,并根据客户端正在使用文件信息对已打开文件链表进行标记,以得到标记后的已打开文件链表。

具体的,请参照图3所示,以上步骤210包括以下子步骤:

s211,nfs服务端根据已打开文件链表向客户端发送第一文件使用状态查询请求。

s212,客户端响应第一文件使用状态查询请求以得到第一查询结果,并将第一查询结果返回至nfs服务端,其中,第一查询结果包括正在使用文件和未使用文件。

s213,nfs服务端利用第一查询结果对已打开文件链表进行标记。

举例来说,在实施过程中已打开文件链表记录了客户端当前已打开的文件信息,可以通过已打开文件链表中设置需要关闭标识,例如当前已打开文件链表中有文件1和文件2,通过查询后确定客户端正在使用文件2,则在已打开文件链表的文件2的需要关闭标识设置为真。

s220,nfs服务端创建关闭文件线程,并利用关闭文件线程和标记后的已打开文件链表按照第一预设时间间隔向客户端发送第二文件关闭请求;较佳的第一预设时间间隔为三十秒,可以理解的是第一预设时间可以是其它数值,在实施过程中用户可根据实际需求进行设置。

其中,关闭文件线程具有唤醒状态和等待状态,当已打开文件链表中存在需要关闭标识设置为真情形时该线程立即被唤醒,直到已打开文件链表中所有文件都被关闭后关闭文件线程则进入等待状态。

s230,客户端接收并响应第二文件关闭请求以进行文件关闭操作。

需要特别说明的是以上步骤s210-s230应当是步骤s140之后执行,即nfs服务端优先使用第一文件关闭请求关闭已打开的文件,再使用关闭文件线程进行关闭。

上述已打开文件的关闭方法,通过服务端主动查询客户端已打开的文件的使用状态,并利用关闭文件线程将客户端剩余未关闭的文件关闭,解决第一文件关闭请求不能关闭正在使用文件的问题,保证了客户端已打开的文件能够全部被关闭。

在又一个实施例中,请参照图4所示,在前述实施例的基础上,步骤120具体可以通过以下方式实施:

s310,nfs服务端创建空链表。

s310,nfs服务端根据文件打开指令确定第一文件信息,以及根据文件关闭指令确定第二文件信息。

s310,nfs服务端根据第一文件信息向空链表中增加文件信息,以及根据第二文件信息从空链表中删除文件信息,以得到已打开文件链表。

举例来说,在实施过程中,当执行cache_inode_open打开一个文件时,将该文件加入已打开文件链表中,cache_inode_close操作时,将该文件从已打开文件链表中删除,从而保证了nfs服务端能够动态的了解当前客户已经打开的文件数量以及信息。

在另一个实施例中,请参照图5所述,与前述实施例不同,为了提升客户端的读写性能,nfs服务端主动对客户端上长时间不使用的文件进行关闭,提供了一种已打开文件的关闭方法,具体的该方法包括:

nfs服务端按照第二预设时间间隔和已打开文件链表向客户端发送第二文件使用状态查询请求,其中,第二查询结果包括正在使用文件和未使用文件;

客户端响应第二文件使用状态查询请求以得到第二查询结果,并将第二查询结果返回至nfs服务端;

nfs服务端根据第二查询结果确定文件未使用的时长,以得到长时间未使用文件;

nfs服务端向客户端发送第三文件关闭请求以关闭长时间未使用文件。

上述已打开文件的关闭方法,nfs服务端实现了自动的对客户端已打开文件的使用状态进行监控,能够主动的长时间为使用的文件关闭,有效的提升了客户端的读写性能,可减少透明故障切换时进行集中关闭的数量,保证了透明故障的正常切换。

应该理解的是,虽然图1-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在又一个实施例中,请参照图提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现以上所述的已打开文件的关闭方法。

根据本发明的又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上所述的已打开文件的关闭方法。

最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,已打开文件的关闭方法的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

此外,根据本发明实施例公开的方法还可以被实现为由处理器执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被处理器执行时,执行本发明实施例公开的方法中限定的上述功能。

此外,上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储介质实现。

此外,应该明白的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。作为例子而非限制性的,非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦写可编程rom(eeprom)或快闪存储器。易失性存储器可以包括随机存取存储器(ram),该ram可以充当外部高速缓存存储器。作为例子而非限制性的,ram可以以多种形式获得,比如同步ram(dram)、动态ram(dram)、同步dram(sdram)、双数据速率sdram(ddrsdram)、增强sdram(esdram)、同步链路dram(sldram)、以及直接rambusram(drram)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。

结合这里的公开所描述的各种示例性逻辑块、模块和电路可以利用被设计成用于执行这里功能的下列部件来实现或执行:通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。通用处理器可以是微处理器,但是可替换地,处理器可以是任何传统处理器、控制器、微控制器或状态机。处理器也可以被实现为计算设备的组合,例如,dsp和微处理器的组合、多个微处理器、一个或多个微处理器结合dsp和/或任何其它这种配置。

结合这里的公开所描述的方法或算法的步骤可以直接包含在硬件中、由处理器执行的软件模块中或这两者的组合中。软件模块可以驻留在ram存储器、快闪存储器、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动盘、cd-rom、或本领域已知的任何其它形式的存储介质中。示例性的存储介质被耦合到处理器,使得处理器能够从该存储介质中读取信息或向该存储介质写入信息。在一个替换方案中,存储介质可以与处理器集成在一起。处理器和存储介质可以驻留在asic中。asic可以驻留在用户终端中。在一个替换方案中,处理器和存储介质可以作为分立组件驻留在用户终端中。

在一个或多个示例性设计中,功能可以在硬件、软件、固件或其任意组合中实现。如果在软件中实现,则可以将功能作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质来传送。计算机可读介质包括计算机存储介质和通信介质,该通信介质包括有助于将计算机程序从一个位置传送到另一个位置的任何介质。存储介质可以是能够被通用或专用计算机访问的任何可用介质。作为例子而非限制性的,该计算机可读介质可以包括ram、rom、eeprom、cd-rom或其它光盘存储设备、磁盘存储设备或其它磁性存储设备,或者是可以用于携带或存储形式为指令或数据结构的所需程序代码并且能够被通用或专用计算机或者通用或专用处理器访问的任何其它介质。此外,任何连接都可以适当地称为计算机可读介质。例如,如果使用同轴线缆、光纤线缆、双绞线、数字用户线路(dsl)或诸如红外线、无线电和微波的无线技术来从网站、服务器或其它远程源发送软件,则上述同轴线缆、光纤线缆、双绞线、dsl或诸如红外线、无线电和微波的无线技术均包括在介质的定义。如这里所使用的,磁盘和光盘包括压缩盘(cd)、激光盘、光盘、数字多功能盘(dvd)、软盘、蓝光盘,其中磁盘通常磁性地再现数据,而光盘利用激光光学地再现数据。上述内容的组合也应当包括在计算机可读介质的范围内。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

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