文件系统概述
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
计算机通过文件系统管理、存储数据,而信息爆炸时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小、容量增长速度、数据备份、数据安全等方面的表现都差强人意。分布式文件系统可以有效解决数据的存储和管理难题:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络。每个节点可以分布在不同的地点,通过网络进行节点间的通信和数据传输。人们在使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。
文件系统最初设计时,仅仅是为局域网内的本地数据服务的。而分布式文件系统将服务范围扩展到了整个网络。不仅改变了数据的存储和管理方式,也拥有了本地文件系统所无法具备的数据备份、数据安全等优点。判断一个分布式文件系统是否优秀,取决于以下三个因素:
数据的存储方式,例如有1000万个数据文件,可以在一个节点存储全部数据文件,在其他N个节点上每个节点存储1000/N万个数据文件作为备份;或者平均分配到N个节点上存储,每个节点上存储1000/N万个数据文件。无论采取何种存储方式,目的都是为了保证数据的存储安全和方便获取。
数据的读取速率,包括响应用户读取数据文件的请求、定位数据文件所在的节点、读取实际硬盘中数据文件的时间、不同节点间的数据传输时间以及一部分处理器的处理时间等。各种因素决定了分布式文件系统的用户体验。即分布式文件系统中数据的读取速率不能与本地文件系统中数据的读取速率相差太大,否则在本地文件系统中打开一个文件需要2秒,而在分布式文件系统中各种因素的影响下用时超过10秒,就会严重影响用户的使用体验。
数据的安全机制,由于数据分散在各个节点中,必须要采取冗余、备份、镜像等方式保证节点出现故障的情况下,能够进行数据的恢复,确保数据安全。
文件系统分类
-
块存储:MongoDB数据库中的GridFS、Hadoop中的HDFS,这些系统在存储文件的的时候会尝试先将文件打碎存储(拆分成Data Block)。这样存储的优点可以存储超大型文件,更加高效的利用磁盘资源。但是需要额外存储文件碎片的元数据信息。
在块存储中HDFS存储的块128MB,但是在MongoDB中默认Chunk 255 KB,虽然都支持块存储但是应用场景有很大差异。HDFS使用于超大文本日志文件存储。但是MongoDB适合存储超大的流媒体文件例如操大的音频和视频,可以实现流媒体数据流的区间加载。
-
文件存储:GlusterFS、NFS、FastDFS等都是基于文件单位存储,这种存储并不会将文件系统打碎。而是文件存储到系统中的某一台服务器中。这样存储的优点可以应对一些小文件系统,系统维护简单,无需存储文件的元数据,系统设计和维护成本低。
FastDFS 介绍
特点
FastDFS 是一款开源的轻量级分布式文件系统如下特点:
-
纯粹C语言实现,支持Linux、FreeBSD等unix系统。
-
类似GoogleFS/HDFS,但是不是通用的文件系统,只能通过专有的API访问,目前提供了C、Java和PHPAPI
互联网量身定做,最求高性能,高扩展. -
FastDFS不仅仅可以存储文件,还可以存储文件的元数据信息(可选)。
架构
整个FastDFS架构中有Client、Tracker和Storage服务。其中Client用于提交文件给FastDFS集群。Storage 服务负责实际数据的存储,Tracker服务负责监控和调度Storage服务,起到负载均衡器的作用。
这里面如果Storage的中卷
是一样的也就意味着这些服务彼此数据相互备份,实现数据的冗余备份。不同卷
存储整个集群中的部分文件,类似于传统单机文件系统的的分区概念(C盘、D盘、…)Tracker Server 主要做工作调度,在访问上起负载均衡的作用。在内存中记录集群中group/卷
和Storage server的状态信息,是连接Client和Storage Server的枢纽。因为相关信息存储在内存中,所以Tracker Server性能非常高,一个较大的集群(上百个group/卷
)中3台就够了。
StorageServer :存储服务器,文件和文件属性信息(meta数据)都存储在服务器的磁盘上。
上传、下载机制
- Storage Server会定期的向Tracker服务器汇报自身状态信息,例如健康状态和存储容量。
- Client连接Tracker Server发送文件请求。
- Tracker Server根据注册的Storage Server的信息返回一台可用的Storage Server的调用信息。
- Client拿到信息后直接连接对应的Storage Server进行点到点的文件上传(附加元数据-可选)。
- Storage Server收到文件请求后会根据自己位置信息生成File_ID信息,并且将File_ID和用户携带的元数据信息进行关联,然后将File_ID返回给Client。
- 返回的File_ID文件服务器并不会存储,需要Client端保留在外围数据库中,以后Client端可以通过File_ID下载对应的文件或者元数据。
- Storage Server会定期的向Tracker服务器汇报自身状态信息,例如健康状态和存储容量。
- Client连接Tracker Server携带File_ID参数发送文件下载请求。
- Tracker Server根据注册的Storage Server的信息返回一台可用的Storage Server的调用信息(主从服务器)。
- Client拿到信息后直接连接对应的Storage Server进行点到点的文件下载(读取元数据)。
- Storage Server收到文件请求后解析File_ID信息,读取本地的文件流,将数据写会Client端。
File_ID组成
File_ID是由Storage Server生成并返回给Client端。File_ID包含了组/卷
和文件路径。Storage Server可以直接根据该文件名定位到该文件。
FastDFS集群搭建
资源下载安装
进入 https://github.com/happyfish100 网站下载FastDFS相关资源。建议使用小编给大家处理过的安装包。
链接:https://pan.baidu.com/s/1wW0UBbdcoKorNbhTEGMjtg
提取码:qitx
- 1.安装依赖包libfastcommon
https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz
[root@CentOSX ~]# yum install -y gcc-c++
[root@CentOSX ~]# tar -zxf libfastcommon-1.0.39.tar.gz
[root@CentOSX ~]# cd libfastcommon-1.0.39
[root@CentOSX libfastcommon-1.0.39]# ./make.sh
[root@CentOSX libfastcommon-1.0.39]# ./make.sh install
- 2.安装FastDFS
https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
[root@CentOSX ~]# yum install -y perl-devel
[root@CentOSX ~]# tar -zxf fastdfs-5.11.tar.gz
[root@CentOSX ~]# cd fastdfs-5.11
[root@CentOSX fastdfs-5.11]# ./make.sh
[root@CentOSX fastdfs-5.11]# ./make.sh install
提示:当软件安装结束后,默认FastDFS启动所需的配置文件放置在/etc/fdfs目录下。
[root@CentOSX ~]# yum install -y tree
[root@CentOSX ~]# tree /etc/fdfs/
/etc/fdfs/
├── client.conf.sample
├── storage.conf.sample
├── storage_ids.conf.sample
└── tracker.conf.sample
0 directories, 4 files
# 可运行脚本
[root@CentOSX ~]# ls -l /etc/init.d/fdfs_*
-rwxr-xr-x. 1 root root 961 Jun 30 20:22 /etc/init.d/fdfs_storaged
-r