一种分布式文件系统的制作方法

文档序号:17889690发布日期:2019-06-13 15:29阅读:182来源:国知局
一种分布式文件系统的制作方法

本发明涉及互联网技术领域,具体涉及一种分布式文件系统。



背景技术:

随着现代社会从工业时代过渡到信息时代,信息技术的发展以及人类生活的智能化带来数据的爆炸性增长,数据正成为世界上最有价值的资源。根据物理存储形态,数据存储可分为集中式存储与分布式存储两种。集中式存储以传统存储阵列(传统存储)为主,分布式存储(云存储)以软件定义存储为主。传统存储一向以可靠性高、稳定性好,功能丰富而著称,但与此同时,传统存储也暴露出横向扩展性差、价格昂贵、数据连通困难等不足,容易形成数据孤岛,导致数据中心管理和维护成本居高不下。分布式存储:将数据分散存储在网络上的多台独立设备上,一般采用标准x86服务器和网络互联,并在其上运行相关存储软件,系统对外作为一个整体提供存储服务。总之,分布式文件存储,不仅提高了存储空间的利用率,还实现了弹性扩展,降低了运营成本,避免了资源浪费,更适合未来的数据爆炸时代场景。

在传统分布式文件系统的数据存储解决方案,归根结底是将大问题划分为小问题。大量的文件,均匀分布到多个数据服务器上后,每个数据服务器存储的文件数量就少了,另外通过使用大文件存储多个小文件的方式,总能把单个数据服务器上存储的文件数降到单机能解决的规模;对于很大的文件,将大文件划分成多个相对较小的片段,存储在多个数据服务器上(目前,很多本地文件系统对超大文件的支持已经不存在问题了,如ext3文件系统使用4k区块时,文件最大能到4t,ext4则能支持更大的文件,只是受限于磁盘的存储空间)。

理论上,分布式文件系统可以只有客户端和多个数据服务器组成,客户端根据文件名决定将文件存储到哪个数据服务器,但一旦有数据服务器失效时,问题就变得复杂,客户端并不知道数据服务器宕机的消息,仍然连接它进行数据存取,导致整个系统的可靠性极大的降低,而且完全由客户端决定数据分配是非常不灵活的,其不能根据文件特性制定不同的分布策略。因此迫切的需要能知道各个数据服务器的服务状态的数据服务器的状态管理,主流的方式可分为分散式和集中式两种方式,前者是让多个数据服务器相互管理,如每个服务器向其他所有的服务器发送心跳信息,但这种方式开销较大,控制不好容易影响到正常的数据服务,而且工程实现较为复杂;后者是指通过一个独立的服务器(主控服务器)来管理数据服务器,每个数据服务器向其汇报服务状态来达到集中管理的目的,但这种方式又带来单点问题,若主控服务器出现问题,导致整个文件存储系统不可用。

在文件本地的持久化存储,最简单的方式是将客户每个文件数据分配到一个单独的数据服务器上作为一个本地文件存储,但这种方式并不能很好的利用分布式文件系统的特性。

另外,传统的数据服务器针对文件更新,更新前的文件会被删除,无法保存历史版本。



技术实现要素:

本发明的目的在于克服现有技术存在的问题,提供一种分布式文件系统,实现分布式文件存储,并保证文件存储的全生命周期的真实性、完整性和安全性;另外增加主备主控服务器,提高系统的可用性;采用固定区块大小的方案,提升文件存取的性能。

为实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:

一种分布式文件系统,该系统包括主控服务器、若干个数据服务器、以及若干个客户端,其中:

所述主控服务器包括有命名空间维护模块、数据服务器管理模块、服务调度模块和主备容灾模块;所述命名空间维护模块负责维护整个文件系统的命名空间,暴露给客户端使用,并且所述命名空间维护模块存储与客户端完全一样的命名空间,对应的文件内容为该文件的元数据;所述数据服务器管理模块通过轮询数据服务器或由数据服务器报告心跳包的方式集中管理数据服务器;

所述数据服务器包括有数据本地存储模块、状态维护模块和副本管理模块;所述数据本地存储模块负责文件数据在本地的持久化存储,使用固定大小s的文件区块来存储数据,数据本地存储模块支持文件的创建和删除,新创建的文件追加到大文件的末尾并更新索引,文件删除时,设置文件头的删除标记,系统空闲时对大文件进行压缩把设置删除标记且超过一定时限的文件存储空间回收;所述状态维护模块将自身的状态以心跳包的方式周期性的报告给主控服务器,使得主控服务器知道数据服务器是否正常工作;所述副本管理模块将文件存储多个副本到数据服务器上,客户端向某个数据服务器写数据,该数据服务器向副本链中下一个数据服务器转发数据,依次类推;

所述客户端为应用服务器或终端用户,客户端包括有接口模块和缓存模块;所述接口模块通过系统提供的接口来读写文件,客户端在读文件时通过将文件名转换为区块id和文件id信息,在主控服务器取得该区块所在数据服务器信息,然后与对应的数据服务器进行读取操作;所述缓存模块将元数据进行缓存,元数据根据业务特性缓存在本地内存或磁盘。

进一步的,该系统还包括有备用控制服务器,所述备用控制服务器与主控服务器结构及配置文件相同,所述主备容灾模块为备用控制服务器和主控服务器提供一个虚拟ip服务,实现备用控制服务器和主控服务器数据同步,并且当所述备用控制服务器检测到主控服务器宕机时,接管主控服务器的资源及服务。

进一步的,所述主控服务器数据同步到备用控制服务器时采用异步方式,先暂存客户端的请求信息,追加至操作日志,后台线程重放日志到备用控制服务器。

进一步的,所述主控服务器在接收到客户端写请求时,数据服务器管理模块根据各个数据服务器的负载信息选择一组数据服务器为其服务;所述主控服务器发现有数据服务器宕机时,对一些副本数不足的文件执行复制计划;当有新的数据服务器加入集群或是某个数据服务器上负载过高,主控服务器根据需要执行副本迁移计划。

进一步的,所述数据服务器管理模块在分配数据服务器时,基本的分配方法包括有随机选取、时间片轮转和低负载优先。

进一步的,所述数据服务器管理模块在分配数据服务器时将服务器的部署作为参考或是根据客户端的信息,将分配的数据服务器按照与客户端的远近排序,使得客户端优先选取离自己近的数据服务器进行数据存取。

进一步的,所述主控服务器中的服务调度模块服务来自客户端和数据服务器的请求,服务模型使用线程池,由单独的线程接受请求,并将其加入到任务队列中,线程池中的线程从任务队列中不断的取出任务进行处理。

进一步的,所述主控服务器的元数据存储为持久化或非持久化,当元数据存储为非持久化时,所述数据服务器启动时需要把自己的文件信息汇报给主控服务器。

进一步的,所述数据本地存储模块对小于固定大小s的文件存储,将多个文件的数据存储在一个文件区块中,并为区块内的文件建立索引;所述数据本地存储模块对大于固定大小s的文件,拆分存储至多个文件区块中并建立索引;多个文件区块所在的数据服务器并行服务,每个文件区块拥有唯一的id,文件区块的id由主控服务器进行分配,数据服务器实际存储该文件区块。

进一步的,在所述主控服务器的节点中存储了所有区块的id信息,并且一个区块存储于多个数据服务器中以保证数据的冗余;对于数据读写请求,均先由主控服务器选择合适的数据服务器的节点返回给客户端,再在对应的数据服务器的节点上进行数据操作;在所述数据服务器的节点上,挂载目录上包括有若干物理区块,物理区块以文件的形式存在磁盘上,并在数据服务器部署前预先分配,以保证后续的访问速度和减少碎片产生;所述物理区块由主区块和扩展区块组成,所述扩展区块用于文件更新操作,所述文件区块对应于多个物理区块,其中至少包括一个主区块、n个扩展区块和一个与该文件区块对应的索引文件,所述文件区块中的每个小文件采用一个区块内唯一的文件id来标识。

本发明的有益效果是:

本发明从分布式文件系统架构出发,结合分布式文件系统的基本原理,实现了基于区块链技术的分布式文件存储,并保证了文件存储的全生命周期的真实性、完整性和安全性;增加了主控服务器与备用控制服务器,提高了系统的可用性;采用固定区块大小的方案,提升了文件存取的性能。

附图说明

图1为本发明的分布式文件系统架构图;

图2为本发明的主控服务器存储的元数据结构图;

图3为本发明的文件名映射图。

具体实施方式

下面将参考附图并结合实施例,来详细说明本发明。

如图1所示,一种分布式文件系统,该系统包括主控服务器、若干个数据服务器、以及若干个客户端,其中:

所述主控服务器包括有命名空间维护模块、数据服务器管理模块、服务调度模块和主备容灾模块;所述命名空间维护模块负责维护整个文件系统的命名空间,暴露给客户端使用,并且所述命名空间维护模块存储与客户端完全一样的命名空间,对应的文件内容为该文件的元数据;所述数据服务器管理模块通过轮询数据服务器或由数据服务器报告心跳包的方式集中管理数据服务器;

所述数据服务器包括有数据本地存储模块、状态维护模块和副本管理模块;所述数据本地存储模块负责文件数据在本地的持久化存储,使用固定大小s的文件区块来存储数据,在本实施例中,固定大小s优先为32m或128m,数据本地存储模块支持文件的创建和删除,新创建的文件追加到大文件的末尾并更新索引,文件删除时,设置文件头的删除标记,系统空闲时对大文件进行压缩把设置删除标记且超过一定时限的文件存储空间回收;所述状态维护模块将自身的状态以心跳包的方式周期性的报告给主控服务器,使得主控服务器知道数据服务器是否正常工作,在本实施例中,心跳包包括有数据服务器当前的负载状况、cpu、内存、磁盘io、磁盘存储空间、网络io和进程的资源;所述副本管理模块将文件存储多个副本到数据服务器上,具体实现可采用流水复制的方式,客户端向某个数据服务器写数据,该数据服务器向副本链中下一个数据服务器转发数据,依次类推;

所述客户端为应用服务器或终端用户,客户端包括有接口模块和缓存模块;所述接口模块通过系统提供的接口来读写文件,客户端在读文件时通过将文件名转换为区块id和文件id信息,在主控服务器取得该区块所在数据服务器信息,如果此时客户端有该区块与数据服务器的缓存,则直接从缓存中取,然后与对应的数据服务器进行读取操作;所述缓存模块将元数据进行缓存,元数据根据业务特性缓存在本地内存或磁盘,缓存替换算法可以是lru、随机替换等。

该系统还包括有备用控制服务器,所述备用控制服务器与主控服务器结构及配置文件相同,所述主备容灾模块为备用控制服务器和主控服务器提供一个虚拟ip服务,实现备用控制服务器和主控服务器数据同步,并且当所述备用控制服务器检测到主控服务器宕机时,接管主控服务器的资源及服务。

所述主控服务器数据同步到备用控制服务器时采用异步方式,先暂存客户端的请求信息,追加至操作日志,后台线程重放日志到备用控制服务器。

所述主控服务器在接收到客户端写请求时,数据服务器管理模块根据各个数据服务器的负载信息选择一组数据服务器为其服务;所述主控服务器发现有数据服务器宕机时,对一些副本数不足的文件执行复制计划;当有新的数据服务器加入集群或是某个数据服务器上负载过高,主控服务器根据需要执行副本迁移计划。

所述数据服务器管理模块在分配数据服务器时,基本的分配方法包括有随机选取、时间片轮转和低负载优先。

所述数据服务器管理模块在分配数据服务器时将服务器的部署作为参考或是根据客户端的信息,将分配的数据服务器按照与客户端的远近排序,使得客户端优先选取离自己近的数据服务器进行数据存取。

所述主控服务器中的服务调度模块服务来自客户端和数据服务器的请求,服务模型使用线程池,由单独的线程接受请求,并将其加入到任务队列中,线程池中的线程从任务队列中不断的取出任务进行处理。

所述主控服务器的元数据存储为持久化或非持久化,当元数据存储为非持久化时,所述数据服务器启动时需要把自己的文件信息汇报给主控服务器。

所述数据本地存储模块对小于固定大小s的文件存储,将多个文件的数据存储在一个文件区块中,并为区块内的文件建立索引;所述数据本地存储模块对大于固定大小s的文件,拆分存储至多个文件区块中并建立索引;多个文件区块所在的数据服务器并行服务,每个文件区块拥有唯一的id,文件区块的id由主控服务器进行分配,数据服务器实际存储该文件区块。

如图2所示,在所述主控服务器的节点中存储了所有区块的id信息,并且一个区块存储于多个数据服务器中以保证数据的冗余;对于数据读写请求,均先由主控服务器选择合适的数据服务器的节点返回给客户端,再在对应的数据服务器的节点上进行数据操作;在所述数据服务器的节点上,挂载目录上包括有若干物理区块,物理区块以文件的形式存在磁盘上,并在数据服务器部署前预先分配,以保证后续的访问速度和减少碎片产生,本实施例中,数据服务器可采用ext4文件系统;所述物理区块由主区块和扩展区块组成,所述扩展区块用于文件更新操作,所述文件区块对应于多个物理区块,其中至少包括一个主区块、n个扩展区块和一个与该文件区块对应的索引文件,所述文件区块中的每个小文件采用一个区块内唯一的文件id来标识,在本实施例中,如图3所示,小文件的文件名由区块id和文件id通过某种对应关系组成,最大长度为20字节,固定以d开始,第2-3字节为该集群的编号(取值范围:01-99),余下17字节由区块id和文件id通过一定的编码方式得到。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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