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
2
tar -zxvf nginx-1.14.0.tar.gz
cd nginx-1.14.0

1.2 Nginx 相关配置及指令

仅需安装成功,毋需以下操作
1.运行测试报告指令
systemctl status nginx.service
**
2.添加模块指令

1
2
3
4
5
6
./configure \
> --with-http_stub_status_module \
> --with-http_ssl_module \
> --with-http_gzip_static_module \
make
make install

**
3.验证模块指令模版
/usr/local/nginx/sbin/nginx -V  需要对应安装地址,默认目录指定为/var/temp/nginx  否则为/usr/local/nginx/

4.查找安装路径
whereis nginx

5.启停 nginx

1
2
3
4
5
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s quit
./nginx -s reload

或者

1
2
3
service nginx start
service nginx restart
service nginx reload

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
2
3
4
5
6
7
./configure \
> --with-http_stub_status_module \
> --with-http_ssl_module \
> --with-http_gzip_static_module \
> --add-module=/data/wwwroot/ftp/fastdfs-nginx-module/src
make
make install
  • 注意: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
2
3
4
5
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=/data/wwwroot/ftp/fastdfs-nginx-module/src

看到以上提示即添加成功。


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
2
3
cd libfastcommonV1.0.7/
./make.sh
./make.sh install

Install 后把/usr/lib64/libfastcommon.so 文件向/usr/lib/下复制一份

可以使用下列该指令完成寻找

ll libfastcommon*

5.2 安装 Tracker 服务

  • 解压缩

tar zxf FastDFS_V5.08.tar.gz

  • 安装
1
2
3
cd libfastcommonV1.0.7/
./make.sh
./make.sh install

Install 后在/usr/bin/目录下有以 fdfs 开头的文件都是编译出来的
Install 后的配置文件都放到/etc/fdfs 文件夹

可以使用下列该指令完成新建文件夹

mkdir fdfs/
把/data/wwwroot/ftp/FastDFS/conf 目录下的所有的配置文件都复制到/etc/fdfs 下

1
2
cd /data/wwwroot/ftp/FastDFS/conf
cp * /etc/fdfs

5.3 配置并启动 Tracker 服务

修改/etc/fdfs/tracker.conf 文件  vi tracker.conf  编辑代码 键盘按下“i”键入,开始修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# is this config file disabled
# false for enabled
# true for disabled
disabled=false
# bind an address of this host
# empty for bind all addresses of this host
bind_addr=
# the tracker server port
port=22122
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=60
# the base path to store data and log files
base_path=/data/wwwroot/fastdfs/tracker
  • 值得注意,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
2
# the port of the web server on this storage server
http.server_port=8888
  • 注意,Server 的 port 端口为 8888
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# true for binding the address configed by above parameter: "bind_addr"
# false for binding any address of this host
client_bind=true
# the storage server port
port=23000
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=60
# heart beat interval in seconds
heart_beat_interval=30
# disk usage report interval in seconds
stat_report_interval=60
# the base path to store data and log files
base_path=/data/wwwroot/fastdfs/storage

base_path 依旧换成你需要的存放图片路径,实际存在的

1
2
3
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/data/wwwroot/fastdfs/storage

base_path0 换成你需要的首要存放图片路径,于上面相对应,实际存在的

1
2
3
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=139.129.30.222:22122
  • 注意 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
2
3
4
5
6
7
8
9
10
11
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=60
# the base path to store log files
base_path=/data/wwwroot/fastdfs/client
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=139.129.30.222:22122

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V1.13
storage_ids_filename = storage_ids.conf
# FastDFS tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=139.129.30.222:22122
# the port of the local storage server
# the default value is 23000
storage_server_port=23000
# the group name of the local storage server
group_name=group1
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true
  • 注意的是,Tracker 服务器 IP 地址填写外网地址,注意端口 22122,而后 url_have_group_name 需要开启不然 HTTP 访问 404
1
2
# the base path to store log files
base_path=/tmp

base_path 换成你需要的存放日志路径,实际存在的

1
2
3
4
5
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
store_path0=/data/wwwroot/fastdfs/storage
#store_path1=/home/yuqing/fastdfs1

base_path 还是换成你需要的首要存放图片路径,于上面相对应,实际存在的

以上结束修改。

5.10 配置 Nginx

进入存放 Nginx 配置根目录  cd /usr/local/nginx/conf  编辑配置文件  vi nginx.conf  值得注意几个地方

1
2
user root;
worker_processes auto;

开头添加 ROOT 权限

1
2
3
4
server {
listen 80;
listen 8888;
server_name _;

添加一个 listen

1
2
3
location /group1/M00/{
ngx_fastdfs_module;
}

最后添加一个 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
This is FastDFS client test program v5.08
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.
[2018-06-04 14:47:01] DEBUG - base_path=/data/wwwroot/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=139.129.109.222, port=23000
group_name=group1, ip_addr=139.129.109.222, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/i4Ee3lsU4GWAbt8wABBiM_6UMxA671.jpg
source ip address: 139.129.109.222
file timestamp=2018-06-04 14:47:01
file size=1073715
file crc32=4271125264
example file url: http://139.129.109.222/group1/M00/00/00/i4Ee3lsU4GWAbt8wABBiM_6UMxA671.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/i4Ee3lsU4GWAbt8wABBiM_6UMxA671_big.jpg
source ip address: 139.129.109.222
file timestamp=2018-06-04 14:47:01
file size=1073715
file crc32=4271125264
example file url: http://139.129.109.222/group1/M00/00/00/i4Ee3lsU4GWAbt8wABBiM_6UMxA671_big.jpg

若看到以上的滚动执行,现在可以跳到浏览器,键入下面的 URL

http://139.129.109.222/group1/M00/00/00/i4Ee3lsU4GWAbt8wABBiM_6UMxA671.jpg

看得到图片即表示搭建完毕。


7、结语  —  问题解决方案

Q1 访问图片报 404,而文字却没有
详细请查看 Nginx 错误和执行文件,解决问题的根本所在 切入点 Nginx 配置文件 conf

1
2
3
4
location ~ .*\.(gif|jpeg|png|bmp|swf|flv|mp4|ico|jpg)$ {
expires 30d;
access_log off;
}

查看是否有此延迟死亡配置,将 JPG 删除掉,即可成功执行。


更多问题咨询请留言,有幸看到即回复 :-)

作者

Catooilg

发布于

2020-09-02

更新于

2023-02-05

许可协议

评论