1.本发明属于共享文件系统技术领域,具体涉及一种共享文件系统实现方法、系统、介质及设备。
背景技术:
2.目前,云中基于块存储构建的共享文件系统,只是简单的使用块存储作为其数据盘,没有结合云中块存储的优势发挥应有的性能,共享文件系统与块存储有各自的存储机制,导致读写放大、读写io路径长、时延大,这决定了它不会有好的性能;另外它的一致性的保障是需要块存储和共享文件系统双方来共同保证的,可靠性不高。
技术实现要素:
3.为了克服上述技术缺陷,本发明第一个方面,提供了一种共享文件系统实现方法,包括步骤:
4.构造文件系统请求;
5.根据所述文件系统请求从路由缓存中获取路由;
6.向所述文件系统请求中追加期望路由节点;
7.根据所述期望路由节点对服务端发起调用;
8.所述服务端依据所述文件系统请求的类型,进行调用键值对存储完成共享文件系统操作或者将对共享文件系统的操作转换为对chunk的操作。
9.作为本发明的进一步改进,所述服务端依据所述文件系统请求的类型,进行调用键值对存储meta完成或者将对共享文件系统的操作转换为对chunk的操作的步骤,包括如下步骤:
10.当所述文件系统请求为所述元数据类操作时,则调用键值对存储完成共享文件元数据操作;
11.当所述文件系统请求为所述数据读写类操作时,则将对共享文件系统的操作转换为对chunk的操作。
12.作为本发明的进一步改进,根据所述文件系统请求从路由缓存中获取路由时,如未对路由进行缓存,则调用该共享文件系统对应的文件系统元数据键值存储获取需要的文件的数据信息,并缓存该路由。
13.作为本发明的进一步改进,如果文件系统请求为更新类的请求时,还包括如下步骤:
14.当共享文件系统开启客户端排他写锁时,将向键值对存储进行该客户端的写锁请求;
15.若锁处于占用状态,则调用”客户端排他写锁”,成功后重新发起调用;
16.获取锁失败时即刻返回错误信息。
17.作为本发明的进一步改进,所述将对共享文件系统的操作转换为对chunk的操作
的步骤,包括如下步骤:
18.进行chunk路由,向真实路由节点(其值为当前chunk的leader)对应的chunk server发起请求,并在请求中的response返回真实路由节点参数;
19.执行读写操作;
20.根据返回参数真实路由节点,与该请求的期望路由节点进行对比,不相同时建议路由更新单元进行路由更新。
21.作为本发明的进一步改进,在所述服务端依据所述文件系统请求的类型,进行调用键值对存储meta完成或者将对共享文件系统的操作转换为对chunk的操作的步骤前,还包括如下步骤:
22.在键值对存储中写入wal和对应的重做日志。
23.本发明第二个方面,提供了一种共享文件系统,包括:客户端和服务端;
24.所述客户端包括:
25.文件系统请求构造单元,用于构造文件系统请求;
26.路由缓存单元,用于缓存路由;
27.文件系统路由单元,根据所述文件系统请求从路由缓存中获取路由,并向所述文件系统请求中追加期望路由节点;
28.文件系统调用单元,用于根据所述期望路由节点对服务端发起调用;
29.路由更新单元,用于在返回参数真实路由节点与请求的期望路由节点不相同时,进行路由更新;
30.所述服务端包括:
31.文件系统api接口,为所述客户端与所述服务端的接口;
32.文件系统请求处理单元,用于接收所述文件系统请求,并对所述文件系统请求进行处理;
33.锁处理单元,如果所述文件系统请求为更新类的请求时,当共享文件系统开启客户端排他写锁时,用于将向kv进行该client的lock请求;若锁处于占用装填,用于调用”客户端排他写锁”释放锁并重新发起调用;
34.事务处理单元,用于在键值对存储中写入wal和对应的重做日志;
35.文件系统操作处理单元,当所述文件系统请求为所述元数据类操作时,用于调用键值对存储meta完成;当所述文件系统请求为所述数据读写类操作时,用于将对共享文件系统的操作转换为对chunk的操作;
36.chunk路由单元,用于向真实路由节点(其值为当前chunk的leader)对应的chunk server发起请求,并在请求的response中返回真实路由节点参数;
37.chunk调用单元,用于执行读写操作。
38.本发明的第三个方面,提供了一种计算机可读存储介质,其特征在于,所述可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述的共享文件系统实现方法。
39.本发明的第四个方面,提供了一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由所述处理器加载并执行以实现上述的
共享文件系统实现方法。
40.与现有技术相比,本发明具有以下有益效果:本方法根据文件系统请求的类型,进行不同的处理,为预路由提供了基础,由于在路由阶段预判了chunk路由的选择,故能在共享文件服务器上本地完成读写操作,io路径段,时延短。
附图说明
41.下面结合附图对本发明的具体实施方式作进一步详细的说明,其中:
42.图1为实施例1所述共享文件系统实现方法的流程图;
43.图2为实施例2所述共享文件系统的结构示意图;
44.图3为实施例2所述服务端与chunk服务器的布置示意图;
45.图4为实施例4所述计算机设备的结构示意图。
具体实施方式
46.以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
47.名称解释
[0048][0049][0050]
实施例1
[0051]
本实施例公开了一种共享文件系统实现方法,如图1所示,包括步骤:
[0052]
s1、构造文件系统请求,请求中包含fs,inode,操作(read/write),offset等信息。
[0053]
s2、根据文件系统请求从路由缓存中获取路由,如未对路由进行缓存,则调用该共享文件系统对应的共享文件系统元数据键值存储获取需要的文件的数据信息,由fs inode
‑
>fileid
‑
>chunkid可以获得对应的chunk,路由算法为fs_node=leader(chunk),并缓存该路由。
[0054]
s3、向文件系统请求中追加期望路由节点,并添加至请求队列。
[0055]
s4、调用单元从请求队列中获取请求,根据期望路由节点对服务端发起调用。
[0056]
s5、共享文件系统的服务端接收、分析和处理文件系统请求。
[0057]
s6、如果文件系统请求为更新类的请求时,当共享文件系统开启客户端排他写锁时,将向键值对存储进行该客户端的写锁请求;若当前有客户端占用锁,新的客户端无法获取锁,则调用”客户端排他写锁”释放锁并重新发起调用;获取锁失败时即刻返回错误信息,在上层应用为master
‑
slave结构时,通过本步骤能解决master容灾或飘移发生双写的问题。
[0058]
s7、在键值对存储中写入wal和对应的重做日志,由于共享文件系统的原数据类操作和读写类操作是分离的,为了保证共享文件系统的一致性和可靠性,在操作是总是在键值对存储中写入wal和对应的重做日志,以保证共享文件系统的完整性和可靠性,当事务未被成功提交时(如断电、坏道、磁盘满等原因),共享文件系统可根据未提交的实物的重做日志进行共享文件系统的恢复。
[0059]
s8、服务端依据文件系统请求的类型,进行调用键值对存储完成共享文件系统操作或者将对共享文件系统的操作转换为对chunk的操作,当文件系统请求为元数据类操作时,则调用键值对存储完成共享文件系统元数据操作;当文件系统请求为数据读写类操作时,则将对共享文件系统的操作转换为对chunk的操作;服务端依据文件系统请求的类型,进行调用键值对存储meta完成或者将对共享文件系统的操作转换为对chunk的操作。
[0060]
s9、进行chunk路由,向真实路由节点(其值为当前chunk的leader)对应的chunk服务器发起请求,并在请求中的response向客户端返回真实路由节点参数;
[0061]
s10、执行读写操作;
[0062]
s11、客户端根据返回参数真实路由节点,与该请求的期望路由节点进行对比,不相同时建议路由更新单元进行路由更新,使得共享文件系统具备自愈和自我优化能力。
[0063]
综上所述,本实施例的共享文件系统实现方法具有以下技术效果:
[0064]
1、基于分布式块存储,无需虚拟机进行搭建,提供云内审的开箱急用的共享文件系统服务:
[0065]
基于虚拟主机搭建的共享文件简单的使用块存储作为其数据盘,性能较低,其它应用服务器使用此共享文件系统时,要确保共享文件系统先于应用启动,后于应用停止。本共享文件系统结合分布式块存储底层机制,每个chunk服务器都对应一个共享文件系统的服务端,与chunk服务器进行了有机的结合,实现了云内生的开箱即用的高性能共享文件系统服务。
[0066]
2、元数据存储和文件数据分类,自反馈的预路由实现自愈的高性能文件系统:
[0067]
元数据的分离使得共享文件系统客户端可以通过接口形式获取,为预路由提供了基础,由于共享文件系统在路由阶段预判了chunk路由的选择,故而均能在共享文件系统的服务端上本地完成读写操作,io路径短,时延短;
[0068]
不同于普通使用虚拟机集群实现的共享文件系统,共享文件系统写一致性需要由应用(如nfs)和块存储双重保证,本共享文件系统写一致性由块存储chunk服务器的写一致性唯一保证;
[0069]
元数据具有读多写少的特点,而文件数据则根据具体场景不同而有不同的特点,分离的设计可以根据不同的特点使用不同的块存储设备,进一步优化性能。
[0070]
共享文件系统的读写操作除了完成正常流程外,请求中总会带上预判路由节点,响应中会追加实际路由节点,如果两者不相同时,表明其依赖的块存储的存储拓扑发生了改变,这时客户端通过重新获取路由,继续保证高效的读写,为客户端赋予了自愈能力。
[0071]
3、使用wal和重做日志实现共享文件系统的可靠性和完整性:
[0072]
由于本共享文件系统采用了元数据存储与文件数据分离的方式,为了使得元数据信息与文件数据保持一致性,采用了通常用于数据库的wal与重做日志技术,并引入事务处理单元实现。当由于断电、磁盘溢出等故障时,可通过重做日志技术进行回滚到事务开始时
的状态,以实现共享文件系统的可靠性和完整性。
[0073]
4、共享文件系统提供锁定客户端写的能力,放置master
‑
slave类型的上层应用双写:
[0074]
通常共享文件系统只实现poxis协议功能。但本共享文件系统考虑到云平台中有不少使用共享文件系统的master
‑
slave结构的应用,并且通常master只能运行一个而形成单点,为了解决单点引入keep
‑
alive、当机迁移机制,而这些判断机制总存在误判的情况,导致会启动两个master对共享文件系统同时写入,虽然共享文件系统本身是允许的,而这通常是这类应用所不允许的。为此,本共享文件系统可通过设置提供锁定客户端的能力,通过获取/释放客户端锁,共享系统在执行写操作时检查当前客户端是否获取对应的锁来阻止双写,从根本上解决了双写的问题。
[0075]
实施例2
[0076]
本实施例提供了一种共享文件系统。如图2和图3所示,共享文件系统包括:客户端和服务端,服务端和chunk服务器一起部署,两者数量保持一致。客户端包括:文件系统请求构造单元、路由缓存单元、文件系统路由单元、文件系统调用单元和路由更新单元,服务器包括:文件系统api接口、文件系统请求处理单元、锁处理单元、事务处理单元、文件系统操作处理单元、chunk路由单元和chunk调用单元。其中,文件系统请求构造单元用于构造文件系统请求;路由缓存单元用于缓存路由;文件系统路由单元根据文件系统请求从路由缓存中获取路由,并向文件系统请求中追加期望路由节点;文件系统调用单元用于根据期望路由节点对服务端发起调用;路由更新单元用于在返回参数真实路由节点与请求的期望路由节点不相同时,进行路由更新;文件系统api接口为客户端与服务端的接口;文件系统请求处理单元用于接收文件系统请求,并对文件系统请求进行处理;锁处理单元在文件系统请求为更新类的请求时,且当共享文件系统开启客户端排他写锁时,将向键值对存储系统发起该客户端的写锁请求;若锁处于占用状态,用于调用“客户端释放排他写锁”释放锁,成功后重新发起调用;事务处理单元用于在键值对存储中写入wal和对应的重做日志;文件系统操作处理单元在文件系统请求为元数据类操作时,用于调用键值对存储完成共享文件系统元数据操作;当文件系统请求为数据读写类操作时,用于将对共享文件系统的操作转换为对chunk的操作;chunk路由单元用于向真实路由节点(其值为当前chunk的leader)对应的chunk服务器发起请求,并在请求的响应中返回真实路由节点参数;chunk调用单元用于执行读写操作。
[0077]
实施例3
[0078]
本实施例提供了一种计算机可读存储介质,可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现实施例1中的共享文件系统实现方法。
[0079]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件
可以分布在计算机可读存储介质上,计算机可读存储介质可以包括计算机可读存储介质(或非暂时性介质)和通信介质(或暂时性介质)。
[0080]
如本领域普通技术人员公知的,术语计算机可读存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机可读存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd
‑
rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
[0081]
实施例4
[0082]
本实施例提供了一种计算机设备,如图4所示,计算机设备包括处理器和存储器,存储器中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现实施例1中的共享文件系统实现方法。
[0083]
应当理解的是,处理器可以是中央处理单元(central processing unit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field
‑
programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0084]
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,故凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
转载请注明原文地址:https://doc.8miu.com/read-1719039.html