发明内容
本发明提供一种文件存储系统、数据调度方法及数据节点,能够加快数据写入速度。
为达到上述目的,本发明采用如下技术方案:
第一方面,本发明实施例提供一种文件存储系统,所述文件存储系统的服务器侧包括:
名字节点、主数据节点和至少一个备份数据节点;
所述主数据节点和至少一个备份数据节点共享第一分布式存储子系统,所述第一分布式存储子系统包括一个主存储设备和至少一个备份存储设备;
其中,所述主数据节点,用于接收客户端发送的写操作指令,所述写操作指令中包括待写入数据;将所述待写入数据写入第一分布式存储子系统中;并且向第一备份数据节点发送更新请求,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息;
所述备份数据节点,用于接收更新请求;根据所述更新请求中的待写入数据在所述第一分布式存储子系统中的存储位置以及所述待写入数据的属性信息,在所述第一分布式存储子系统中查找所述待写入数据;当查找到所述待写入数据时,保存所述待写入数据的属性信息。
结合第一方面,在第一方面的第一种实现方式中,所述主数据节点对所述第一分布式存储子系统的操作权限为允许进行读写操作;所述备份数据节点对所述第一分布式存储子系统的操作权限为仅允许进行读操作。
第二方面,本发明实施例还提供了一种数据调度方法,该方法应用于如第一方面所述的文件存储系统中,所述方法包括:
主数据节点接收客户端发送的写操作指令,所述写操作指令中包括待写入数据;
所述主数据节点将所述待写入数据写入第一分布式存储子系统中;
所述主数据节点向第一备份数据节点发送更新请求,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息。
结合第二方面,在第二方面的第一种实现方式中,所述待写入数据的属性信息包括所述待写入数据的名称以及大小。
结合第二方面或者第二方面的第一种实现方式,在第二方面的第二种实现方式中,所述方法还包括:
当第一数据节点发生故障时,恢复发生故障的数据节点的系统文件,得到恢复后的数据节点,所述第一数据节点为所有数据节点中的任意一个;
将所述第一分布式子系统挂载至所述恢复后的数据节点。
第三方面,本发明实施例还提供了一种数据调度方法,包括:
备份数据节点接收更新请求,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息;
所述备份数据节点根据所述待写入数据在所述第一分布式存储子系统中的存储位置以及所述待写入数据的属性信息,在所述第一分布式存储子系统中查找所述待写入数据;
当查找到所述待写入数据时,所述备份数据节点保存所述待写入数据的属性信息。
第四方面,本发明实施例提供了一种数据节点,包括:
接收模块,用于接收客户端发送的写操作指令,所述写操作指令中包括待写入数据;
写电路,用于将所述待写入数据写入第一分布式存储子系统中;
发送模块,用于向第一备份数据节点发送更新请求,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息。
结合第四方面,在第四方面的第一种实现方式中,所述待写入数据的属性信息包括所述待写入数据的名称以及大小。
第五方面,本发明实施例还提供了一种数据节点,包括:
接收模块,用于接收更新请求,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息;
处理模块,用于根据所述待写入数据在所述第一分布式存储子系统中的存储位置以及所述待写入数据的属性信息,在所述第一分布式存储子系统中查找所述待写入数据;
存储模块,用于当查找到所述待写入数据时,所述备份数据节点保存所述待写入数据的属性信息。
本发明提供的文件存储系统,多个数据节点共享一个分布式存储子系统,且该分布式存储子系统包括一个主存储设备和至少一个备份存储设备,能够实现数据在各个存储设备之间的互相备份。在利用该文件存储系统进行写数据时,主数据节点将待写入数据写入第一分布式存储子系统,然后向第一备份数据节点发送更新请求以通知第一备份数据节点待写入数据的属性信息以及待写入数据的存储位置,第一备份数据节点根据该更新请求仅需要查看第一分布式存储子系统,确定第一分布式存储子系统中已经写入了待写入数据后,保存更新请求中的待写入数据的属性信息,便完成了对待写入数据的写过程。与现有技术中,所有数据节点都需要将待写入数据分别写入其对应的分布式存储系统相比,本发明提供的数据调度的方法,虽然存在多个数据节点,但实际只有一个数据节点进行了数据写入第一分布式操作系统的过程,其余数据节点则利用数据本地化特性,查看共享的分布式存储子系统,能够减少数据在各个数据节点之间的网络传输和存储时间,进而加快数据写入速度。
具体实施方式
下面将结合本实施例中的附图,对本实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种文件存储系统,如图2所示,包括:客户端21和服务器群22。其中,客户端包括分布式文件系统(Distributed FileSystem)模块211和文件系统数据输出流(FSData OutputStream)模块212。服务器群采用主从结构,包括名字节点221、主数据节点222和至少一个备份数据节点223;其中,主数据节点和至少一个备份数据节点共享第一分布式存储子系统224,所述第一分布式存储子系统224包括一个主存储设备2241和至少一个备份存储设备2242。
其中,服务器群中的各个节点(包括名字节点、主数据节点和备份数据节点)在物理实现上可相当于一个服务器。分布式存储子系统以虚拟设备的方式提供给各个数据节点,在各个数据节点上体现为虚拟磁盘,对分布式子系统的读写类似于对本地物理磁盘的读写。而在物理实现上,分布式子系统包括多个物理存储设备,例如:多个硬盘;多个物理存储设备之间的数据能够实现互相备份。
第一分布式存储子系统能够在各个数据节点之间实现共享。各个数据节点对第一分布式存储子系统的操作权限可以不加限定,也可以进行特殊的规定。可选的,主数据节点222对第一分布式存储子系统224的操作权限为允许进行读写操作;备份数据节点223对所述第一分布式存储子系统224的操作权限为仅允许进行读操作。
由于多个数据节点共享第一分布式存储子系统,因而当某个数据节点发生故障时,仅需要恢复发生故障的数据节点的系统文件,得到恢复后的数据节点,然后将第一分布式子系统挂载至恢复后的数据节点,即可实现该数据节点下第一分布式存储子系统中的数据的恢复,而不需要采用复制数据的方式进行数据恢复,提高数据恢复的效率。
需要说明的是,本发明实施例提供的文件存储系统,各个数据节点除了共享该第一分布式存储子系统外,每个数据节点还可能分别独立对应分布式存储子系统,相对于第一分布式存储子系统可以被所有数据节点共享,某个数据节点对应的分布式存储子系统只有该数据节点本身具有读写权限。
基于上述文件存储系统,本发明实施例提供了一种数据调度方法,如图3所述,该方法包括:
301:主数据节点接收客户端发送的写操作指令。
其中,所述写操作指令中包括待写入数据。
302:主数据节点将所述待写入数据写入第一分布式存储子系统中。
在本步骤的具体实现过程中,主数据节点接收到待写入数据后,将待写入数据转发到分布式存储子系统内部,触发分布式存储子系统的写操作流程,分布式存储子系统将待写入数据写到主物理磁盘,同时发送复制请求给备份磁盘,备份磁盘再复制主物理磁盘的数据并保存,实现备份磁盘与主物理磁盘之间的数据的备份。
303:主数据节点向名字节点发送通知消息,向客户端发送应答消息。
当主数据节点成功将数据写入分布式存储子系统后,表明写完数据,则该主数据节点向名字节点发送通知消息以告知名字节点已经写完待写入数据,并向客户端发送应答消息以告知客户端已经根据客户端发送的命令完成数据的写入。
304:主数据节点向第一备份数据节点发送更新请求。
这是本发明实施例提供的数据调度方法与现有技术的一个不同之处。现有技术中,主数据节点将数据写入分布式存储系统中后,会向第一备份数据节点发送写请求,该写请求中携带有待写入数据,第一备份数据节点收到该写请求后需要将该请求中携带的待写入数据写入到其自身对应的一个独立的分布式存储子系统中,这样才算完成了第一备份数据节点的写数据过程。
而在本发明中,该更新请求仅包括待写入数据在第一分布式存储子系统中的存储位置和待写入数据的属性信息,例如:待写入数据的名称以及大小等。更新请求中包含的信息相当于待写入数据的索引信息,并不包括待写入数据本身。这样,第一备份数据节点根据该更新请求可以从相应的位置查找到待写入数据即可,省去了主数据节点与第一备份数据节点之间的数据传输的过程,以及第一备份数据节点将待写入数据进行写的整个过程。
305:备份数据节点接收更新请求。
其中,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息。
本步骤中所指的备份数据节点包括前述步骤中所指的第一备份数据节点。
如果需要将待写入数据在2个数据节点之间实现备份,则文件存储系统中仅包括主数据节点和第一备份数据节点。
如果需要将待写入数据在2个以上的数据节点之间实现备份(一般为在3个数据节点之间实现备份),则文件存储系统中除了主数据节点和第一备份数据节点外,可能还包括第二备份数据节点、第三备份数据节点等。这种情况下,采用流水处理的过程,前一数据节点写完后,向后一数据节点发送更新请求。例如:主数据节点将待写入数据写入分布式存储系统中后,向第一备份数据节点发送更新请求;第一备份数据节点完成数据写入后,向第二备份数据节点发送更新请求,依此类推。
306:备份数据节点根据待写入数据在第一分布式存储子系统中的存储位置以及待写入数据的属性信息,在第一分布式存储子系统中查找所述待写入数据。
307:当查找到待写入数据时,备份数据节点保存所述待写入数据的属性信息。
308:备份数据节点向名字节点发送通知消息,向客户端发送应答消息。
备份数据节点仅需要保存待写入数据的属性信息,便完成了对待写入数据的写入过程。当备份数据节点完成数据写入后,向名字节点发送通知消息,向客户端发送应答消息。
需要说明的是,图3中仅示出了文件存储系统中包括主数据节点和第一备份数据节点的时候,数据调度的具体实现过程;当文件存储系统中还包括其他备份数据节点时,其余备份数据节点的操作过程同第一备份数据节点,图3中并未示出。
本发明实施例提供的文件存储系统,多个数据节点共享一个分布式存储子系统,且该分布式存储子系统包括一个主存储设备和至少一个备份存储设备,能够实现数据在各个存储设备之间的互相备份。在利用该文件存储系统进行写数据时,主数据节点将待写入数据写入第一分布式存储子系统,然后向第一备份数据节点发送更新请求以通知第一备份数据节点待写入数据的属性信息以及待写入数据的存储位置,第一备份数据节点根据该更新请求仅需要查看第一分布式存储子系统,确定第一分布式存储子系统中已经写入了待写入数据后,保存更新请求中的待写入数据的属性信息,便完成了对待写入数据的写过程。与现有技术中,所有数据节点都需要将待写入数据分别写入其对应的分布式存储系统相比,这样本发明提供的数据调度的方法,虽然存在多个数据节点,但实际只有一个数据节点进行了数据写入第一分布式操作系统的过程,其余数据节点则利用数据本地化特性,查看共享的分布式存储子系统,能够减少数据在各个数据节点之间的网络传输和存储时间,进而加快数据写入速度。
此外,现有技术中,当需要通过多个数据节点实现数据备份时,待写入数据除了需要在多个数据节点之间进行传输;分布式存储子系统内部也要实现数据备份,因而数据还要在分布式存储子系统内部的多个存储设备之间进行传输,因而容易带来网络热点问题,造成网络瓶颈。且每个数据节点都要读取全部待写入数据并保存,占用的存储空间较大,进而带来较大的存储开销。
而本发明实施例中,尽管存在多个互相备份的数据节点,但实际上只有一个数据节点进行了真正的写数据的过程,其余数据节点仅仅是利用数据本地化特性,通过共享的分布式存储系统实现本地请求数据,能够减少各个数据节点之间传输的数据量,减少传输开销;此外,由于仅由第一个数据节点进行了待写入数据的读写并将待写入数据保存在第一分布式存储系统中,其余数据节点无需再保存待写入数据,因此还能够减少占用的存储空间,进而节省服务器群的存储开销。
结合实际应用,本发明实施例还提供了一个数据调度的具体实现过程,如图4所示,包括:
401:客户端的DistributedFileSystem模块向名字节点发起RPC请求。
所述远程过程调用协议(Remote Procedure Call Protocol,RPC)请求,用于在文件系统的命名空间中创建一个新的文件。
402:名字节点接收到RPC请求后,创建新文件。
需要说明的是,在执行本步骤之前,名字节点首先检查要创建的文件是否已经存在,创建者是否有权限进行操作,如果不存在要创建的文件且创建者有权限进行操作,才会执行本步骤以及后续步骤;否则会让客户端抛出异常,结束文件读写的过程。
下述步骤403至步骤407为数据写入过程。
403:客户端的DFSOutputStream模块将数据分成块,写入数据队列(data queue)中,并通知名字节点分配数据节点。
其中,Data queue由DFSOutputStream模块中的Data Streamer子模块读取。数据节点用来存储数据块,分配的数据节点放在一个管道(pipeline)里。
404:客户端的Data Streamer子模块将数据块写入pipeline中的主数据节点。
其中,该主数据节点为pipeline中的第一个数据节点。
与此同时,客户端的DFSOutputStream模块为发出去的数据块保存了ack queue,等待pipeline中的每个数据节点告知数据已经写入成功。
405:主数据节点触发分布式存储子系统的写流程。
在该步骤的具体实现过程中,首先将数据写到主物理磁盘,同时发送复制请求给备磁盘,实现分布式存储设备上多备份数据(默认复制3份)写入。
406:主数据节点将数据写入分布式存储子系统中后,向名字节点发送通知消息,向客户端发送应答消息,向备份数据节点发送更新请求。
在本步骤的具体实现过程中,主数据节点不再需要向备份数据节点发送数据块,而只是发送更新请求,由此进入“更新层”的处理过程。
需要说明的是,本步骤中所指的备份数据节点为第一备份数据节点,图4中还示出了第二备份数据节点,则第一备份数据节点在完成数据的写入操作后,还要向第二备份数据节点发送更新请求。
还需要说明的是,除了下述步骤的处理过程以外,更新层还可以包括其他处理过程。
407:备份数据节点收到更新请求后,根据更新请求中的消息内容刷新共享的分布式存储子系统,当读取到数据块的信息时,保存数据块的属性信息等,即完成数据块的写入过程,当完成数据块的写入后,向名字节点发送通知消息,向客户端返回响应消息。
当pipeline中的所有数据节点都完成数据的写入,akc quene把对应的数据包移除掉。
重复上述过程,Data Streamer把剩余的数据包都刷到pipeline里然后等待ack信息,收到最后一个ack后,通知元数据节点写入完毕。
当客户端完成所有数据块的写入操作后,调用stream的close方法关闭写入流。
作为数据调度方法的具体应用,如图5所示,本发明实施例提供了一种数据节点,包括:
接收模块501,用于接收客户端发送的写操作指令,所述写操作指令中包括待写入数据。
写电路502,用于将所述待写入数据写入第一分布式存储子系统中;
发送模块503,用于向名字节点发送通知消息,向客户端发送应答消息;
向第一备份数据节点发送更新请求,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息。
其中,所述待写入数据的属性信息包括所述待写入数据的名称以及大小。
本发明实施例还提供了一种数据节点,如图6所示,包括:
接收模块601,用于接收更新请求,所述更新请求包括所述待写入数据在所述第一分布式存储子系统中的存储位置和所述待写入数据的属性信息。
处理模块602,用于根据所述待写入数据在所述第一分布式存储子系统中的存储位置以及所述待写入数据的属性信息,在所述第一分布式存储子系统中查找所述待写入数据。
存储模块603,用于当查找到所述待写入数据时,所述备份数据节点保存所述待写入数据的属性信息。
发送模块604,用于向名字节点发送通知消息,向客户端发送应答消息。
本发明实施例提供的文件存储系统,多个数据节点共享一个分布式存储子系统,且该分布式存储子系统包括一个主存储设备和至少一个备份存储设备,能够实现数据在各个存储设备之间的互相备份。在利用该文件存储系统进行写数据时,主数据节点将待写入数据写入第一分布式存储子系统,然后向第一备份数据节点发送更新请求以通知第一备份数据节点待写入数据的属性信息以及待写入数据的存储位置,第一备份数据节点根据该更新请求仅需要查看第一分布式存储子系统,确定第一分布式存储子系统中已经写入了待写入数据后,保存更新请求中的待写入数据的属性信息,便完成了对待写入数据的写过程。与现有技术中,所有数据节点都需要将待写入数据分别写入其对应的分布式存储系统相比,这样本发明提供的数据调度的方法,虽然存在多个数据节点,但实际只有一个数据节点进行了数据写入第一分布式操作系统的过程,其余数据节点则利用数据本地化特性,查看共享的分布式存储子系统,能够减少数据在各个数据节点之间的网络传输和存储时间,进而加快数据写入速度。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。