FastDFS
文件系统概述
分布式文件系统(Distributed File System,简称DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
计算机通过文件系统管理、存储数据,而信息爆炸时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小、容量增长速度、数据备份、数据安全等方面的表现都差强人意。分布式文件系统可以有效解决数据的存储和管理难题:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络。每个节点可以分布在不同的地点,通过网络进行节点间的通信和数据传输。人们在使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。
文件系统最初设计时,仅仅是为局域网内的本地数据服务的。而分布式文件系统将服务范围扩展到了整个网络。不仅改变了数据的存储和管理方式,也拥有了本地文件系统所无法具备的数据备份、数据安全等优点。判断一个分布式文件系统是否优秀,取决于以下三个因素:
-
数据的存储方式:例如有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 介绍
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
- Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
- Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
- Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
FastDFS特点
FastDFS 是一款开源的轻量级分布式文件系统如下特点:
-
纯粹C语言实现,支持Linux、FreeBSD等unix系统。
-
类似GoogleFS/HDFS,但是不是通用的文件系统,只能通过专有的API访问,目前提供了C、Java和PHPAPI
互联网量身定做,最求高性能,高扩展. -
FastDFS不仅仅可以存储文件,还可以存储文件的元数据信息(可选)。
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数据)都存储在服务器的磁盘上。
FastDFS上传、下载机制
上传
- 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端。
FastDFS中File_ID组成
File_ID是由Storage Server生成并返回给Client端。File_ID包含了组和文件路径。Storage Server可以直接根据该文件名定位到该文件。
FastDFS集群搭建
此次环境基于CentOS7 x64
安装
资源下载安装
进入 https://github.com/happyfish100 网站下载FastDFS相关资源。
由于github上下载来的安装包文件在安装时或多或少会出现bug,此处建议使用小编给大家处理过的安装包进行安装,以下所有安装包获取方式:
百度网盘:
链接:https://pan.baidu.com/s/1rnwVzlJDA0ykxBzbSOsDWQ
提取码:thmn
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V1的分享
蓝奏云:
https://wws.lanzous.com/b01huf3ah
密码:thmn
- 1.安装依赖包
libfastcommon-1.0.39.tar.gz
注意:CentOSX 表示在多台虚拟机上同时执行
因为安装时会使用到C环境,所以需要安装gcc
环境
[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
-rwxr-xr-x. 1 root root 963 Jun 30 20:22 /etc/init.d/fdfs_trackerd
# 执行程序
[root@CentOSX ~]# whereis fdfs_storaged fdfs_trackerd
fdfs_storaged: /usr/bin/fdfs_storaged
fdfs_trackerd: /usr/bin/fdfs_trackerd
服务配置
- 1.创建fdfs运行所需的数据目录
#创建多级目录
[root@CentOSX ~]# mkdir -p /data/fdfs/{tracker,storage/store01,storage/store02}
[root@CentOSX ~]# tree /data/
/data/
└── fdfs
├── storage
│ └── store01
| └── store02
└── tracker
- 2.创建启动所需的配置文件
[root@CentOSX ~]# cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
[root@CentOSX ~]# cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
[root@CentOSX ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
[root@CentOSX ~]# tree /etc/fdfs/
/etc/fdfs/
├── client.conf
├── client.conf.sample
├── storage.conf
├── storage.conf.sample
├── storage_ids.conf.sample
├── tracker.conf
└── tracker.conf.sample
- 3.配置Tracker Server
在/etc/fdfs/tracker.conf
文件中修改base_path
路径
[root@CentOSX ~]# vi /etc/fdfs/tracker.conf
base_path=/data/fdfs/tracker
- 4.配置Storage Server
[root@CentOSX ~]# vi /etc/fdfs/storage.conf
base_path=/data/fdfs/storage
store_path_count=2
store_path0=/data/fdfs/storage/store01
store_path1=/data/fdfs/storage/store02
tracker_server=CentOSA:22122
tracker_server=CentOSB:22122
tracker_server=CentOSC:22122
- 修改Client端
[root@CentOSX ~]# vi /etc/fdfs/client.conf
base_path=/tmp
tracker_server=CentOSA:22122
tracker_server=CentOSB:22122
tracker_server=CentOSC:22122
启动服务器
[root@CentOSX ~]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server:
[root@CentOSX ~]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server:
# 查看进程
[root@CentOSX ~]# ps -aux | grep fdfs
root 78950 0.0 0.1 144784 2040 ? Sl 21:06 0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 79000 13.0 3.2 83520 67144 ? Sl 21:06 0:06 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
root 79324 0.0 0.0 103320 884 pts/0 S+ 21:07 0:00 grep fdfs
更多内容请关注公众号头号码农
小编个人微信:1014961803