FastDFS教程及解决方案
1、准备
本篇攻略教程基于: CentOS6.5 **外网云服务器 单机版**FastDFS
在配置 FastDFS 前需要准备:
gcc 的安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++
1.1 安装 Nginx
**1. **直接**官网**下载**.tar.gz****安装包**
**2. **使用**wget****命令下载**
wget -c [https://nginx.org/download/nginx-1.14.0.tar.gz](https://nginx.org/download/nginx-1.14.0.tar.gz)
解压后即可
1 | tar -zxvf nginx-1.14.0.tar.gz |
1.2 Nginx 相关配置及指令
仅需安装成功,毋需以下操作
**1.****运行测试报告指令**
systemctl status nginx.service
**2.****添加模块指令**
1 | ./configure \ |
3.验证模块指令模版
/usr/local/nginx/sbin/nginx -V
需要对应安装地址,默认目录指定为/var/temp/nginx 否则为/usr/local/nginx/
**4.****查找安装路径**
whereis nginx
5.**启停**nginx
1 | cd /usr/local/nginx/sbin/ |
或者
1 | service nginx start |
6.查询**nginx**进程
ps aux|grep nginx
1.2.1 配置 Nginx
1. **下载并解压**fastdfs-nginx-module
Clone or Download > https://github.com/happyfish100/fastdfs-nginx-module/
解压 tar -xf fastdfs-nginx-module.tar
**2. **添加**fastdfs-nginx-module****模块**
1 | ./configure \ |
- 注意:add-module=/data/wwwroot/ftp/XXX 是当前 fastdfs-nginx-module 解压出来的路径,由于我是 FTP 上传所以为此。请按部就班执行命令(本处使用 V1.16)
__
这里需要 http_stub_status_module 、 http_ssl_module 、 http_gzip_static_module 作为支撑,不然部分访问会 404 验证是否添加模块成功:
/usr/local/nginx/sbin/nginx -V
本Nginx安装在**/usr/local/ **请按部就班执行命令
1 | nginx version: nginx/1.14.0 |
看到以上提示即添加成功。
3、浅入理解 FastDFS
3.1. 什么是 FastDFS
FastDFS 是用 C 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
3.2 文件上传流程
2.3 文件下载流程
2.3 文件访问流程
客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
- **组名:**文件上传后所在的 storage 组名称,在文件上传成功后有 storage 服务器返回,需要客户端自行保存。
- **虚拟磁盘路径:**storage 配置的虚拟路径,与磁盘选项 store_path*对应。如果配置了 store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。
- **数据两级目录:**storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
- **文件名:**与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
2.4 FastDFS 图片服务器搭建
其拓扑图如下:
4、FastDFS 文件准备
4.1 文件准备
前面已经提及并加载了 fastdfs-nginx-module 这里是一个。
另外需要:
FastDFS_v5.08.tar
libfastcommon-1.0.7.tar.gz
还有先安装 libevent 工具
yum -y install libevent
5、安装 FastDFS
5.1 安装 libfastcommonV1.0.7 工具包`
`
- 解压缩
tar zxf libfastcommonV1.0.7.tar.gz
- 安装
1 | cd libfastcommonV1.0.7/ |
Install 后把/usr/lib64/libfastcommon.so 文件向/usr/lib/下复制一份
可以使用下列该指令完成寻找
ll libfastcommon*
5.2 安装 Tracker 服务
- 解压缩
tar zxf FastDFS_V5.08.tar.gz
- 安装
1 | cd libfastcommonV1.0.7/ |
Install 后在/usr/bin/目录下有以 fdfs 开头的文件都是编译出来的
Install 后的配置文件都放到/etc/fdfs 文件夹
可以使用下列该指令完成新建文件夹
mkdir fdfs/
把/data/wwwroot/ftp/FastDFS/conf 目录下的所有的配置文件都复制到/etc/fdfs 下
1 | cd /data/wwwroot/ftp/FastDFS/conf |
5.3 配置并启动 Tracker 服务
修改/etc/fdfs/tracker.conf 文件 vi tracker.conf
编辑代码 键盘按下“i”键入,开始修改
1 | # is this config file disabled |
- 值得注意,base_path=换成你需要的存放服务路径,实际存在的
修改完毕后
键盘按下“ESC”键入,结束修改
并且输入
:wq
保存并退出
或者
:q!
强制关闭并退出
5.4 启动 Tracker 服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
5.5 安装 Storage 服务
单机版无需另外安装 Storage 服务
5.6 配置并启动 Storage 服务
修改/etc/fdfs/storage.conf 文件 vi storage.conf
编辑代码 键盘按下“i”键入,开始修改
值得注意几个地方:
1 | # the port of the web server on this storage server |
- 注意,Server 的 port 端口为 8888
1 | # true for binding the address configed by above parameter: "bind_addr" |
base_path 依旧换成你需要的存放图片路径,实际存在的
1 | # store_path#, based 0, if store_path0 not exists, it's value is base_path |
base_path0 换成你需要的首要存放图片路径,于上面相对应,实际存在的
1 | # tracker_server can ocur more than once, and tracker_server format is |
- 注意 Tracker 服务器 IP 地址填写外网地址,注意端口 22122
以上结束修改。
5.7 启动 Storage 服务
/usr/bin/fdfs_trackerd /etc/fdfs/Storage.conf restart
5.8 配置 Client 连接服务
修改/etc/fdfs/client.conf 文件 vi client.conf
编辑代码 键盘按下“i”键入,开始修改
1 | # connect timeout in seconds |
base_path 依旧换成你需要的存放连接池的路径,实际存在的
- 注意 Tracker 服务器 IP 地址填写外网地址,注意端口 22122
以上结束修改。
5.9 fastdfs-nginx-module 再配置
回看第二章步骤,我们已经成功编译到**NGINX**中并且验证添加模块成功,可以进行以下操作: 将/data/wwwroot/ftp/fastdfs-nginx-module/src/mod_fastdfs.conf 文件复制到/etc/fdfs 目录下再修改 vi mod_fastdfs.conf
编辑代码 键盘按下“i”键入,开始修改 值得注意几个地方:
1 | # specify storage ids filename, can use relative or absolute path |
- 注意的是,Tracker 服务器 IP 地址填写外网地址,注意端口 22122,而后 url_have_group_name 需要开启不然 HTTP 访问 404
1 | # the base path to store log files |
base_path 换成你需要的存放日志路径,实际存在的
1 | # store_path#, based 0, if store_path0 not exists, it's value is base_path |
base_path 还是换成你需要的首要存放图片路径,于上面相对应,实际存在的
以上结束修改。
5.10 配置 Nginx
进入存放 Nginx 配置根目录 cd /usr/local/nginx/conf
编辑配置文件 vi nginx.conf
值得注意几个地方
1 | user root; |
开头添加 ROOT 权限
1 | server { |
添加一个 listen
1 | location /group1/M00/{ |
最后添加一个 Server,以上操作均无报错或者异常请执行复制:
/usr/lib64/libfastcommon.so 文件向/usr/lib/下复制一份
cp /usr/lib64/libfdfsclient.so /usr/lib/
然后请记得 Nginx 服务重启!
6、测试 FastDFS
1. 测试 Client 连接服务
上传一个图片(.JPG)和文字(.TXT)到 FTP 文件夹
/usr/bin/fdfs_test /etc/fdfs/client.conf upload XXX.jpg
/usr/bin/fdfs_test /etc/fdfs/client.conf upload XXX.txt
执行命令如下:
1 | This is FastDFS client test program v5.08 |
若看到以上的滚动执行,现在可以跳到浏览器,键入下面的 URL
http://139.129.109.222/group1/M00/00/00/i4Ee3lsU4GWAbt8wABBiM_6UMxA671.jpg
看得到图片即表示搭建完毕。
7、结语 — 问题解决方案
Q1 **访问图片报**404**,而文字却没有**
详细请查看 Nginx 错误和执行文件,解决问题的根本所在 切入点 Nginx 配置文件 conf
1 | location ~ .*\.(gif|jpeg|png|bmp|swf|flv|mp4|ico|jpg)$ { |
查看是否有此延迟死亡配置,将 JPG 删除掉,即可成功执行。
更多问题咨询请留言,有幸看到即回复 :-)