
FastDFS简单介绍
FastDFS是一个开源的分布式文件系统,主要由跟踪服务器(Tracker Server)、存储服务器(Storage Server)、客户端(client)三部分组成。
Storage Server以组(Group)为单位组织,一个Group内包含多台Storage机器,数据互为备份,存储空间以Group内容量最小的Storage为准,所以建议Group内的多个Storage尽量配置相同,以免造成存储空间的浪费。
Tracker是FastDFS的协调者,负责管理所有的Storage Server和Group,每个Storage在启动后会连接Tracker,告知
自己所属的Group、剩余存储空间等信息,并且和Tracker保持心跳响应。
正式搭建
我搭建这个FastDFS主要是用来进行图片存储,选择的是阿里云的轻量应用服务器,主要是能够以学生身份9.9买到,系统选择的是CentOS 7。
下载并安装libfastcommon
如果下载速度慢,可以先看看我的另外一篇文件来提高下载速度,链接奉上。
1
2wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
tar -zxvf V1.0.7.tar.gz进入解压出来的文件夹libfastcommon-1.0.7,执行编译与安装。
1
2
3cd libfastcommon-1.0.7
make.sh
make.sh install下载并安装FastDFS
1
2
3
4
5wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
tar -zxvf V5.05.tar.gz
cd fastdfs-5.05
make.sh
make.sh install安装完成后,会在系统/etc/fdfs/目录下生成两个启动脚本(fdfs_tracker, fdfs_storage)和三个配置模板文件(client.conf.sample, storage.conf.sample, tracker.conf.sample),另外附带安装的还有一些命令行工具,比如用于测试文件上传的fdfs_upload_file等。
Tracker参数配置
配置文件在/etc/fdfs/下,需要自行将tracker.conf.sample模板拷贝并重命名为tracker.conf。配置文件主要修改如下几项配置:
1
2
3
4
5
6
7
8
9
10
11# 配置文件是否不生效,false 为生效
disabled=false
# 提供服务的端口
port=22122
# Tracker数据和日志目录地址(这里指定的路径要保证存在)
base_path=/home/eva/fastdfs/tracker
# HTTP 服务端口
http.server_port=80storage参数配置
操作同步骤3类似,不过这次操作的是storage配置文件,主要修改的参数如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36# 配置文件是否不生效,false 为生效
disabled=false
# 指定此 storage server 所在 组(卷)
group_name=group1
# storage server 服务端口
port=23000
# 心跳间隔时间,单位为秒 (这里是指主动向tracker server发送心跳)
heart_beat_interval=30
# Storage 数据和日志目录地址(需要确保指定路径存在)
base_path=/home/eva/fastdfs/tracker
# 存放文件时storage server支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1
# 逐一配置store_path_count个路径,索引号基于0。
# 如果不配置store_path0,那它就和base_path对应的路径一样(上传的文件就存储在这个目录,需要保证存在)。
store_path0=/home/eva/fastdfs/path0
# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。
# 如果本参数只为N(如: 256),那么storage server在初次运行时,会在store_path下自动创建N * N个存放文件的子目录。
subdir_count_per_path=256
tracker_server 的列表 ,会主动连接 tracker_server
# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server=ali:22122
# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
sync_start_time=00:00
sync_end_time=23:59
# 访问端口
http.server_port=80修改client.conf配置文件
1
2
3
4
5# Client 的数据和日志目录(同样需要保证路径存在)
base_path=/home/eva/fastdfs/client
# Tracker端口
tracker_server=ali:22122开放服务端口
主要是开放三个端口 22122, 23000, 80,我这里使用的是CentOS 7操作系统,相应的指令为:1
firewall-cmd --zone=public --add-port=端口号/tcp --permanet
另外要注意的是,如果你使用的是云服务器,那么还需要配置云端防火墙规则,比如我的阿里云服务器配置规则如下:
启动测试
分别启动tracker和storage服务,指令如下:1
2fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start查看服务启动情况(root身份下执行):
1
netstat -anp | grep fdfs
出现下图所示结果,便说明服务启动成功。
测试文件上传,执行如下命令,会返回一个存储路径,记下这个路径,然后前往你在storage.conf文件中配置的store_path0/data/目录下,查看返回的路径下是否有你刚刚上传的文件,如果有,则说明上传是没有问题的。
1
/usr/bin/fdfs_upload_file 待上传文件的路径
测试下载
下载需要借助于nginx服务器,所以我们先安装nginx,过程中缺少的安装环境请通过包管理工具自行安装解决。下载并安装nginx,执行如下指令执行即可(过程可能需要以root身份执行)。
1
2
3
4
5
6
7
8
9
10
11
12
13# 下载
wget -c https://nginx.org/download/nginx-1.12.1.tar.gz
# 解压
tar -zxvf nginx-1.12.1.tar.gz
# 配置
cd nginx-1.12.1
configure
# 编译安装
make
make install操作完成后,如果执行
1
/usr/local/nginx/sbin/nginx -V
出现下图结果,则表示nginx安装成功。
为nginx安装FastDFS模块
对fastdfs-nginx-module 的说明:FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制,有同步延迟的问题。 假设 Tracker 服务器将文件上传到192.168.51.128,上传成功后文件 ID已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储服务器192.168.51.129上,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.51.129 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
a. 下载解压重命名
1
2
3
4
5
6
7
8# 下载
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 解压
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 重命名
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master
b .在Nginx中添加FastDFS模块
1
2
3
4
5
6
7
8# 进入解压包目录
cd /softpackages/nginx-1.12.1/
# 添加模块
./configure --add-module=../fastdfs-nginx-module-master/src
# 重新编译、安装
make && make install
c. 查看添加的FastDFS模块
1
/usr/local/nginx/sbin/nginx -V
d. 复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改
1
2
3# 复制
cd /softpackages/fastdfs-nginx-module-master/src
cp mod_fastdfs.conf /etc/fdfs/
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 连接超时时间
connect_timeout=10
# Tracker Server
tracker_server=ali:22122
# StorageServer 默认端口
storage_server_port=23000
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true
# Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/eva/fastdfs/path0
e. 复制FastDFS的部分配置文件到/etc/fdfs目录
1
2
3cd /softpackages/fastdfs-5.05/conf/
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
f. 为nginx添加一条FastDFS的路由映射(即在80端口Server节点下添加以下内容)
1
2vi /usr/local/nginx/conf/nginx.conf
1
2
3
4# 将这个内容加在80端口的server节点下
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}启动Nginx(需要以root身份执行),测试下载
1
2
3
4
5# 启动Nginx服务器
nginx -s start
# 查看监听状态
netstat -anpt | grep nginx在浏览器输入如下地址,查看下载结果。
http://服务器IP地址/group1/上传文件时返回的相应地址