FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client):
如图所示,基本架构图
其实,我们的Tracker
和Storage
服务可以安装在不同的服务器上,当然安装在同一台服务器也可。Tracker是作为管理者,主要做调度工作。Storage就是主要用来存放图片文件的地方。
client询问tracker上传到的storage。
tracker返回一台可用的storage。
client直接和storage通讯完成文件上传,返回文件信息。
(网图)
client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
tracker返回一台可用的storage;
client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
(网图)
地址:https://github.com/happyfish100,正常来讲需要 fastdfs
和 libfastcommon
,如果需要进行图片预览,就需要fastdfs-nginx-module
,另外还需要安装好nginx来做反向代理。
版本自己来选择即可,我这里是 fastdfs是6.06
版本,libfastcommon是1.0.43
版本。
下载方式一:直接使用 wget 下载,如果太慢,可以去github下载,然后上传到服务器上即可。
wget -c "https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz" \
-O fastdfs-6.06.tar.gz
wget -c "https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz" \
-O libfastcommon-1.0.43.tar.gz
wget -c "https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz" \
-O fastdfs-nginx-module-1.22.tar.gz
wget -c http://nginx.org/download/nginx-1.17.7.tar.gz
下载方式二:直接在github下载。
需要先安装基础环境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
yum -y install libevent
再安装libfastcommon函数库。
tar -zxvf libfastcommon-1.0.43.tar.gz
进入libfastcommon-1.0.43目录,编译然后安装
./make.sh
./make.sh install
检查一下
ls /usr/lib64|grep libfastcommon
ls /usr/lib|grep libfastcommon
出现libfastcommon.so
即可。
ok,然后fastdfs
tar -zxvf fastdfs-6.06.tar.gz
进入fastdfs目录,编译安装
可以先看一下fastdfs的安装配置目录所在信息,make.sh文件中
./make.sh
./make.sh install
在/etc/fdfs目录中,这个目录中都是一些配置文件
直接复制一个tracker.conf.sample,改名为 tracker.conf
cp tracker.conf.sample tracker.conf
编辑tracker.conf,vim tracker.conf
。
# 基本工作目录
base_path=/fastdfs/tracker
# 设置store_path, 0:是轮询方式 2:选择剩余最大的目录存放文件,根据自己的需要选择即可
store_path = 0
题外话:如果设置了store_path是轮询方式,但是后面测试上传文件的时候总是只上传到一个文件夹中,那么可能是使用命令测试上传的 指令没有选对。一下两种上传方式,一种是测试上传的,一种是普通文件的。可以使用普通上传即可。(此部分读者可以略过,因为如果按照本文上传方式,就是使用的普通方式。)
# 测试上传
/usr/bin/fdfs_test /etc/fdfs/client.conf upload a.jpg
# 普通上传的(推荐,此上传方式会被tracker.conf中的store_path影响,到底是选择哪个存储路径)
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.jpg
base_path配置的路径一定要存在,否则可能会报错,创建个目录
mkdir -p /fastdfs/tracker
复制一个storage.conf.sample改名为 storage.conf
cp storage.conf.sample storage.conf
编辑文件vim storage.conf
# 修改组名
group_name=wlhGroup
# 修改storage的工作空间(base_path路径必须存在)
base_path=/fastdfs/storage
# 配置多存储路径的数量
store_path_count = 2
# 修改storage的多存储空间
store_path0=/fastdfs/storage/d0
store_path1=/fastdfs/storage/d1
# 修改tracker的地址和端口号,用于心跳
tracker_server=192.168.0.101:22122
# 配置http服务端口,和nginx中的监听端口要一致
http.server_port = 80
上面配置的base_path并不是文件存储的位置,而是storage工作的路径,storage启动时,该路径下会生成data
和logs
目录,data里面是工作的一些pid文件等,logs里面是日志信息(排查错误时可以看这个)。
如上面配置的storage.conf文件的base_path(工作目录)和 store_path(文件存储目录)
注意base_path和store_path{index}的目录一定要存在,创建一下。
mkdir -p /fastdfs/storage
mkdir -p /fastdfs/storage/d0
mkdir -p /fastdfs/storage/d1
启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
注意:tracker和storage的相关文件都在我们之前配置的base_path
中,包含数据、日志等,当需要排查错误时,一定要记得去查看下日志!!!
按照我们以上配置的路径,tracker的日志文件在 /fastdfs/tracker/logs/trackerd.log
文件中
storage的日志文件在/fastdfs/storage/logs/storaged.log
文件中
复制修改修改client.conf文件,改好配置
复制
cp client.conf.sample client.conf
修改
vim client.conf
内容如下:
base_path = /fastdfs/client
tracker_server = 192.168.0.101:22122
要记得把base_path的目录创建一下
mkdir -p /fastdfs/client
随意上传一个文件
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.jpg
查看结果
看到以上信息,说明上传是没有问题了。包括我们设置的group_name都返回了。
如果有图片预览的需求,需要把nginx
相关的配置也搞上。
安装pcre
yum -y install pcre pcre-devel
解压
tar -zxvf nginx-1.17.7.tar.gz
tar -zxvf fastdfs-nginx-module-1.22.tar.gz
进入nginx目录后,添加 http_stub_status_module 模块
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
进入fastdfs-nginx-module-1.22/src
目录,编辑配置文件,将文件中路径 /usr/local换成 /usr
vim config
:%s+/usr/local+/usr
进入到nginx的目录中,添加fastdfs-nginx-module。这里注意fastdfs-nginx-module的安装位置.改成你自己的。
./configure --add-module=/env/fastdfs-nginx-module-1.22/src/
然后编译安装
make && make install
复制并修改fastdfs-ngin-module中的配置文件
cp /env/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
修改为:
base_path和store_path和storage.conf中尽量一致。
connect_timeout=10
# tracker的地址
tracker_server=192.168.0.101:22122
# url中包含group_name
url_have_group_name = true
# 配置group_name,要和 storage中配置的一样
group_name=wlhGroup
store_path_count=2
base_path=/fastdfs/storage
store_path0=/fastdfs/storage/d0
store_path1=/fastdfs/storage/d1
进入fastdfd源码conf目录,将http.conf,mime.types两个文件拷贝到/etc/fdfs/目录下
cp /env/fastdfs-6.06/conf/http.conf /env/fastdfs-6.06/conf/mime.types /etc/fdfs/
编辑nginx配置
vim /usr/local/nginx/conf/nginx.conf
listen 80;
server_name 192.168.0.101;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location ~/wlhGroup/M00 {
root /fastdfs/storage/d0;
ngx_fastdfs_module;
}
location ~/wlhGroup/M01 {
root /fastdfs/storage/d1;
ngx_fastdfs_module;
}
启动nginx
/usr/local/nginx/sbin/nginx
上传一个文件
看到返回了地址,我们去浏览器访问一下。没问题
忠告:在开发中,可能会遇见很多奇奇怪怪的问题,一定要学会看日志!!再去查阅资料,否则会导致根本无从下手,效率极低。
# 监控服务器状态命令:fdfs_monitor
/usr/bin/fdfs_monitor /etc/fdfs/client.conf
# 上传文件
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.jpg
# 下载文件
/usr/bin/fdfs_download_file /etc/fdfs/client.conf group_name/文件地址
# 删除文件
/usr/bin/fdfs_delete_file /etc/fdfs/client.conf group_name/文件地址
# 启动 tracker服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
# 重启/终止 tracker服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart/stop
# 启动 storage服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
# 重启/终止 storage服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart/stop
如果重启/停止tracker或storage服务没有生效,那么直接Kill杀掉进程即可。
要记得先把nginx的目录配置到 环境变量中。
vim /etc/profile
export PATH=$PATH:/usr/local/nginx/sbin
记得刷一下
source /etc/profile
常用命令
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop #强制停止Nginx服务
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
killall nginx #杀死所有nginx进程
可以参考这篇文章fastDFS如何卸载
用FastDFS一步步搭建文件管理系统
FastDFS原理详解及部署使用
Linux搭建FastDFS环境