简介
FastDFS是一个开源的分布式文件系统,官方介绍有详细的介绍,不多赘述。本文主要是FastDFS的搭建及采坑指南。
Step By Step Guide
系统
编译环境
按需安装,这里是针对新的ubuntu系统
1
| $ apt-get install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim
|
磁盘目录
说明 |
位置 |
所有安装包 |
/usr/local/src |
数据存储位置 |
/data/dfs/ |
1 2
| $ mkdir /data/dfs $ cd /usr/local/src
|
安装libfatscommon
1 2 3 4
| $ wget https://github.com/happyfish100/libfastcommon/archive/master.zip $ unzip master.zip $ cd libfastcommon-1.0.39/ $ ./make.sh && ./make.sh install
|
安装FastDFS
1 2 3 4 5 6 7 8 9 10 11
| $ cd ../ $ wget https://github.com/happyfish100/fastdfs/archive/master.zip $ unzip master.zip $ cd fastdfs-master/ $ ./make.sh && ./make.sh install
$ cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf $ cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf $ cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf $ cp /usr/local/src/fastdfs-master/conf/http.conf /etc/fdfs/ $ cp /etc/nginx/mime.types /etc/fdfs/
|
安装fastdfs-nginx-module
官网的文档,是针对没有安装过Nginx的机器,重新编译了一遍Nginx,把module直接编译进Nginx了。但是针对已经安装Nginx的服务器来说,显然是不好的。
根据Nginx官方文档-编译第三方动态模块,编译了fastdfs-nginx-module
,以供已存在的Nginx使用。
我已经编译好了fastdfs-nginx-module
,可以直接下载,并跳到加载并使用模块,如果想知其所以然,可以往下看。
准备fastdfs-nginx-module
源码包
1 2 3
| $ cd ../ $ wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip $ unzip master.zip
|
获取对应版本的Nginx源码包
1 2 3 4
| $ nginx -v nginx version: nginx/1.14.2 $ wget http://nginx.org/download/nginx-1.14.2.tar.gz $ tar -xzvf nginx-1.14.2.tar.gz
|
编译动态模块
1 2 3
| $ cd nginx-1.14.2/ $ ./configure --with-compat --add-dynamic-module=/usr/local/src/fastdfs-nginx-module-master/src $ make modules
|
将模块库(.so文件)复制到/etc/nginx/modules
1
| $ cp ngx_http_fastdfs_module.so /etc/nginx/modules/
|
加载并使用模块
Tips: 要将模块加载到Nginx,在nginx.conf文件开头添加load_module
命令
1 2 3 4
| $ vim /etc/nginx/nginx.conf
load_module modules/ngx_http_fastdfs_module.so;
|
添加FastDFS配置使模块生效
1 2 3 4 5 6 7 8 9 10 11 12 13
| $ vim /etc/nginx/conf.d/fastdfs.conf
server { listen 8888; server_name {your_domain}; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
|
单机部署
这里只描述下单机环境的部署方式,集群在官方文档有,没有实际使用过。
tracker配置
1 2 3 4 5 6
| $ vim /etc/fdfs/tracker.conf
bind_addr={你的内网IP} base_path=/data/dfs
port=22122
|
storage配置
1 2 3 4 5 6 7 8
| $ vim /etc/fdfs/storage.conf
base_path=/data/dfs store_path0=/data/dfs tracker_server={tracker.bind_addr}:{tracker.port} http.server_port=8888
port=23000
|
client测试
1 2 3 4 5 6 7 8
| $ vim /etc/fdfs/client.conf
base_path=/data/dfs tracker_server={tracker.bind_addr}:{tracker.port}
$ fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.14.2.tar.gz group1/M00/00/00/CgoKvlyUmi-AMVKDAA9-WL9wzEw.tar.gz
|
配置nginx访问
1 2 3 4 5 6 7 8 9 10
| vim /etc/fdfs/mod_fastdfs.conf
tracker_server={tracker.bind_addr}:{tracker.port} url_have_group_name=true store_path0=/data/dfs
$ nginx -s reload ngx_http_fastdfs_set pid=8364 $ lsof -i:8888 nginx 31061 root 10u IPv4 20389985 0t0 TCP *:8888 (LISTEN)
|
测试下载
在浏览器输入
1
| http://{IP}:8888/group1/M00/00/00/CgoKvlyUmi-AMVKDAA9-WL9wzEw.tar.gz?filename=nginx-1.14.2.tar.gz //刚才上传返回的ID
|
弹出下载文件框,说明部署成功!

相关命令
防火墙
1
| $ sudo ufw enable|disable
|
tracker
1 2 3 4
| $ /etc/init.d/fdfs_trackerd start $ /etc/init.d/fdfs_trackerd restart $ /etc/init.d/fdfs_trackerd stop $ update-rc.d fdfs_trackerd enable
|
storage
1 2 3 4
| $ /etc/init.d/fdfs_storaged start $ /etc/init.d/fdfs_storaged restart $ /etc/init.d/fdfs_storaged stop $ update-rc.d fdfs_storaged enable
|
nginx
1 2 3
| $ service nginx start $ nginx -s reload $ nginx -s stop
|
问题
执行nginx -s reload 后,访问502
1 2
| $ vim /var/log/nginx/error.log
|
如果发现错误日志:include file "http.conf" not exists, line: "#include http.conf"
,fastdfs nginx模块缺少配置文件,执行以下命令补全配置文件即可。
1 2
| $ cp /usr/local/src/fastdfs-master/conf/http.conf /etc/fdfs/ $ cp /etc/nginx/mime.types /etc/fdfs/
|