第1章FastDFS入门
1.1 分布式文件系统
分布式文件系统 (Distributed File System) 是一个软件/软件服务器,这个软件可以用来管理文件。但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件资源,通过分布式文件系统来管理这些服务器上的文件。
常见的分布式文件系统有:FastDFS、GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS等。
分布式文件系统与传统文件系统对比
传统方式弊端
-
如果用户数量多,IO操作比较多,对磁盘访问压力很大
-
如果磁盘发生故障,会造成数据丢失
-
存储容量有限
1.2 FastDFS简介
FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发并开源。
FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。
FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
1.3 FastDFS发展历史
2008年4月项目启动,7月发布第一个版本V1.00,两年时间内持续升级到V1.29
2010年8月推出V2.00
2011年6月推出V3.00
2012年10月推出V4.0.0
2013年12月推出V5.0.0
截止目前最新版是V5.11(2017年6月发布)
FastDFS系统架构从第一个版本发布后一直没有大的调整,高版本完全兼容低版本的数据,可以做到平滑升级,推荐更新升级到最新版本
FastDFS代码托管在github上:https://github.com/happyfish100/fastdfs
1.4 FastDFS整体架构
FastDFS文件系统由两大部分构成,一个是客户端,一个是服务端
客户端通常指我们的程序,比如我们的Java程序去连接FastDFS、操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供专有API访问,目前提供了C、Java和PHP几种编程语言的API,用来访问FastDFS文件系统。
服务端由两个部分构成:一个是跟踪器(tracker),一个是存储节点(storage)
跟踪器(tracker)主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端Client和后端存储节点storage的枢纽。因为相关信息全部在内存中,Tracker server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。
存储节点(storage)用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等。
第2章FastDFS环境搭建
2.1 FastDFS安装
2.1.1 安装前的准备
(1) 检查Linux上是否安装了 gcc、libevent、libevent-devel
-
yum list installed | grep gcc
-
yum list installed | grep libevent
-
yum list installed | grep libevent-devel
(2) 如果没有安装,则需进行安装
yum install gcc libevent libevent-devel -y
2.1.2 安装 libfastcommon 库
libfastcommon 库是 FastDFS 文件系统运行需要的公共 C 语言函数库
注意:目前最新版本的v1.0.39和最新版的FastDFS5.11不兼容,所有我们这里使用的版本是v1.0.36 下载地址:https://github.com/happyfish100
(1) 将下载好的libfastcommon文件上传到Linuxs(/opt)
(2) 解压下载下来的tar.gz压缩包到当前目录
tar -zxvf libfastcommon-1.0.36.tar.gz
(3) 切换到解压后的libfastcommon目录
cd libfastcommon-1.0.36
(4) 执行make脚本进行编译
./make.sh
注意: make编译的时候如果报错,需解决错误后再次进行make,通常发生错误是由于Linux缺少某些依赖库导致,根据错误提示解决错误
(5) 执行make install进行安装
./make.sh install
至此 libfastcommon 库安装完毕
2.1.3 安装FastDFS
FastDFS没有Windows版本,不能在Windows下使用。
FastDFS需要安装部署在Linux环境下,我们这里使用的是fastdfs-5.11版本(201901)
下载地址:https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
(1)将下载好的FastDFS文件上传到Linux(/opt)
(2)解压下载下来的tar.gz压缩包到当前目录
tar -zxvf fastdfs-5.11.tar.gz
(3)切换到解压后FastDFS的目录
cd fastdfs-5.11
(4)执行make脚本进行编译
./make.sh
(5)执行make install进行安装
./make.sh install
至此FastDFS安装完成
所有编译出来的文件存放在/usr/bin目录下
所有配置文件存放在/etc/fdfs目录下
(6)查看安装后的效果
A、查看FastDFS相关的可执行程序
ll /usr/bin/fdfs*
/usr/bin是Linux的环境变量,可通过echo $PATH查看
B、查看FastDFS的配置文件
ll /etc/fdfs/
(7)另外注意需要把解压后的fastdfs-5.11/conf目录下的两个文件拷贝到/etc/fdfs/ ,否则后续会有很多奇怪问题不好解决
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
这两个文件后续需要用到,所以先拷贝过去
2.2 FastDFS配置
2.2.1去掉/etc/fdfs/目录下FastDFS配置文件的后缀名
2.2.2修改tracker.conf文件
默认指向的FastDFS作者余庆的目录,因为在我们的机器上不存在,所有手动改一下
base_path=/opt/fastdfs/tracker #配置tracker存储数据的目录
2.2.3修改storage.conf文件
base_path=/opt/fastdfs/storage #storage存储数据目录
store_path0=/opt/fastdfs/storage/files #真正存放文件的目录
tracker_server=192.168.137.142:22122 #注册当前存储节点的跟踪器地址
2.2.4在Linux服务器上创建上面指定的目录
/opt/fastdfs/tracker
/opt/fastdfs/storage
/opt/fastdfs/storage/files
2.2.5然后启动FastDFS
2.3 FastDFS启动
FastDFS服务启动需要启动两个脚本:
2.3.1启动FastDFS的tracker服务
在任意目录下执行:
fdfs_trackerd /etc/fdfs/tracker.conf
2.3.2启动FastDFS的storage服务
在任意目录下执行:
fdfs_storaged /etc/fdfs/storage.conf
2.3.3查看启动进程
有启动的执行命令即为启动成功
2.3.4查看storage是否已经注册到了tracker下
fdfs_monitor /etc/fdfs/storage.conf
2.3.5首次启动storage后,会在配置的路径下创建存储文件的目录
2.4 FastDFS重启
2.4.1重启tracker
fdfs_trackerd /etc/fdfs/tracker.conf restart
2.4.2重启storage
fdfs_storaged /etc/fdfs/storage.conf restart
2.5 FastDFS关闭
2.5.1关闭tracker执行命令
在任意目录下执行:
fdfs_trackerd /etc/fdfs/tracker.conf stop
2.5.2关闭storage执行命令
在任意目录下执行:
fdfs_storaged /etc/fdfs/storage.conf stop
2.5.3或者kill关闭fastdfs,但不建议在线上使用 kill -9 强制关闭,因为可能会导致文件信息不同步问题
2.6 FastDFS测试
FastDFS安装完成之后,可以使用fdfs_test脚本测试文件上传
2.6.1测试之前,需要修改client.conf配置文件,修改两个配置
-
base_path=/opt/fastdfs/client
-
tracker_server=192.168.179.128:22122
-
在/opt/fastdfs/目录下创建client
2.6.2测试文件上传
-
准备需要上传的文件
-
执行上传命令
fdfs_test /etc/fdfs/client.conf upload /root/aa.txt
This is FastDFS client test program v5.11
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail.
[2021-11-28 22:37:52] DEBUG - base_path=/opt/fastdfs/client, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=192.168.137.142, port=23000
group_name=group1, ip_addr=192.168.137.142, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463.txt
source ip address: 192.168.137.142
file timestamp=2021-11-28 22:37:52
file size=15
file crc32=3529255
example file url: http://192.168.137.142/group1/M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463.txt
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463_big.txt
source ip address: 192.168.137.142
file timestamp=2021-11-28 22:37:52
file size=15
file crc32=3529255
example file url: http://192.168.137.142/group1/M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463_big.txt
-
切换到存储目录查看文件上传情况
2.6.3FastDFS生成的文件目录结构及名称示例
2.6.4测试文件删除
fdfs_delete_file /etc/fdfs/client.conf group1/要删除的文件路径
之前上传的文件主文件:M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463.txt 和从文件: M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463_big.txt -m那个文件是属性信息文件
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463.txt
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKiJjmGjlECAErA4AAAADwA12ic463_big.txt
2.6.5注意
-
没有搭建集群默认只有一个组group1
-
后缀名包含-m的为属性文件(meta)
-
在Linux中并没有磁盘一说,是虚拟的