带你系统了解分布式文件系统

2021-12-21 12:34:27 浏览数 (1)

块存储

块存储一般体现形式是卷或者硬盘(比如windows的c盘),数据是按字节来访问的,对于块存储而言,对里面存的数据内容和格式是完全一无所知的。好比上面图中,数据就像玉米粒一样堆放在块存储里,块存储只关心玉米粒进来和出去,不关心玉米粒之间的关系和用途。

块存储只负责数据读取和写入,因此性能很高,适用于对响应时间要求高的系统。比如数据库等。

文件存储

文件存储一般体现形式是目录和文件(比如C:UsersDownloadstext.doc),数据以文件的方式存储和访问,按照目录结构进行组织。文件存储可以对数据进行一定的高级管理,比如在文件层面进行访问权限控制等。好比上面图中,数据像玉米粒一样组成玉米棒子,再对应到不同的玉米杆上,要找到某个玉米粒,先找到玉米杆,再找到玉米棒子,然后根据玉米粒在玉米棒子上的位置找到它。

文件存储可以很方便的共享,因此用途非常广泛。比如常用的NFS、CIFS、ftp等都是基于文件存储的。

对象存储

对象存储一般体现形式是一个UUID,数据和元数据打包在一起作为一个整体对象存在一个超大池子里。对于对象访问,只需要报出它的UUID,就能立即找到它,但访问的时候对象是作为一个整体访问的。好比上面图中,数据的玉米粒被做成了玉米罐头,每个玉米罐头都有一个唯一出厂号,但是买卖罐头,都一次是一盒为单位。

从设计之初衷(一般的对象存储都是基于哈希环之类的技术来实现),对象存储就可以非常简单的扩展到超大规模,因此非常适合数据量大、增速又很快的视频、图像等。

分布式文件系统比较及部分原理

存储系统

CephFS

GlusterFS

TFS

HDFS

MooseFS

FastDFS

MogileFS

开发语言

C

C

C

Java

C

C

Perl

系统性能

很高

数据存储方式

对象/文件/块

文件/块

文件

文件

文件/块

文件

集群节点通信协议

私有协议(TCP)

私有协议(TCP)/ RDAM(远程直接访问内存)

TCP

TCP

TCP

TCP

HTTP

专用元数据存储点 | 占用MDS | 无 | 占用NS | 占用MDS | 占用MFS | 无 | 占用DB

在线扩容 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持

冗余备份 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持

单点故障 | 不存在 | 不存在 | 存在 | 存在 | 存在 | 不存在 | 存在

跨集群同步 | 不支持 | 支持 | 支持 | 不支持 | 不支持 | 部分支持 | 不支持

易用性 | 安装简单,官方文档专业化 | 安装简单,官方文档专业化 | 安装复杂,官方文档少 | 安装简单,官方文档专业化 | 安装简单,官方文档多 |

安装简单,社区相对活跃 | 未知

适用场景 | 单集群的大中小文件 | 跨集群云存储 | 跨集群的小文件 | Mapreduce使用的文件存储 | 单集群的大中文件 | 单集群的中小文件 |

未知

FUSE挂载 | 支持 | 支持 | 未知 | 支持 | 支持 | 不支持 | 不支持

访问接口 | POSIX | POSIX | 不支持POSIX | 不支持POSIX | POSIX | 不支持POSIX | 不支持POSIX

TFS

TFS(Taobao File

System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,目前已经对外开源。TFS采用自有的文件系统格式存储,因此需要专用的API接口去访问,目前官方提供的客户端版本有:

C /JAVA/PHP(没有C的接口)

  • 特点
    • 主备热切换
    • 所有元数据都是在内存中,处理效率非常高效
    • 系统架构也非常简单,管理也很方便
    • 具备负载均衡和冗余备份的功能;对小文件会采取合并策略,减少数据碎片
  • 优点
    • 针对小文件量身定做,随机IO性能比较高
    • 支持在线扩容机制,增强系统的可扩展性
    • 实现了软RAID,增强系统的并发处理能力及数据容错恢复能力
    • 支持主备热倒换,提升系统的可用性
    • 支持主从集群部署,其中从集群主要提供读/备功能
  • 缺点
    • TFS只对小文件做优化,不适合大文件的存储
    • 不支持POSIX通用接口访问,通用性较低
    • 不支持自定义目录结构,及文件权限控制
    • 通过API下载,存在单点的性能瓶颈
    • 官方文档非常少,学习成本高
  • 应用场景
    • 多集群部署的应用
    • 存储后基本不做改动
    • 海量小型文件

FastDFS

FastDFS是国人开发的一款分布式文件系统,目前社区比较活跃,提供了C、Java和PHP

API。实现软RAID10,提升并发IO的性能、简单负载均衡及数据的冗余备份;同时通过线性的添加新的逻辑存储组,从容实现存储容量的线性扩容。文件下载上,除了支持通过API方式,目前还提供了apache和nginx的插件支持,同时也可以不使用对应的插件,直接以Web静态资源方式对外提供下载。内部的网络模型使用比较成熟的libevent三方库,具备高并发的处理能力。

  • 特点
    • Tracker服务器是整个系统的核心枢纽,其完成了访问调度(负载均衡),监控管理Storage服务器
    • FastDFS支持多个备用的Tracker,消除系统的单点故障
    • 只有同组的Storage才做同步
    • FastDFS在主从文件ID上做取巧,完成了关联关系的存储
  • 优点
    • 针系统无需支持POSIX(可移植操作系统),降低了系统的复杂度,处理效率更高
    • 支持在线扩容机制,增强系统的可扩展性
    • 实现了软RAID10,增强系统的并发处理能力及数据容错恢复能力
    • 支持主从文件,支持自定义扩展名
    • 主备Tracker服务,增强系统的可用性
    • 支持小文件合并存储
  • 缺点
    • 不支持POSIX通用接口访问,通用性较低
    • 对跨公网的文件同步,存在较大延迟,需要应用做相应的容错策略
    • 同步机制不支持文件正确性校验,降低了系统的可用性
  • 应用场景
    • 单集群部署的应用
    • 存储后基本不做改动
    • 小中型文件

CephFS

Ceph是一个可以按对象/块/文件方式存储的开源分布式文件系统,其设计之初,就将单点故障作为首先要解决的问题,因此该系统具备高可用性、高性能及可扩展等特点。该文件系统支持目前还处于试验阶段的高性能文件系统BTRFS(B-Tree文件系统),同时支持按OSD方式存储,因此其性能是很卓越的。

  • 特点
    • Ceph底层存储是基于RADOS(可靠的、自动的分布式对象存储),它提供了LIBRADOS/RADOSGW/RBD/CEPH FS方式访问底层的存储系统
    • 通过FUSE,Ceph支持类似的POSIX访问方式;Ceph分布式系统中最关键的MDS节点是可以部署多台,无单点故障的问题,且处理性能大大提升
    • Ceph通过使用CRUSH算法动态完成文件inode number到object number的转换,从而避免再存储文件metadata信息,增强系统的灵活性
  • 优点
    • 支持对象存储(OSD)集群,通过CRUSH算法,完成文件动态定位, 处理效率更高
    • 支持通过FUSE方式挂载,降低客户端的开发成本,通用性高
    • 支持分布式的MDS/MON,无单点故障
    • 强大的容错处理和自愈能力
    • 支持在线扩容和冗余备份,增强系统的可靠性
  • 缺点
    • 目前处于试验阶段,系统稳定性有待考究
    • ceph目前还不足够成熟,它基于的btrfs本身也不成熟,它的官方网站上也明确指出不要把ceph用在生产环境中
  • 应用场景
    • 全网分布式部署的应用
    • 对实时性、可靠性要求比较高官方宣传,存储容量可轻松达到PB级别

GlusterFS

GlusterFS是Red

Hat旗下的一款开源分布式文件系统,它具备高扩展、高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可

轻松达到PB级别,支持数千客户端并发访问;对跨集群,其强大的Geo-

Replication可以实现集群间数据镜像,而且是支持链式复制,这非常适用于跨集群的应用场景。

  • 特点
    • 支持FUSE方式挂载,可以通过标准的NFS/SMB/CIFS协议像访问本体文件一样访问文件系统,同时其也支持HTTP/FTP/GlusterFS访问
    • 通过基于SSH的命令行管理界面,可以远程添加、删除存储节点,也可以监控当前存储节点的使用状态
    • 持集群节点中存储虚拟卷的扩容动态扩容;同时在分布式冗余模式下,具备自愈管理功能,在Geo冗余模式下,文件支持断点续传、异步传输及增量传送等特点
  • 优点
    • 支持POSIX(可移植操作系统),支持FUSE挂载通过多种协议访问,通用性比较高
    • 支持在线扩容机制,增强系统的可扩展性
    • 实现了软RAID,增强系统的并发处理能力及数据容错恢复能力
    • 强大的命令行管理,降低学习、部署成本
    • 支持整个集群镜像拷贝,方便根据业务压力,增加集群节点
    • 官方资料文档专业化,该文件系统由Red Hat企业级做维护,版本质量有保障
  • 缺点
    • 通用性越强,其跨越的层次就越多,影响其IO处理效率
    • 频繁读写下,会产生垃圾文件,占用磁盘空间
  • 应用场景
    • 多集群部署的应用
    • 中大型文件根据目前官方提供的材料,现有的使用GlusterFS系统存储容量可轻松达到PB

MooseFS

MooseFS是一个高可用的故障容错分布式文件系统,它支持通过FUSE方式将文件挂载操作,相对比较轻量级,同时其提供的web管理界面非常方便查看当前的文件存储状态。但其对master服务器有单点依赖,用perl编写,性能相对较差,国内用的人比较多。

HDFS

安装简单,官方文档专业化;大数据批量读写,吞吐量高;一次写入,多次读取,顺序读写;难以满足毫秒级别的低延时数据访问;不支持多用户并发写相同文件;不适用于大量小文件;适合存储非常大的文件。

MogileFS

依赖数据库,Trackers(控制中心):负责读写数据库,作为代理复制storage间同步的数据,除了API,可以通过与nginx集成,对外提供下载服务,

选型参考

  1. 按特性分类
代码语言:txt复制
* 适合做通用文件系统的有:Ceph,Lustre,MooseFS,GlusterFS
* 适合做小文件存储的文件系统有:Ceph,MooseFS,MogileFS,FastDFS,TFS
* 适合做大文件存储的文件系统有:HDFS,Ceph,Lustre,GlusterFS,GridFS
* 轻量级文件系统有:MooseFS,FastDFS
* 简单易用,用户数量活跃的文件系统有:MooseFS,MogileFS,FastDFS,GlusterFS
* 支持FUSE挂载的文件系统有:HDFS,Ceph,Lustre,MooseFS,GlusterFS
代码语言:txt复制
* 考虑到GFS不开源,学习成本高,且相关特性资料不全面的情况下,暂时先不考虑使用GFS上文没写)
* Ceph目前不够成熟稳定,很少有使用在生产环境的案例,暂时排除
* Lustre对内核依赖程度过重,且不易安装使用,暂时排除(上文没写)
* TFS安装复杂,且官方文档少,不利于以后的学习使用,暂时先排除
* 经初步筛选剩下的文件系统有:HDFS、MooseFS、MogileFS、FastDFS、GlusterFS、GridFS
代码语言:txt复制
* 需求

1.需要搭建一部管理原始凭证的文件系统,原始凭证的文件类型主要是小文件(<100M),不会对文件进行变更,无写操作,读操作量大,且对安全性要求较高 2. 随着系统在使用过程中数据量逐步庞大,文件的量会变得繁多,对文件读取速率要求尽可能高但不追求极致 3. 文件系统需要有较完善的冗余备份与容错机制,功能尽量精简耐用,安装配置应简单且适合于国产环境部署

代码语言:txt复制
* 分析

1. 需要选择适合海量小文件存储的文件系统,适合的文件系统有:MooseFS,MogileFS,FastDFS 2. 其次需要支持冗余备份,适合的文件系统有:MooseFS、FastDFS、GlusterFS 3. 符合条件1,2且功能精简的文件系统有: **FastDFS** 4. 符合条件1,2且功能全面的文件系统有: **MooseFS**

0 人点赞