分布式文件系统介绍

当前比较流行的分布式文件系统包括:LustreHadoopMogileFSFastDFSNFSOpenAFSMooseFSpNFSGlusterFSTFS 以及 GoogleFS 等。

1、Lustre

lustre 是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护。该项目主要的目的就是开发下一代的集群文件系统,可以支持超过 10000 个节点,数以 PB 的数量存储系统。

lustre 是开放源代码的集群文件系统,采取 GPL 许可协议,目前在集群计算机里,计算机与磁盘间数据交换的提升无法跟上微处理器和内存增长的速度,从而也拖累了应用程序的性能,一种新兴的集群文件系统软件提高了I/O速度,可能降低企业购买存储设备的成本并改变企业购买存储的方式,集群文件系统已经在大学、实验室和超级计算机研究中心里使用,而且即将进入通用商业计算市场。新的集群文件系统采用了开源的 lustre 技术,由美国能源部(Department Of Energy)开发,惠普公司(HP)提供商业支持。它显著提高了输入输出(I/O)速度,目前已经在高校、国家实验室和超级计算研究中心产生了一定影响,未来几年中,它很有可能进入普通的商业计算机领域。 运行在linux下

开发语言:c/c++

官网:http://lustre.org/

2、Hadoop

hadoop并不仅仅是一个用于存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架。授权协议apache。

开发语言:java,资源耗费有点大。

官网:http://hadoop.apache.org/

3、MogileFs

Mogile Fs是一个开源的分布式文件系统,主要特征包括

  • 应用层的组件

  • 无单点故障

  • 自动文件复制

  • 具有比RAID更好的可靠性

  • 无需RAID nigukefs支持 ,运行在linux下。

官网:http://www.danga.com/

4、FastDFS

FastDFS 是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS 是国人开发的一款分布式文件系统,目前社区比较活跃。系统中存在三种节点:Client、Tracker、Storage,在底层存储上通过逻辑的分组概念,使得通过在同组内配置多个 Storage,从而实现软 RAID10,提升并发IO的性能、简单负载均衡及数据的冗余备份;同时通过线性的添加新的逻辑存储组,从容实现存储容量的线性扩容。

文件下载上,除了支持通过 API 方式,目前还提供了 apache 和 nginx 的插件支持,同时也可以不使用对应的插件,直接以 Web 静态资源方式对外提供下载。

目前 FastDFS(V4.x) 代码量大概6w多行,内部的网络模型使用比较成熟的 libevent 三方库,具备高并发的处理能力。

特性

1)Tracker 服务器是整个系统的核心枢纽,其完成了访问调度(负载均衡),监控管理 Storage 服务器,FastDFS 支持多个备用的 Tracker,虽然实际测试发现备用 Tracker 运行不是非常完美,但还是能保证系统可用。
2)在文件同步上,只有同组的 Storage 才做同步,由文件所在的源 Storage 服务器 push 至其它 Storage 服务器,目前同步是采用 Binlog 方式实现,由于目前底层对同步后的文件不做正确性校验,因此这种同步方式仅适用单个集群点的局部内部网络,如果在公网上使用,肯定会出现损坏文件的情况,需要自行添加文件校验机制。
3)支持主从文件,非常适合存在关联关系的图片,在存储方式上,FastDFS 在主从文件 ID 上做取巧,完成了关联关系的存储。

优点

1)系统无需支持 POSIX(可移植操作系统),降低了系统的复杂度,处理效率更高
2)支持在线扩容机制,增强系统的可扩展性
3)实现了软 RAID,增强系统的并发处理能力及数据容错恢复能力
4)支持主从文件,支持自定义扩展名
5)主备 Tracker 服务,增强系统的可用性

缺点

1)不支持断点续传,对大文件将是噩梦(FastDFS不适合大文件存储)
2)不支持 POSIX 通用接口访问,通用性较低
3)对跨公网的文件同步,存在较大延迟,需要应用做相应的容错策略
4)同步机制不支持文件正确性校验,降低了系统的可用性
5)通过API下载,存在单点的性能瓶颈

应用场景

1)单集群部署的应用
2)存储后基本不做改动
3)小中型文件根据

目前官方提供的材料,现有的使用 FastDFS 系统存储容量已经达到 900T,物理机器已经达到100台(50个组)

开发语言:c/c++,可跨平台运行。

项目地址:https://github.com/happyfish100/fastdfs

5、NFS

网络文件系统是 FreeBSD 支持的文件系统中的一种,也被称为 NFS。

NFS 允许一个系统在网络上与它人共享目录和文件。通过使用 NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。它的好处是:

  • 1、本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。

  • 2、用户不必在每个网络上机器里面都有一个home目录。home目录可以被放在NFS服务器上并且在网络上处处可用。

  • 3、诸如软驱、CDROM、和ZIP之类的存储设备可以在网络上面被别的机器使用。可以减少整个网络上的可移动介质设备的数量。

开发语言:c/c++,可跨平台运行。

官网:http://www.tldp.org/HOWTO/NFS-HOWTO/index.html

6、OpenAFS

OpenAFS 是一套开放源代码的分布式文件系统,允许系统之间通过局域网和广域网来分享档案和资源。OpenAFS 是围绕一组叫做 cell 的文件服务器组织的,每个服务器的标识通常是隐藏在文件系统中,从 AFS 客户机登陆的用户将分辨不出他们在那个服务器上运行,因为从用户的角度上看,他们想在有识别的 Unix 文件系统语义的单个系统上运行。

文件系统内容通常都是跨 cell 复制,一便一个硬盘的失效不会损害 OpenAFS 客户机上的运行。OpenAFS 需要高达 1GB 的大容量客户机缓存,以允许访问经常使用的文件。它是一个十分安全的基于 kerbero 的系统,它使用访问控制列表(ACL)以便可以进行细粒度的访问,这不是基于通常的 Linux 和 Unix 安全模型。

开发协议IBM Public,运行在linux下。

官网:http://www.openafs.org/

7、MooseFS

Moose File System 是一个具备容错功能的网路分布式文件统,它将数据分布在网络中的不同服务器上,MooseFS 通过 FUSE 使之看起来就是一个 Unix 的文件系统。但有一点问题,它还是不能解决单点故障的问题。

MooseFS 包括四种角色:

  • 管理服务器 Managing Server(Master):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝等。

  • 元数据日志服务器 Meta Logger server(Meta logger):负责备份 master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作。

  • 数据存储服务器 Data Servers(chunk servers):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。

  • 客户机挂载使用 Client Computers:通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地 unix 文件系统使用一样的效果。

优点

1)部署安装非常简单,管理方便
2)支持在线扩容机制,增强系统的可扩展性
3)实现了软 RAID,增强系统的并发处理能力及数据容错恢复能力
4)数据恢复比较容易,增强系统的可用性5)有回收站功能,方便业务定制

缺点

1)存在单点性能瓶颈及单点故障
2)MFS Master 节点很消耗内存
3)对于小于 64KB 的文件,存储利用率较低

应用场景

1)单集群部署的应用
2)中、大型文件

开发语言 perl,可跨平台操作。

官网:http://www.moosefs.org/

8、googleFs

据说是一个比较不错的一个可扩展分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能,它可以给大量的用户提供性能较高的服务。google 自己开发的。

9、GlusterFS

GlusterFS 是 Red Hat 旗下的一款开源分布式文件系统,它具备高扩展、高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可 轻松达到 PB 级别,支持数千客户端并发访问;对跨集群,其强大的 Geo-Replication 可以实现集群间数据镜像,而且是支持链式复制,这非常适用 于垮集群的应用场景

特性

1)目前 GlusterFS 支持 FUSE 方式挂载,可以通过标准的 NFS/SMB/CIFS 协议像访问本体文件一样访问文件系统,同时其也支持 HTTP/FTP/GlusterFS 访问,同时最新版本支持接入 Amazon 的 AWS 系统。
2)GlusterFS 系统通过基于 SSH 的命令行管理界面,可以远程添加、删除存储节点,也可以监控当前存储节点的使用状态。
3)GlusterFS 支持集群节点中存储虚拟卷的扩容动态扩容;同时在分布式冗余模式下,具备自愈管理功能,在 Geo 冗余模式下,文件支持断点续传、异步传输及增量传送等特点。

GlusterFS.jpg

优点

1)系统支持 POSIX(可移植操作系统),支持 FUSE 挂载通过多种协议访问,通用性比较高
2)支持在线扩容机制,增强系统的可扩展性
3)实现了软 RAID,增强系统的 并发处理能力及数据容错恢复能力
4)强大的命令行管理,降低学习、部署成本
5)支持整个集群镜像拷贝,方便根据业务压力,增加集群节点
6)官方资料文档专业化,该文件系统由 Red Hat 企业级做维护,版本质量有保障

缺点

1)通用性越强,其跨越的层次就越多,影响其IO处理效率
2)频繁读写下,会产生垃圾文件,占用磁盘空间

应用场景

1)多集群部署的应用
2)中大型文件根据目前官方提供的材料,现有的使用GlusterFS系统存储容量可轻松达到PB

术语:

  • brick:分配到卷上的文件系统块;

  • client:挂载卷,并对外提供服务;

  • server:实际文件存储的地方;

  • subvolume:被转换过的文件系统块;

  • volume:最终转换后的文件系统卷。

官网:http://www.gluster.org/

10、TFS

TFS(Taobao File System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,通常文件大小不超过 1M,目前已经对外开源。

它构筑在普通的 Linux 机器集群上。采用 HA 架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化了文件的访问流程,一定程度上为 TFS 提供了良好的读写性能。

TFS采用自有的文件系统格式存储,因此需要专用的API接口去访问,目前官方提供的客户端版本有:C++/JAVA/PHP。

特性

1)在 TFS 文件系统中,NameServer 负责管理文件元数据,通过 HA 机制实现主备热切换,由于所有元数据都是在内存中,其处理效率非常高效,系统架构也非常简单,管理也很方便;
2)TFS 的 DataServer 作为分部署数据存储节点,同时也具备负载均衡和冗余备份的功能,由于采用自有的文件系统,对小文件会采取合并策略,减少数据碎片,从而提升 IO 性能;
3)TFS 将元数据信息(BlockID、FileID)直接映射至文件名中,这一设计大大降低了存储元数据的内存空间;

优点

1)针对小文件量身定做,随机 IO 性能比较高;
2)支持在线扩容机制,增强系统的可扩展性;
3)实现了软 RAID,增强系统的并发处理能力及数据容错恢复能力;
4)支持主备热倒换,提升系统的可用性;
5)支持主从集群部署,其中从集群主要提供读/备功能;

缺点

1)TFS 只对小文件做优化,不适合大文件的存储;
2)不支持 POSIX 通用接口访问,通用性较低;
3)不支持自定义目录结构,及文件权限控制;
4)通过 API 下载,存在单点的性能瓶颈;
5)官方文档非常少,学习成本高;

应用场景

1)多集群部署的应用
2)存储后基本不做改动
3)海量小型文件

根据目前官方提供的材料,对单个集群节点,存储节点在 1000台 以内可以良好工作,如存储节点扩大可能会出现 NameServer 的性能瓶颈,目前淘宝线上部署容量已达到1800TB规模(2009年数据)

总体结构

一个 TFS 集群由两个 NameServer 节点(一主一备)和多个 DataServer 节点组成。

在 TFS 中,将大量的小文件(实际数据文件)合并成为一个大文件,这个大文件称为块(Block),每个 Block 拥有在集群内唯一的编号(Block Id),Block Id 在 NameServer 在创建 Block 的时候分配,NameServer 维护 block 与 DataServer 的关系。

Block 中的实际数据都存储在 DataServer 上。而一台 DataServer 服务器一般会有多个独立 DataServer 进程存在,每个进程负责管理一个挂载点,这个挂载点一般是一个独立磁盘上的文件目录,以降低单个磁盘损坏带来的影响。

NameServer 主要功能是:管理维护 Block 和 DataServer 相关信息。

包括 DataServer 加入、退出、心跳信息、block 和 DataServer 的对应关系建立、解除。正常情况下,一个块会在 DataServer 上存在, 主 NameServer 负责 Block 的创建、删除、复制、均衡、整理,NameServer不负责实际数据的读写,实际数据的读写由DataServer完成。

DataServer主要功能是:负责实际数据的存储和读写。

同时为了考虑容灾,NameServer 采用了 HA 结构,即两台机器互为热备,同时运行,一台为主,一台为备,主机绑定到对外 vip,提供服务。当主机器宕机后,迅速将 vip 绑定至备份 NameServer,将其切换为主机,对外提供服务。

图中的 HeartAgent 就完成了此功能。

Taobao-FileSystem.png

官网:http://code.taobao.org/p/tfs/wiki/index/

11、pNFS

网络文件系统(Network FileSystem,NFS)是大多数局域网(LAN)的重要的组成部分。但 NFS 不适用于高性能计算中苛刻的输入书橱密集型程序,至少以前是这样。NFS 标准的罪行修改纳入了 Parallel NFS(pNFS),它是文件共享的并行实现,将传输速率提高了几个数量级。

开发语言c/c++,运行在linu下。

官网:http://www.pnfs.com/

GlusterFS、GoogleFS、FastDFS、TFS 有啥区别?

  • GlusterFS:主要应用在集群系统中,具有很好的可扩展性。软件的结构设计良好,易于扩展和配置,通过各个模块的灵活搭配以得到针对性的解决方案。

  • GoogleFS:性能十分好,可扩展性强,可靠性强。用于大型的、分布式的、对大数据进行访问的应用。运用在廉价的硬件上。

  • FastDFS:一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。

  • TFS:TFS(Taobao FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。

综上所述,以上四种文件系统均可用于集群分布式系统,都具有良好的性能以及可扩展性。

  • GlusterFS:存储文件是以元数据的存储方式存储的,方便文件的移植和拷贝,并且对硬件和网络要求较高。

  • GoogleFS:针对应用级别的文件系统,对硬件和网络的要求一般,能在廉价的硬件上有良好的可靠性。

  • FastDFS:针对互联网中的小文件系统,没有文件索引数据库,整体性能很高。

  • TFS:淘宝使用的文件系统,用于图片存储,在小文件存储上比较有优势,但随着写的增加,读文件的效率会降低。

系统整体对比

文件系统TFSFastDFSMogileFSMooseFSGlusterFSCeph
开发语言C++CPerlCCC++
开源协议GPL V2GPL V3GPLGPL V3GPL V3LGPL
数据存储方式文件/Trunk文件文件/块对象/文件/块
集群节点通信协议私有协议(TCP)私有协议(TCP)HTTP私有协议(TCP)私有协议(TCP)/ RDAM(远程直接访问内存)私有协议(TCP)
专用元数据存储点占用NS占用DB占用MFS占用MDS
在线扩容支持支持支持支持支持支持
冗余备份支持支持-支持支持支持
单点故障存在不存在存在存在不存在存在
跨集群同步支持部分支持--支持不适用
易用性安装复杂,官方文档少安装简单,社区相对活跃-安装简单,官方文档多安装简单,官方文档专业化安装简单,官方文档专业化
适用场景跨集群的小文件单集群的中小文件-单集群的大中文件跨集群云存储单集群的大中小文件

开源协议说明

  • GPL:不允许修改后和衍生的代码做为闭源的商业软件发布和销售,修改后该软件产品必须也采用GPL协议;

  • GPL V2:修改文本的整体就必须按照 GPL 流通,不仅该修改文本的源码必须向社 会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制;

  • GPL V3:要求用户公布修改的源代码,还要求公布相关硬件;

  • LGPL:更宽松的 GPL;

参考文章


未经允许请勿转载:程序喵 » 分布式文件系统介绍

点  赞 (0) 打  赏
分享到: