一种存储方法、设备、系统和计算机存储介质与流程

文档序号:33180676发布日期:2023-02-04 04:53阅读:35来源:国知局
一种存储方法、设备、系统和计算机存储介质与流程

1.本发明涉及计算机的文件存储技术,尤其涉及一种存储方法、设备、系统和计算机存储介质。


背景技术:

2.分布式文件系统(dfs,distributed file system)可以用于数据的存储和管理。目前,常见的分布式文件系统通常在单机文件系统的基础上,通过额外增加模块来实现数据跨服务器的分布存储,并通过共享同一命名空间来进行数据的管理。
3.在各类单机文件系统中,动态文件系统(zfs,zettabyte file system)相对于其他单机文件系统,由于结合了文件系统和设备管理等,从而能够跨越数据的物理位置。
4.然而,在分布式文件系统中,zfs无法突破自身单机文件系统的局限性,在服务可用性方面仍然有许多不足。例如,在zfs服务器宕机或故障时通常难以提供服务。


技术实现要素:

5.有鉴于此,本发明提供一种存储方法、设备、系统和计算机存储介质,以解决现有技术中zfs服务器宕机或故障时通常难以提供服务的技术问题。
6.本发明的技术方案是这样实现的:
7.第一方面,本发明实施例提供了一种存储方法,所述方法应用于接入设备中,包括:
8.在接收到针对第一文件的存储请求的情况下,向所述第一文件分配标识码;
9.利用所述第一文件的已有父目录和所述标识码,生成所述第一文件的索引号;
10.将所述第一文件的名称与所述第一文件的索引号之间的关联关系进行存储;
11.将所述第一文件和所述第一文件的索引号,发送至所述索引设备;
12.其中,所述索引设备用于在确定存储设备中用于存储所述第一文件的存储节点的标识后,将所述第一文件的索引号与所述第一文件的存储节点的标识之间的对应关系存储至所述索引设备的第一设备和第二设备中。
13.第二方面,本发明实施例提供了一种存储方法,所述方法应用于索引设备中,包括:
14.接收来自接入设备所发送的第一文件和所述第一文件的索引号;其中,所述第一文件的索引号是由接入设备利用所述第一文件的已有父目录,和所述接入设备向所述第一文件分配的标识码生成;
15.确定存储设备中,用于存储所述第一文件的存储节点的标识;
16.将所述第一文件的索引号与所述第一文件的存储节点的标识之间的对应关系进行存储于所述索引设备的第一设备和第二设备中。
17.第三方面,本发明实施例提供了一种接入设备,包括:
18.分配模块,用于在接收到针对第一文件的存储请求的情况下,向所述第一文件分
配标识码;
19.生成模块,用于利用所述第一文件的已有父目录和所述标识码,生成所述第一文件的索引号;
20.第一存储模块,用于将所述第一文件的名称与所述第一文件的索引号之间的关联关系进行存储;
21.发送模块,用于将所述第一文件和所述第一文件的索引号,发送至索引设备;
22.其中,所述索引设备用于在确定存储设备中用于存储所述第一文件的存储节点的标识后,将所述第一文件的索引号与所述第一文件的存储节点的标识之间的对应关系存储至所述索引设备的第一设备和第二设备中。
23.第四方面,本发明实施例提供了一种索引设备,包括:
24.接收模块,用于接收来自接入设备所发送的第一文件和所述第一文件的索引号;其中,所述第一文件的索引号是由接入设备利用所述第一文件的已有父目录,和所述接入设备向所述第一文件分配的标识码生成;
25.确定模块,用于确定存储设备中,用于存储所述第一文件的存储节点的标识;
26.第二存储模块,用于将所述第一文件的索引号与所述第一文件的存储节点的标识之间的对应关系存储于所述索引设备的第一设备和第二设备中。
27.第五方面,本发明实施例还提供了一种接入设备,所述接入设备包括:处理器以及存储有所述处理器可执行指令的存储介质,所述存储介质通过通信总线依赖所述处理器执行操作,当所述指令被所述处理器执行时,执行上述一个或多个实施例所述存储方法。
28.第六方面,本发明实施例还提供了一种索引设备,所述索引设备包括:处理器以及存储有所述处理器可执行指令的存储介质,所述存储介质通过通信总线依赖所述处理器执行操作,当所述指令被所述处理器执行时,执行上述一个或多个实施例所述存储方法。
29.第七方面,本发明实施例提供了一种计算机存储介质,存储有可执行指令,当所述可执行指令被一个或多个处理器执行的时候,所述处理器执行上述一个或多个实施例所述存储方法。
30.本发明所提供的一种存储方法、设备、系统和计算机存储介质,该方法包括:接入设备在接收到针对第一文件的存储请求的情况下,向第一文件分配标识码,利用第一文件的已有父目录和标识码,生成第一文件的索引号,将第一文件的名称与第一文件的索引号之间的关联关系进行存储,将第一文件和第一文件的索引号,发送至索引设备,其中,索引设备用于在确定存储设备中用于存储第一文件的存储节点的标识后,将第一文件的索引号与第一文件的存储节点的标识之间的对应关系存储至索引设备的第一设备和第二设备中;也就是说,在本发明中,接入设备在获取到存储请求为第一文件分配标识码时,通过第一文件的已有父目录与标识码生成第一文件的索引号,这样,在接入设备中就能够存储有每个文件的名称与文件的索引号之间的关联关系,有利于读取文件和修改文件,并且,将第一文件和第一文件的索引号发送至索引设备,那么,索引设备可以确定出用于存储第一文件的存储节点的标识,并将第一文件的索引号与第一文件的存储节点标识对应起来并存储至索引设备的第一设备和第二设备中,这样,当第一设备发生故障,第二设备还可以重新设置路由,保障文件的正常存储和读取,从而提高了文件存储的可靠性,进而提高了文件存储的存储效率。
附图说明
31.图1为本发明实施例中的一种可选的文件系统的结构示意图;
32.图2为本发明实施例中的一种可选的存储方法的流程交互示意图;
33.图3为本发明实施例中的一种可选的文件系统的实例的结构示意图;
34.图4为本发明实施例中的一种可选的文件系统的实例的架构示意图;
35.图5为本发明实施例中的一种可选的目录示意图;
36.图6为本发明实施例中的一种可选的raft算法的流程示意图;
37.图7为本发明实施例中的一种可选的存储方法的流程示意图;
38.图8为本发明实施例中的另一种可选的存储方法的流程示意图;
39.图9为本发明实施例中的一种可选的接入设备的结构示意图;
40.图10为本发明实施例中的一种可选的索引设备的结构示意图;
41.图11为本发明实施例中的另一种可选的接入设备的结构示意图;
42.图12为本发明实施例中的另一种可选的索引设备的结构示意图;
43.图13为本发明实施例中的一种可选的文件系统的结构示意图。
具体实施方式
44.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
45.实施例一
46.本发明实施例提供一种存储方法,该存储方法应用于文件系统中,图1为本发明实施例中的一种可选的文件系统的结构示意图,如图1所示,该文件系统可以包括:接入设备11,索引设备12和存储设备13;其中,索引设备12包括两种类型的设备,分别为第一设备121和第二设备122;其中,
47.接入设备11与索引设备12具有通信连接,接入设备11可以为用户客户端,还可以为网关服务器,在文件系统中扮演客户端的角色;索引设备12的第一设备121和第二设备122均为计算服务器,第一设备121可以为zfs服务器,第二设备122可以为index服务器,index服务器用于管理zfs服务器的路由;存储设备13通常为存储服务器,用于存储文件。
48.基于上述图1的文件系统,本发明实施例提供一种存储方法,图2为本发明实施例中的一种可选的存储的流程交互示意图,如图2所示,该存储方法可以包括:
49.s201:接入设备11在接收到针对第一文件的存储请求的情况下,向第一文件分配标识码;
50.目前,主流的分布式文件系统,在大文件读写方面皆有良好表现,性能瓶颈通常限于海量小文件读写与索引访问,而小文件读写问题也可以归结为索引设计问题。主流分布式文件系统索引大致分为两个方向,其中,集中化索引扩展性存在瓶颈,而去中心化索引又在基本性能上有所不足。主流分布式文件系统通常只能推动上层应用层面或本身在协议接入层面做小文件聚合,来在部分模型下减轻瓶颈限制。
51.同时,这些分布式系统受传统一致性算法(例如,paxos算法或multi-paxos算法)拖累,在实现paxos语义时无法同时设计高效系统,最终也无法证明设计出系统的实际安全性。在生产环境中各类主流分布式文件系统产生脑裂,丢失数据的情况屡见不鲜,而故障自
修复以保证最终一致性更是一种常态。paxos算法原理本身是具有完整安全可证明性和可推导性的,但是其最大的缺陷就是难以理解与实际实现,用在分布式文件存储中常常需要大量额外开销,最终也无法准确地保证安全性而要再次来维护最终一致性。
52.为了提高文件的存储效率,在本发明实施例中,接入设备11在接收到第一文件的存储请求之后,先为第一文件分配一个标识码,具体来说,接入设备11在接收到需要存储的第一文件时,可以按照预设的规则为第一文件生成一个标识码,例如,可以按照存储文件的序号来编码,还可以按照字母加数字来对需要存储的文件进行编号,这里,本发明实施例对此不作具体限定。
53.s202:接入设备11利用第一文件的已有父目录和标识码,生成第一文件的索引号;
54.具体来说,接入设备11为第一文件分配好标识码之后,可以利用第一文件的父目录和第一文件的标识码生成第一文件的索引号,例如,为第一文件分配的标识码为345,第一文件的父目录为f盘,那么,第一文件的索引号可以为f/345,这样,便可以得到第一文件的索引号。
55.s203:接入设备11将第一文件的名称与第一文件的索引号之间的关联关系进行存储;
56.在生成第一文件的索引号之后,可以将第一文件的名称与第一文件的索引号关联起来并存储,这样,可以保证在读取或者丢失文件时,通过文件的命名找到文件的索引号,有利于从存储设备中读取或者修改文件。
57.s204:接入设备11将第一文件的名称和第一文件的索引号,发送至索引设备;
58.其中,索引设备中通常包括多个第一设备和多个第二设备,并且,每个第二设备都管理有多个第一设备,那么,为了从索引设备的第一设备中确定出第一文件对应的设备,在一种可选的实施例中,上述方法还可以包括:
59.接入设备11向第二设备122发送针对索引设备的路由信息的获取请求;
60.第二设备122将第二设备122所管理的第一设备的路由信息确定为索引设备的路由信息,并发送至接入设备11;
61.接入设备11将接收到的索引设备的路由信息,确定为确定出的索引设备的路由信息。
62.接入设备11基于确定出的索引设备的路由信息,根据第一文件的已有父目录,从索引设备的第一设备中确定第一文件对应的设备;
63.具体来说,接入设备11向第二设备122发送针对索引设备的路由信息的获取请求,这里,需要说明的是,这里的第二设备122表示索引设备中所有的第二设备,每个第二设备下均连接有至少两个第一设备,对其进行管理,那么,第二设备122在接收到获取请求之后,将每个第二设备下的第一设备的路由信息都作为索引设备的路由信息发送至接入设备11,这样,接入设备11将接收到索引设备的路由信息,确定为确定出的索引设备的路由信息。
64.如此,通过发送获取请求的方式来确定索引设备的路由信息,使得确定出的索引设备的路由信息为有效的路由信息,以保证文件系统的正常读写。
65.在接入设备11中存储有确定出的索引设备的路由信息,由于索引设备的路由信息中存储有父目录对应的第一设备,那么,接入设备11可以从确定出的索引设备的路由信息中,确定出第一文件的父目录对应的第一设备,将第一文件的父目录对应的第一设备确定
为第一文件对应的设备。
66.需要说明的是,接入设备11中存储的确定出的索引设备的路由信息可以是有效的路由信息,也可以是失效的路由信息,为了使得确定出的索引设备的路由信息为有效的路由信息,以保证存储设备的正常读写和修改,可以采取以下任意一种方式,例如,可以通过比较路由信息的版本号来确定是否为有效路由信息,在一种可选的实施例中,上述方法还可以包括:
67.当接收到的索引设备的路由信息的版本号与已存储的索引设备的路由信息的版本号相同时,接入设备11将已存储的索引设备的路由信息确定为确定出的索引设备的路由信息;
68.当接收到的索引设备的路由信息的版本号与已存储的索引设备的路由信息的版本号不同时,接入设备11将接收到的索引设备的路由信息确定为确定出的索引设备的路由信息。
69.也就是说,接入设备11比较接收到索引设备的路由信息的版本号与已存储的索引设备的路由信息的版本号是否相同,当相同时,说明接入设备11中已存储的索引设备的路由信息为有效的路由信息,所以,接入设备11将已存储的索引设备的路由信息确定为确定出的索引设备的路由信息。
70.当不相同时,说明接入设备11中已存储的索引设备的路由信息为失效的路由信息,所以,将接入设备接收到的索引设备的路由信息确定为确定出的索引设备的路由信息。
71.这样,便可以保证确定出的索引设备的路由信息为有效的路由信息,防止接入设备使用失效的路由信息所引起的问题。
72.在接入设备11在确定出第一文件的索引号,将第一文件和第一文件的索引号发送至索引设备,以使得索引设备用于在确定存储设备中用于存储第一文件的存储节点的标识后,将第一文件的索引号与述第一文件的存储节点的标识之间的对应关系存储至索引设备的第一设备和第二设备中。
73.其中,需要说明的是,上述s203和s204之间既可以先执行s203,也可以先执行s204,还可以同时执行s203和s204,这里,本技术实施例对此做具体限定。
74.s205:索引设备12确定存储设备中,用于存储第一文件的存储节点的标识;
75.其中,上述存储节点可以包括主节点和备份节点。
76.这里,具体来说,索引设备12的第一设备在获取到第一文件和第一文件的索引号之后,从存储设备空闲的存储节点中,用于存储第一文件的存储节点的标识;其中,该存储节点可以包括主节点和备份节点,这里,需要说明的是,通常,主节点为一个,备份节点可以为2个或者3个,这里,本发明实施例对此不作具体限定。
77.s206:索引设备12将第一文件的索引号与第一文件的存储节点的标识之间的对应关系存储于索引设备12的第一设备和第二设备中;
78.具体来说,索引设备第一设备,即为从索引设备的第一设备中确定出的第一文件随影的设备,需要将第一文件的索引号与第一文件的主节点的标识和备份节点的标识之间的对应关系进行存储,这样,当用户需要读取已存储的文件时,可以通过对应关系来读取文件。
79.并且,第一设备还需要将上述对应关系发送至管理第一设备的第二设备,使得第
二设备存储有该对应关系,这样,防止当某个第一设备故障时无法读写文件的情况发生,保证了文件系统的可靠性。
80.为了提高文件系统中读写文件的一致性,在一种可选的实施例中,上述方法还包括:
81.当第一文件对应的设备接收到存储设备13针对第一文件的写入成功的回复消息时,第一文件对应的设备向接入设备11发送针对第一文件的写入成功的响应消息;
82.接入设备11接收针对第一文件的写入成功的响应消息时,生成提示信息;其中,提示信息用于提示用户第一文件存储成功。
83.也就是说,第一文件对应的设备在存储第一文件至存储设备13成功的情况下,存储设备13会向第一文件对应的设备发送针对第一文件的写入成功的回复消息,第一文件对应的设备接收到回复消息之后,发送写入成功的响应消息至接入设备11,使得接入设备11得知第一文件存储成功,接入设备11在获知存储成功之后,还会生成提示信息来提示用户第一文件存储成功。
84.当写入失败时,存储设备13不会向第一文件对应的设备发送针对第一文件的写入成功的回复消息,第一文件对应的设备也不向接入设备11发送消息,这样,当接入设备11在一段时间内没有接收到写入成功的响应消息时,确定第一文件的存储失败,此时,提示用户第一文件存储失败,那么,文件系统没有存储第一文件,如此,通过接入设备11和索引设备12之间的响应可以保证文件系统中数据的一致性。
85.针对文件系统来说,除了存储文件,还可以从文件系统中读取已存储的文件,在一种可选的实施例中,上述方法还可以包括:
86.接入设备11接收到已存储的第二文件的读取请求;
87.接入设备11根据已存储的文件的名称与文件的索引号之间的关联关系,确定第二文件的索引号;
88.接入设备11基于确定出的索引设备的路由信息,根据第二文件的已有父目录,从索引设备的第一设备中确定第二文件对应的设备;
89.接入设备11将第二文件的索引号,发送至第二文件对应的设备;
90.第二文件对应的设备根据已存储的文件的索引号与文件的存储节点的标识之间的对应关系,确定第二文件的存储节点;
91.第二文件对应的设备从第二文件的存储节点中读取第二文件。
92.为了读取已存储的第二文件,用户通过接入设备11的界面向接入设备11发送第二文件的读取请求,由于接入设备11中存储有文件的名称与文件的索引号之间的关联关系,所以,接入设备11可以确定出第二文件的索引号。
93.然后从确定出的索引设备的路由信息中确定出第二文件的已有父目录对应的第一设备,将其确定为第二文件对应的设备,并将第二文件的索引号发送至第二文件对应的设备。
94.由于第二文件对应的设备中存储有文件的索引号与文件的存储节点的标识之间的对应关系,所以,第二文件对应的设备根据该对应关系确定出,第二文件的存储节点,并从第二文件的存储节点中读取第二文件。
95.针对文件系统来说,除了存储文件,还可以从文件系统中修改已存储的文件,在一
种可选的实施例中,上述方法还可以包括:
96.当已存储的第三文件的存储节点中的主节点的数据发生改变时,接入设备11根据已存储的文件的名称与文件的索引号之间的关联关系,确定第三文件的索引号;
97.接入设备11基于确定出的索引设备的路由信息,根据第三文件的已有父目录,从索引设备的第一设备中确定第三文件对应的设备;
98.接入设备11将修改后的第三文件和第三文件的索引号,发送至第三文件对应的设备。
99.第三文件对应的设备根据已存储的文件的索引号与文件的存储节点的标识之间的对应关系,确定第三文件的存储节点中的备份节点。
100.其中,第三文件对应的设备用于根据第三文件的索引号确定第三文件的存储节点中的备份节点,第三文件的备份节点用于将所存储的数据更新为修改后的第三文件。
101.为了修改已存储的第三文件,用户通过接入设备11的修改第三文件的主节点的数据,由于接入设备11中存储有文件的名称与文件的索引号之间的关联关系,所以,接入设备11可以确定出第三文件的索引号。
102.然后,从确定出的索引设备的路由信息中确定出第三文件的已有父目录对应的第一设备,将其确定为第三文件对应的设备,并将第三文件的索引号发送至第三文件对应的设备。
103.由于第三文件对应的设备中存储有文件的索引号与文件的存储节点的标识之间的对应关系,所以,第三文件对应的设备根据该对应关系确定出,第三文件的备份节点,该第三文件的被分界点利用修改后的第三文件更新第三文件的备份节点中的数据。
104.当行文件系统发生故障时,为了保证文件系统的正常运行,在一种可选的实施例中,上述方法还可以包括:
105.当第二设备所管理的其中一个第一设备发生故障时,第二设备从第二设备所管理的其他的第一设备中选取出一个第一设备;
106.第二设备将其中一个第一设备中存储的文件的索引号与文件的存储节点的标识之间的对应关系,发送至选取出的一个第一设备并进行存储,并更新索引设备的路由信息。
107.也就是说,针对某个第二设备来说,当该第二设备所管理的其中一个第一设备发生故障时,为了保证文件系统的正常运行,第二设备先从第二设备所管理的其他的第一设备中选取出一个第一设备,并且,将预先存储的其中一个第一设备中存储的文件的索引号与文件的存储节点的标识之间的对应关系发送至选取出的一个第一设备中并进行存储。
108.这样,使得文件系统在第一设备发生故障时能够及时地利用其它的正常的第一设备来应对,保证文件系统能够应对突发状况,增加了文件系统的可靠性,提高了文件系统的读写效率。
109.下面举实例来对上述一个或多个实施例中所述的存储方法进行描述。
110.图3为本发明实施例中的一种可选的文件系统的实例的结构示意图,如图3所示,该文件系统可以包括:接入层,索引层和存储层;
111.其中,接入层可以为用户客户端或者网关服务器(posix file system client),索引层有索引集群构成,包括两种计算服务器,分别为zfsserver和indexserver,存储层有存储集群构成,包括至少两个存储服务器(zfs zpool)。
112.需要指出的是,上述三层架构之间并非绝对的1:1:1关系,存储集群是索引集群的存储资源提供者,而对接关系完全取决于对物理或逻辑故障域隔离的级别。简单举例来说,多个索引集群可以共用一套存储集群的资源,同时这些索引集群还可以向同一个接入网关提供服务。
113.一个文件写入流程:
114.第一步,接入层中的设备首先为写入文件分配分布式文件系统(dzfs,distribute zfs)中inode号(相当于标识码)。
115.第二步,接入层中的设备将写入文件的父目录(包括dzfs根目录,也包括用于划分命名空间的目录)转化为prefix_id,其自身在dzfs中的inode号转化为file_id;将两个id拼接为写入文件的索引号,将写入文件与写入文件的索引号关联起来。
116.第三步,因为接入层缓存路由,在路由未失效下,接入层中的设备可以直接将写入文件发送至写入文件对应的zfsserver;假设路由失效,则从indexserver重新获取写入文件对应的zfsserver,将写入文件下发至该zfsserver。
117.第四步,zfsserver从存储层中的空闲节点中选出主节点和冗余节点(相当于备份节点),向主节点和冗余节点同时写入文件。
118.第五步,主节点和冗余节点共同写入后,回复zfsserver写入成功。
119.第六步,zfsserver将写入文件的索引号与写入文件的主节点的标识和冗余节点的标识对应起来并存储。
120.第七步,zfsserver回复接入层写入完成,接入层回复用户写入完成。
121.一个文件读出流程:
122.第一步:接入层中的设备获取读取文件的命名,确定读取文件的索引号,将读取文件的索引号发送至读取文件的对应的zfsserver;
123.第二步,zfsserver根据读取文件的索引号,确定读取文件的主节点的标识和/或冗余节点的标识,并从zfs zpool读取文件。
124.图4为本发明实施例中的一种可选的文件系统的实例的架构示意图,如图4所示,接入层负责文件语义的解析,将应用对文件与目录操作的语义转化为对本dzfs后端索引层和存储层可识别的语义。在公有云环境下还要负责多租户的隔离等,这一层通常是无状态的,业界普遍支持的是nfsv4接口和smb2.0等。
125.索引层负责在分布式架构上对本地文件系统的目录和文件概念进行仿生,通常是多租户(multi-tenancy)共享的。这种架构的好处在于:
126.索引数据分离,索引更多是增强的中央处理单元(cpu-intensive,central processing unit-intensive),而数据则是增强的输入/输出(io-intensive,input/output-intensive)的,两者不同的硬件要求可以让他们在更有针对性的硬件下分别做最具性价比的部署,分别做向外扩展(scale out),也便于做独立的架构演进。如果混着存就可能存在这样的问题:数据占用的存储池使用率还很低但是索引消耗很大必须扩容,整体的资源利用率就下降了。
127.降低索引和io干扰:元数据操作在整个文件系统操作中实际上占大头,比如,内容分发网络(cdn,content delivery network)的回源使用的head请求在大多数情况下并不需要访问数据,这在多租户场景下表现尤为明显,如果索引和数据共存很容易导致索引密
集型应用干扰了io,使得两者的性能表现都下降。
128.更适合支持弹性架构:比如在索引和数据共存的场景下,就很难表示一个超大文件(例如,pb级别),而在分离架构下,根据数据的访问模型可以较为方便地做数据调度等操作。
129.存储层是数据高可靠和高可用的保障,还必须考虑业务系统对io访问模式的需求,考虑到文件存储需要的随机io需要比较高效地实现。zfs已经是单机文件存储,兼具统筹磁盘管理可靠性,可用性顶级的文件系统,所以存储层设计更多考虑分布式可用性与一致性。
130.下面对每一层展开来说:
131.针对接入层来说,主要有两点:协议层(protocal layer)会进行协议的语义转化,例如,上述nfsv4或smb2.0协议;接入层、索引层与存储层各层间通信通过通用远程过程调用(rpc,remote procedure call)框架完成。
132.针对索引层来说,在实现上,将目录和文件索引两部分分别实现,称为diridx和fileidx。在索引数据的持久化上,将这两部分切分存储。
133.diridx由indexserver负责,依赖外部数据库存储持久化,即使海量小文件场景,diridx规模也并不显得庞大,在外部的分布式数据库(distribute db,distribute data base)上可以高效地存取,同时下文将解释接入层访问indexserver的索引频率不会很高。
134.fileidx由zfsserver负责,由各存储节点zfs本身持久化,同时indexserver管理文件到父目录(包括命名空间根目录)为止的一级索引。
135.dzfs中每个文件都会被分配所属命名空间中的唯一编号(相当于传统文件存储的inode号),dzfs使用文件父目录(包括命名空间根目录)编号作为prefix_id,使用文件本身编号作为file_id,prefix_id/file_id作为在整个命名空间中索引的唯一键值。
136.diridx仅描述目录项存在依据,及用作目录项下子文件的实时分配依据。在客户端创建目录后,diridx将被indexserver的数据库记录,其中,主键即为目录项唯一id,数据库条目中将包含其子文件路由实时分配。通俗得说,新创建的目录将被indexserver分配给不同zfsserver,一旦在集群正常运行中确认zfsserver,客户端对此目录本身及子文件操作将直接沟通zfsserver进行。
137.图5为本发明实施例中的一种可选的目录示意图,如图5所示,包含目录/dir0/dirx/,dir0/diry/,/dir0/diry/dileα/,/dir1/,/dir2/file0/;多个子目录被划分至多个zfsserver处理。由以上以diridx中唯一编号为key的路由设计可知,客户端读写文件必可获取prefix_id,通过prefix_id即可获取路由,从而最终实现数据分布的目的。
138.索引层更详细描述:
139.节点发现:indexserver和zfsserver之间的租约心跳(heartbeat)由indexserver发起,这样可以让indexserver不需要将服务暴露给zfsserver,而由zookeeper等一些外部服务发现类应用来保障节点发现。所以indexserver需要记录当前集群内允许服务的zfsserver列表,只有在此列表中的zfsserver才允许服务。
140.路由维护:正常情况下,indexserver需要保证一个叶子目录只被一台zfsserver服务,需要通过比如租约机制来维护这个路由表的正确性。客户端获取到的路由只会有两种情况:一种是路由正确:通常情况下路由没有变动,客户端维护的路由表和indexserver
维护的是一样的。另一种是路由过期:indexserver对diridx的路由进行了调度,导致客户端维护的路由表过期了。
141.在客户端初次获取到某个子目录的路由之后不需要定期和indexserver通信以获取最新路由,因为在和zfsserver的常态通信中会校验出来路由是否过期,这样,indexserver的压力不会很大。同时,由于子目录路由单个条目仅标识单个目录对zfsserver的路由,对客户端缓存压力也是极低的。zfsserver和indexserver之间通过实现租约,以防止出现网络分区后有zfsserver能够主动退出服务。
142.zfsserver是关键io链路上的核心模块,通过和底层存储的交互,将数据写入到存储节点上。zfsserver的架构特点是无状态,它通过底层存储层模块与zfs实现客户端文件和文件属性的持久化,保证数据的高可靠性。
143.路由调度:indexserver仅在以下情况下发生路由调度:一种情况是目录分裂:若单个子目录热度过高与子文件数过高目录将发生分裂,通过与客户端相同的语义切分目录并改变文件key为prefix_id/num/file_id以达到分布的目的。热度与使用量由zfsserver经租约心跳上报。另一种情况是目录迁移:若整体zfsserver热度用量不平衡,将目录路由迁移至空闲zfsserver(包含了新加入zfsserver)。同上由租约心跳上报。还有一种情况是zfsserver服务异常:由zfsserver自身租约心跳上报退出,或客户端超时而调度。其他情况是网络异常,网络分区等等。
144.indexserver高可用:由上述indexserver访问压力很小,故同样通过zookeeper等外部服务发现来实现主备的结构,只有主indexserver可以更新(update)数据库,而从indexserver仅享有询问(query)数据库权力来维护自己的缓存空间以利于异常时迅速切换。
145.附加服务:文件系统附加服务如quota,qos,快照等租户功能在分布式文件系统内部可统归于对目录文件的属性进行设置,本发明实施例这种对目录索引单独提取的设计在实现这些功能方面均可实现。
146.也就是说,索引层以唯一id为主键的数据库索引同时还实现了list的高效(大小范围list)。综上此实现满足了索引分离,索引io干扰减少等目的。
147.针对存储层来说,通过zfs单机文件系统已经实现文件存储需要的高效随机io和高可靠性。存储层还需要通过额外的模块来实现高可用,通常分布式文件系统使用冗余来保障,由此引入raft作为冗余时的一致性算法。
148.由上述diridx在索引时索引单个zfsserver,zfsserver在基于此diridx的子文件写入时会选择存储层单机zfs进程,此目录在此zfs上视作主副本,由zfs进程控制发起向其他节点的副本写入与同步。在副本写入完成后,此主zfs单机将回复zfsserver此文件复制到了哪些节点,zfsserver在内存中为此文件索引记录复制节点。在无异常情况下,文件读取仅通过主副本。
149.存储层最重要的实现即是通过raft维护副本间一致性。raft是一种维护复制状态机一致性的算法,通过改造zfs事务层面,实现副本间一致性,图6为本发明实施例中的一种可选的raft算法的流程示意图,如图6所示,有赖于zfs是一种事务型文件存储系统,在raft接入方面留有入口,同时写时复制(cow)形式的存储又可以保证事务日志(log)操作的幂等,故将存储层zfs事务处理改造为分布式一致性较为简单。
150.冗余同步写入:
151.如图6所示,
152.①
zfs将事务提交raft节点。
153.②
raft记录wal log以持久化对事务空间的操作(例如x=1),节点大多数持久化后可提交状态机应用这些操作。
154.③
raft statemachine转化提交状态应用操作,对zfs的事务log存放空间(含缓存)进行操作。(log空间内容如:x:9;y:22;z:33,在应用次操作后变为:x:1;y:22;z:33)。
155.④⑤
zfs本身的事务流程,以事务log保证文件io的原子性。
156.异步snapshot保存zfs的事务log,此snapshot由raft控制生成与获取,用作raft wal log compaction以避免raft wal log无限增长。
157.可见,整个过程通过zfs本身的事务流程保证的原子性,利用raft提供的算法安全性,来达成最终的分布式一致性。
158.数据迁移:如上述所述路由调度,无论何种情况触发索引层diridx调度都会引发数据迁移,在目录新调度至的zfsserver可通过租约与路由过期提示开始数据迁移,但上述zfs的cow特性,数据迁移的开销对集群性能影响很小。
159.文件索引:fileidx与文件信息和属性由zfs zpool自身维护,由prefix_id/file_id扁平化的元数据存储将发挥极高的性能。以prefix_id/file_id作为主要标识后,zfs pool中的文件将无需再通过目录树区分目录,而是通过prefix_id作为list依据,prefix_id/file_id作为直接索引依据,这是极为高效的。
160.附加服务:利用zfs本身特性对prefix_id的list进行附加服务,效率极高。
161.可见,基于此三层架构设计,dzfs系统可屏蔽单模块单节点故障。
162.举例来说,存储层存储节点zfs zpool故障,首先会被其消费者所有zfsserver感知,zfsserver可以将其目前维护的所有文件索引修改为其他zfs zpool节点成为主节点,来继续提供正常的服务。接着zfsserver会对这些新的主节点发送通知消息,通知对涉及的文件重新选出一个副节点存储。(例如从仅剩的两副本重新恢复成三副本)。
163.索引层zfsserver故障,将被indexserver感知,重新分发其维护的路由(diridx)到未故障的zfsserver节点。zfsserver仅需要简单访问所有存储层节点,就可以针对通过如上文所述prefix_id方式立即收集齐所有现应维护的文件的索引。
164.索引层indexserver故障,将被zookeeper等服务感知,通知从属indexserver切换成为主,并从数据库query获取最新的路由分配继续维护索引层路由分配。
165.接入层客户端或网关故障,这其实由用户应用自行管理,本提案dzfs索引层显然支持多客户端接入,故接入层多路径构建即可。
166.从三层对接角度来说,接入层根据命名空间不同,可以将文件分配至不同索引集群,一个命名空间的故障,不会影响另一个命名空间。而不同索引集群可以采用不同冗余设置,由indexserver维护此设置。例如,使用同样一套存储集群物理资源的两个索引集群,一个可以设置二副本冗余,一个可以设置纠删码冗余,因为在向存储层发送写入时包含了冗余设置信息。
167.本发明所提供的一种存储方法,该方法包括:在接入设备接收到针对第一文件的存储请求的情况下,向第一文件分配标识码,利用第一文件的已有父目录和标识码,生成第
一文件的索引号,将第一文件的名称与第一文件的索引号之间的关联关系进行存储,将第一文件和第一文件的索引号,发送至索引设备,其中,索引设备用于在确定存储设备中用于存储第一文件的存储节点的标识后,将第一文件的索引号与第一文件的存储节点的标识之间的对应关系存储至索引设备的第一设备和第二设备中;也就是说,在本发明中,接入设备在获取到存储请求为第一文件分配标识码时,通过第一文件的已有父目录与标识码生成第一文件的索引号,这样,在接入设备中就能够存储有每个文件的名称与文件的索引号之间的关联关系,有利于读取文件和修改文件,并且,将第一文件和第一文件的索引号发送至索引设备,那么,索引设备可以确定出用于存储第一文件的存储节点的标识,并将第一文件的索引号与第一文件的存储节点标识对应起来并存储至索引设备的第一设备和第二设备中,这样,当第一设备发生故障,第二设备还可以重新设置路由,保障文件的正常存储和读取,从而提高了文件存储的可靠性,进而提高了文件存储的存储效率。
168.实施例二
169.下面以文件系统中所部署的各个设备侧对上述存储方法进行说明。
170.首先,以接入设备侧对存储方法进行描述。
171.本发明实施例提供一种存储方法,该方法应用于接入设备中,图7为本发明实施例中的一种可选的存储方法的流程示意图,如图7所示,该存储方法可以包括:
172.s701:在接收到针对第一文件的存储请求的情况下,向第一文件分配标识码;
173.s702:利用第一文件的已有父目录和标识码,生成第一文件的索引号;
174.s703:将第一文件的名称与第一文件的索引号之间的关联关系进行存储;
175.s704:将第一文件和第一文件的索引号,发送至索引设备的第一设备;
176.其中,索引设备用于在确定存储设备中用于存储第一文件的存储节点的标识后,将第一文件的索引号与第一文件的存储节点的标识之间的对应关系存储至索引设备的第一设备和第二设备中。
177.在一种可选的实施例中,上述方法还包括:
178.向第二设备发送针对索引设备的路由信息的获取请求;
179.接收到来自第二设备发送的索引设备的路由信息;
180.当接收到的索引设备的路由信息的版本号与已存储的索引设备的路由信息的版本号相同时,将已存储的索引设备的路由信息确定为确定出的索引设备的路由信息;
181.当接收到的索引设备的路由信息的版本号与已存储的索引设备的路由信息的版本号不同时,将接收到的索引设备的路由信息确定为确定出的索引设备的路由信息;
182.基于确定出的索引设备的路由信息,根据第一文件的已有父目录,从所述索引设备的第一设备中确定第一文件对应的设备。
183.在一种可选的实施例中,上述方法还包括:
184.接收到来自第一文件对应的设备发送的针对第一文件的写入成功的响应消息时,生成提示信息;其中,提示信息用于提示用户第一文件存储成功。
185.在一种可选的实施例中,上述方法还包括:
186.接收到已存储的第二文件的读取请求;
187.根据已存储的文件的名称与文件的索引号之间的关联关系,确定第二文件的索引号;
188.基于确定出的索引设备的路由信息,根据第二文件的已有父目录,从索引设备的第一设备中确定第二文件对应的设备;
189.将第二文件的索引号,发送至第二文件对应的设备;
190.其中,第二文件的索引号用于:第二文件对应的设备确定第二文件的存储节点并读取第二文件。
191.在一种可选的实施例中,上述方法还包括:
192.当已存储的第三文件的存储节点中主节点的数据发生改变时,根据已存储的文件的名称与文件的索引号之间的关联关系,确定第三文件的索引号;
193.基于确定出的索引设备的路由信息,根据第三文件的已有父目录,从索引设备的第一设备中确定第三文件对应的设备;
194.将修改后的第三文件和第三文件的索引号,发送至第三文件对应的设备;
195.其中,第三文件对应的设备用于根据第三文件的索引号确定第三文件的存储节点中的备份节点,第三文件的备份节点用于将所存储数据更新为修改后的第三文件。
196.然后,以索引设备侧对存储方法进行描述。
197.本发明实施例提供一种存储方法,该方法应用于索引设备中,图8为本发明实施例中的另一种可选的存储方法的流程示意图,如图8所示,该方法可以包括:
198.s801:接收来自接入设备所发送的第一文件和第一文件的索引号;
199.其中,第一文件的索引号是由接入设备利用第一文件的已有父目录,和接入设备向第一文件分配的标识码生成;
200.s802:确定存储设备中,用于存储第一文件的存储节点的标识;
201.s803:将第一文件的索引号与第一文件的存储节点的标识之间的对应关系存储于索引设备的第一设备和第二设备中。
202.在一种可选的实施例中,上述方法还包括:
203.当接收到存储设备针对第一文件的写入成功的回复消息时,向接入设备发送针对第一文件的写入成功的响应消息;其中,响应消息用于接入设备提示用户所述第一文件存储成功。
204.在一种可选的实施例中,上述方法还包括:
205.当接入设备接收到已存储的第二文件的读取请求时,第一设备接收到第二文件的索引号;
206.第一设备根据已存储的文件的索引号与文件的存储节点的标识之间的对应关系,确定第二文件的存储节点;
207.第一设备从第二文件的存储节点中读取第二文件。
208.在一种可选的实施例中,上述方法还包括:
209.当已存储的第三文件的存储节点中的主节点的数据发生修改时,第一设备接收来自接入设备发送的修改后的第三文件和第三文件的索引号;
210.第一设备根据已存储的文件的索引号与文件的存储节点的标识之间的对应关系,确定第三文件的存储节点中的备份节点;
211.其中,第三文件的备份节点用于:将所存储的数据更新为修改后的第三文件。
212.在一种可选的实施例中,所述方法还包括:
213.第二设备接收到来自接入设备针对索引设备的路由信息的获取请求;
214.第二设备将第二设备所管理的第一设备的路由信息确定为索引设备的路由信息,并发送至接入设备。
215.在一种可选的实施例中,所述方法还包括:
216.当第二设备所管理的其中一个第一设备发生故障时,第二设备从第二设备所管理的其他的第一设备中选取出一个第一设备;
217.第二设备将其中一个第一设备中存储的文件的索引号与文件的存储节点的标识之间的对应关系,发送至选取出的一个第一设备并进行存储,并更新索引设备的路由信息。
218.基于前述实施例相同的发明构思,本发明实施例提供一种接入设备,与上述一个或多个实施例提供的所述接入设备一致。
219.图9为本发明实施例中的一种可选的接入设备的结构示意图,如图9所示,该接入设备包括:
220.分配模块91,用于在接收到针对第一文件的存储请求的情况下,向第一文件分配标识码;
221.生成模块92,用于利用第一文件的已有父目录和标识码,生成第一文件的索引号;
222.第一存储模块93,用于将第一文件的名称与第一文件的索引号之间的关联关系进行存储;
223.发送模块94,用于将第一文件的名称和第一文件的索引号,发送至索引设备;
224.其中,索引设备用于在确定存储设备中用于存储第一文件的存储节点的标识后,将第一文件的索引号与第一文件的存储节点的标识之间的对应关系存储至索引设备的第一设备和第二设备中。
225.在一种可选的实施例中,上述接入设备还用于:
226.向第二设备发送针对索引设备的路由信息的获取请求;
227.接收到来自第二设备发送的索引设备的路由信息;
228.当接收到的索引设备的路由信息的版本号与已存储的索引设备的路由信息的版本号相同时,将已存储的索引设备的路由信息确定为确定出的索引设备的路由信息;
229.当接收到的索引设备的路由信息的版本号与已存储的索引设备的路由信息的版本号不同时,将接收到的索引设备的路由信息确定为确定出的索引设备的路由信息;
230.基于确定出的索引设备的路由信息,根据第一文件的已有父目录,从索引设备的第一设备中确定第一文件对应的设备。
231.在一种可选的实施例中,上述接入设备还用于:
232.接收到来自第一文件对应的设备发送的针对第一文件的写入成功的响应消息时,生成提示信息;其中,提示信息用于提示用户所述第一文件存储成功。
233.在一种可选的实施例中,上述接入设备还用于:
234.接收到已存储的第二文件的读取请求;
235.根据已存储的文件的名称与文件的索引号之间的关联关系,确定第二文件的索引号;
236.基于确定出的索引设备的路由信息,根据第二文件的已有父目录,从索引设备的第一设备中确定第二文件对应的设备;
237.将第二文件的索引号,发送至第二文件对应的设备;
238.其中,第二文件的索引号用于:第二文件对应的设备确定第二文件的存储节点并读取所述第二文件。
239.在一种可选的实施例中,上述接入设备还用于:
240.当已存储的第三文件的存储节点中的主节点的数据发生改变时,根据已存储的文件的名称与文件的索引号之间的关联关系,确定第三文件的索引号;
241.基于确定出的索引设备的路由信息,根据第三文件的已有父目录,从索引设备的第一设备中确定第三文件对应的设备;
242.将修改后的第三文件和第三文件的索引号,发送至第三文件对应的设备;
243.其中,第三文件对应的设备用于根据第三文件的索引号确定第三文件的存储节点中的备份节点,第三文件的备份节点用于将所存储数据更新为修改后的第三文件。
244.在实际应用中,上述分配模块91,生成模块92,第一存储模块93和发送模块94可由位于接入设备上的处理器实现,具体为中央处理器(cpu,central processing unit)、微处理器(mpu,microprocessor unit)、数字信号处理器(dsp,digital signal processing)或现场可编程门阵列(fpga,field programmable gate array)等实现。
245.本发明实施例提供一种第一设备,与上述一个或者多个实施例中所述的第一设备一致。
246.图10为本发明实施例中的一种可选的索引设备的结构示意图,如图10所示,该索引设备包括:
247.接收模块101,用于接收来自接入设备发送的第一文件和第一文件的索引号;其中,第一文件的索引号是由接入设备利用第一文件的已有父目录,和接入设备向第一文件分配的标识码生成;
248.确定模块102,用于确定存储设备中,用于存储第一文件的存储节点的标识;
249.第二存储模块103,用于将第一文件的索引号与第一文件的存储节点的标识之间的对应关系存储于索引设备的第一设备和第二设备中。
250.在一种可选的实施例中,上述第一设备还用于:
251.当接收到存储设备针对第一文件的写入成功的回复消息时,向接入设备发送针对第一文件的写入成功的响应消息;其中,响应消息用于接入设备提示用户第一文件存储成功。
252.在一种可选的实施例中,上述的第一设备还用于:
253.当接入设备接收到已存储的第二文件的读取请求时,接收到第二文件的索引号;
254.根据已存储的文件的索引号与文件的存储节点的标识之间的对应关系,确定第二文件的存储节点;
255.从所述第二文件的存储节点中读取第二文件。
256.在一种可选的实施例中,上述第一设备还用于:
257.当已存储的第三文件的存储节点中的主节点的数据发生改变时,接收来自接入设备发送的修改后的第三文件和第三文件的索引号;
258.根据已存储的文件的索引号与文件的存储节点的标识之间的对应关系,确定第三文件的存储节点中的备份节点;
erasable programmable read-only memory,eeprom)、快闪存储器(flash memory)、磁表面存储器、光盘、或只读光盘(compact disc read-only memory,cd-rom)等存储器。
276.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
277.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
278.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
279.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
280.以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1