用户您好!请先登录!

分布式文件系统那点事

分布式文件系统那点事

分布式文件系统

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接再本地节点上,而是通过计算机网络与节点相连
分布式文件系统的设计基于客户机/服务器(C/S)模式
常用分布式文件系统:
 Lustre,Hadoop,FastDFS,Ceph,GlusterFS,Swift,TFS 等

常用分布式文件系统对比:

dfs-info

1. FastDFS

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

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

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

特性

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

优点

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

缺点

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

应用场景

  • 单集群部署的应用
  • 存储后基本不做改动
  • 小中型文件 – 据据目前官方提供的材料,现有的使用FastDFS系统存储容量已经达到900T,物理机器已经达到100台(50个组)

2. TFS

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

特性

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

优点

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

缺点

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

应用场景

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

3.  MooseFS (http://www.moosefs.org/)

MooseFS是一个高可用的故障容错分布式文件系统,它支持通过FUSE方式将文件挂载操作,同时其提供的web管理界面非常方便查看当前的文件存储状态。

特性

  • MooseFS文件系统由四部分组成:Managing Server 、Data Server 、Metadata Backup Server 及Client
  • 其中所有的元数据都是由Managing Server管理,为了提高整个系统的可用性,Metadata Backup Server记录文件元数据操作日志,用于数据的及时恢复
  • Data Server可以分布式部署,存储的数据是以块的方式分布至各存储节点的,因此提升了系统的整体性能,同时Data Server提供了冗余备份的能力,提升系统的可靠性
  • Client通过FUSE方式挂载,提供了类似POSIX的访问方式,从而降低了Client端的开发难度,增强系统的通用性

优点

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

缺点

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

应用场景

  • 单集群部署的应用
  • 中、大型文件

4. GlusterFS (http://www.gluster.org/)

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

特性

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

优点

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

缺点

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

应用场景

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

5. Ceph (http://ceph.com)

Ceph最早起源于Sage就读博士期间的工作、成果于2004年发表,并随后贡献给开源社区。经过多年的发展之后,已得到众多云计算和存储厂商的支持,成为应用最广泛的开源分布式存储平台。

Ceph根据场景可分为对象存储、块设备存储和文件存储。Ceph相比其它分布式存储技术,其优势点在于:它不单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡。同时,由于采用了CRUSH、HASH等算法,使得它不存在传统的单点故障,且随着规模的扩大,性能并不会受到影响。

(1).Ceph的主要架构

主流分布式存储技术的对比分析与应用
  • Ceph的最底层是RADOS(分布式对象存储系统),它具有可靠、智能、分布式等特性,实现高可靠、高可拓展、高性能、高自动化等功能,并最终存储用户数据。RADOS系统主要由两部分组成,分别是OSD和Monitor。
  • RADOS之上是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。
  • 基于LIBRADOS层开发的有三种接口,分别是RADOSGW、librbd和MDS。
  • RADOSGW是一套基于当前流行的RESTFUL协议的网关,支持对象存储,兼容S3和Swift。
  • librbd提供分布式的块存储设备接口,支持块存储。
  • MDS提供兼容POSIX的文件系统,支持文件存储。

(2).Ceph的功能模块

主流分布式存储技术的对比分析与应用

Ceph的核心组件包括Client客户端、MON监控服务、MDS元数据服务、OSD存储服务,各组件功能如下:

  • Client客户端:负责存储协议的接入,节点负载均衡
  • MON监控服务:负责监控整个集群,维护集群的健康状态,维护展示集群状态的各种图表,如OSD Map、Monitor Map、PG Map和CRUSH Map
  • MDS元数据服务:负责保存文件系统的元数据,管理目录结构
  • OSD存储服务:主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查等。一般情况下一块硬盘对应一个OSD。

(3).Ceph的特点

  •  Ceph支持对象存储、块存储和文件存储服务,故 称为统一存储。
  •  采用CRUSH算法,数据分布均衡,并行度高,不需要维护固定的元数据结构;
  •  数据具有强一致,确保所有副本写入完成才返回确认,适合读多写少场景;
  •  去中心化,MDS之间地位相同,无固定的中心节点
  • Ceph存在一些缺点:
  •  去中心化的分布式解决方案,需要提前做好规划设计,对技术团队的要求能力比较高。
  •  Ceph扩容时,由于其数据分布均衡的特性,会导致整个存储系统性能的下降。

6. GFS (google file system)

GFS是google的分布式文件存储系统,是专为存储海量搜索数据而设计的,2003年提出,是闭源的分布式文件系统。适用于大量的顺序读取和顺序追加,如大文件的读写。注重大文件的持续稳定带宽,而不是单次读写的延迟。

(1).GFS的主要架构

GFS 架构比较简单,一个 GFS 集群一般由一个 master 、多个 chunkserver 和多个 clients 组成。在 GFS 中,所有文件被切分成若干个 chunk,每个 chunk 拥有唯一不变的标识(在 chunk 创建时,由 master 负责分配),所有 chunk 都实际存储在 chunkserver 的磁盘上。

为了容灾,每个 chunk 都会被复制到多个 chunkserver。

(2).GFS的功能模块

  •  GFS client客户端:为应用提供API,与POSIX API类似。同时缓存从GFS master读取的元数据chunk信息;
  •  GFS master元数据服务器:管理所有文件系统的元数据,包括命令空间(目录层级)、访问控制信息、文件到chunk的映射关系,chunk的位置等。同时 master 还管理系统范围内的各种活动,包括chunk 创建、复制、数据迁移、垃圾回收等;
  •  GFS chunksever存储节点:用于所有 chunk的存储。一个文件被分割为多个大小固定的chunk(默认64M),每个chunk有全局唯一的chunk ID。

(3).GFS的写入流程

  1. Client 向 master 询问要修改的 chunk在哪个 chunkserver上,以及 该chunk 其他副本的位置信息。
  2. Master 将Primary、secondary的相关信息返回给 client。
  3. Client 将数据推送给 primary 和 secondary;。
  4. 当所有副本都确认收到数据后,client 发送写请求给 primary,primary 给不同 client 的操作分配序号,保证操作顺序执行。
  5. Primary 把写请求发送到 secondary,secondary 按照 primary 分配的序号顺序执行所有操作
  6. 当 Secondary 执行完后回复 primary 执行结果。
  7. Primary 回复 client 执行结果。

(4).GFS特点

  • 适合大文件场景的应用,特别是针对GB级别的大文件,适用于数据访问延时不敏感的搜索类业务
  • 中心化架构,只有1个master处于active状态
  • 缓存和预取,通过在client端缓存元数据,尽量减少与master的交互,通过文件的预读取来提升并发性能
  • 高可靠性,master需要持久化的数据会通过操作日志与checkpoint的方式存放多份,故障后master会自动切换重启。

7. HDFS

HDFS(Hadoop Distributed File System),是一个适合运行在通用硬件(commodity hardware)上的分布式文件系统,是Hadoop的核心子项目,是基于流数据模式访问和处理超大文件的需求而开发的。该系统仿效了谷歌文件系统(GFS),是GFS的一个简化和开源版本。

(1).HDFS的主要架构

主流分布式存储技术的对比分析与应用
  •  HDFS Client(客户端):从NameNode获取文件的位置信息,再从DataNode读取或者写入数据。此外,client在数据存储时,负责文件的分割;
  • NameNode(元数据节点):管理名称空间、数据块(Block)映射信息、配置副本策略、处理客户端读写请求;
  • DataNode(存储节点):负责执行实际的读写操作,存储实际的数据块,同一个数据块会被存储在多个DataNode上
  • Secondary NameNode:定期合并元数据,推送给NameNode,在紧急情况下,可辅助NameNode的HA恢复。

(2).HDFS的特点(Vs GFS)

  • 分块更大,每个数据块默认128MB;
  • 不支持并发,同一时刻只允许一个写入者或追加者;
  • 过程一致性,写入数据的传输顺序与最终写入顺序一致;
  • Master HA,2.X版本支持两个NameNode,(分别处于Active和Standby状态),故障切换时间一般几十秒到数分钟

(3).HDFS适合的应用场景:

  • 适用于大文件、大数据处理,处理数据达到 GB、TB、甚至PB级别的数据。
  • 适合流式文件访问,一次写入,多次读取。
  • 文件一旦写入不能修改,只能追加。

(4).HDFS不适合的场景:

  • 低延时数据访问。
  • 小文件存储
  • 并发写入、文件随机修改

8. Swift (OpenStack Swift)

Swift 最初是由Rackspace公司开发的分布式对象存储服务, 2010 年贡献给 OpenStack 开源社区。作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务。

(1).Swift的主要架构

Swift 采用完全对称、面向资源的分布式系统架构设计,所有组件都可扩展,避免因单点失效而影响整个系统的可用性。

主流分布式存储技术的对比分析与应用

Swift 组件包括:

  • 代理服务(Proxy Server):对外提供对象服务 API,转发请求至相应的账户、容器或对象服务
  • 认证服务(Authentication Server):验证用户的身份信息,并获得一个访问令牌(Token)
  • 缓存服务(Cache Server):缓存令牌,账户和容器信息,但不会缓存对象本身的数据
  • 账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务
  • 容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务
  • 对象服务(Object Server):提供对象元数据和内容服务,每个对象会以文件存储在文件系统中
  • 复制服务(Replicator):检测本地副本和远程副本是否一致,采用推式(Push)更新远程副本
  • 更新服务(Updater):对象内容的更新
  • 审计服务(Auditor):检查对象、容器和账户的完整性,如果发现错误,文件将被隔离
  • 账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包含的所有容器和对象

(2).Swift特点

  • 原生的对象存储,不支持实时的文件读写、编辑功能
  • 完全对称架构,无主节点,无单点故障,易于大规模扩展,性能容量线性增长
  • 数据实现最终一致性,不需要所有副本写入即可返回,读取数据时需要进行数据副本的校验
  • 是OpenStack的子项目之一,适合云环境的部署
  • Swift的对象存储与Ceph提供的对象存储区别:客户端在访问对象存储系统服务时,Swift要求客户端必须访问Swift网关才能获得数据。而Ceph可以在每个存储节点上的OSD(对象存储设备)获取数据信息; 在数据一致性方面,Swift的数据是最终一致,而Ceph是始终跨集群强一致性)

9. Lustre

Lustre是基于Linux平台的开源集群(并行)文件系统,最早在1999年由皮特•布拉姆创建的集群文件系统公司(Cluster File Systems Inc.)开始研发,后由HP、Intel、Cluster File System和美国能源部联合开发,2003年正式开源,主要用于HPC超算领域。

(1). Lustre的主要架构

主流分布式存储技术的对比分析与应用

Lustre组件包括:

  • 管理服务器(MGS):存放集群中所有Lustre文件系统的配置信息,Lustre客户通过联系MGS获取信息,可以与MDS共享存储空间
  • 元数据服务器(MDS): 管理存储在MDT中的元数据,使存储在一个或多个MDT中的元数据可供Lustre客户端使用,每个MDS可管理一个或多个MDT。
  • 元数据目标(MDT): MDS用于存储元数据(例如文件名,目录,权限和文件布局),一个MDT可用于多个MDS,但一次只能有一个MDS访问
  • 对象存储服务器(OSS):为一个或多个本地OST提供文件I / O服务和网络请求处理, 通常,OSS服务于两个到八个OST
  • 对象存储目标(OST):用户文件数据存储在一个或多个对象中,每个对象位于单独OST中
  • Lustre客户端:运行Lustre客户端软件的计算节点,可挂载Lustre文件系统。客户端软件包括一个管理客户端(MGC),一个元数据客户端(MDC)和多个对象存储客户端(OSC)。每个OSC对应于文件系统中的一个OST。
  • 逻辑对象卷(LOV)通过聚合OSC以提供对所有OST的透明访问,逻辑元数据卷(LMV)通过聚合MDC提供一种对所有MDT透明的访问。

(2). Lustre特点

  • 支持数万个客户端系统,支持PB级存储容量,单个文件最大支持320TB容量
  • 支持RDMA网络,大文件读写分片优化,多个OSS能获得更高的聚合带宽
  • 缺少副本机制,存在单点故障。如果一个客户端或节点发生故障,存储在该节点上的数据在重新启动前将不可访问
  • 适用高性能计算HPC领域,适用于大文件连续读写。

【未完,待补充】

行走的code
行走的code

要发表评论,您必须先登录