You are on page 1of 13

FastDFS 部署及使用文档

环境准备

使用的系统软件

名称 说明
centos 7.x
libfatscommon FastDFS 分离出的一些公用函数包
FastDFS FastDFS 本体
fastdfs-nginx-module FastDFS 和 nginx 的关联模块
nginx nginx1.15.4

编译环境

yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel
wget vim gd-devel -y

安装 libfatscommon

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
tar zxf V1.0.43.tar.gz
cd libfastcommon-1.0.43/
./make.sh && ./make.sh install #编译安装
安装 FastDFS

cd ../ #返回上一级目录
wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
tar zxf V6.06.tar.gz
cd fastdfs-6.06/
./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

./root/fastdfs-6.06/conf/http.conf (源目录)
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/

#客户端文件,测试用

安装 fastdfs-nginx-module

cd ../ #返回上一级目录
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
tar zxvf V1.22.tar.gz
mv fastdfs-nginx-module-1.22 fastdfs-nginx-module
cp -r fastdfs-nginx-module /usr/local/src/

sudo cp ./fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

安装 nginx

wget http://nginx.org/download/nginx-1.15.4.tar.gz #下载 nginx 压缩包


tar -zxvf nginx-1.15.4.tar.gz #解压
cd nginx-1.15.4/
#添加 fastdfs-nginx-module 模块
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/
下面是在现有模块添加 fastdfs-nginx-module (注意:下载同样版本 yum 安装的 nginx )
注意不要 install 否则后覆盖
./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules
--add-module=/usr/local/src/fastdfs-nginx-module/src/ --conf-path=/etc/nginx/nginx.conf --error-log-
path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --
http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-
path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-
http_ssl_module --with-http_v2_module --with-http_realip_module --with-stream_ssl_preread_module --
with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --
with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-
http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-
http_slice_module --with-http_stub_status_module --with-http_auth_request_module --with-mail=dynamic
--with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --
with-debug --with-http_image_filter_module

make
make && make install #编译安装

单机部署

tracker 配置

vim /etc/fdfs/tracker.conf
#需要修改的内容如下
port=22122 # tracker 服务器端口(默认 22122,一般不修改)
base_path=/home/dfs # 存储日志和数据的根目录

storage 配置

vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000 # storage 服务端口(默认 23000,一般不修改)
base_path=/home/dfs # 数据和日志文件存储根目录
store_path0=/home/dfs # 第一个存储目录
tracker_server=10.32.186.230:22122 # tracker 服务器 IP 和端口
http.server_port=8888 # http 访问文件的端口(默认 8888,看情况修改,和 nginx 中保持一致)

client 测试

vim /etc/fdfs/client.conf
#需要修改的内容如下
base_path=/home/dfs
tracker_server=10.32.186.230:22122 #tracker 服务器 IP 和端口
启动 tracker 和 storage:

# 启动
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start
# 查看日志
tail -n10 ~/fdfs/logs/trackerd.log
tail -n10 ~/fdfs/logs/storaged.log

#保存后测试,返回 ID 表示成功 如:group1/M00/00/00/xx.tar.gz


测试
fdfs_test /etc/fdfs/client.conf upload nginx-1.16.1.tar.gz

fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz

fdfs_test /etc/fdfs/client.conf upload /home/rtsadm/j.jpg

    上传文件:/usr/bin/fdfs_upload_file  <config_file> <local_filename>
      下载文件:/usr/bin/fdfs_download_file <config_file> <file_id> [local_filename]
       删除文件:/usr/bin/fdfs_delete_file <config_file> <file_id>

http://10.32.186.230/group1/M00/00/00/CiC65l4WgtmAdqk3AAKBYA5fzTc243.jpg

配置 nginx 访问

vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=10.32.186.230:22122 #tracker 服务器 IP 和端口
url_have_group_name=true
store_path0=/home/dfs
#配置 nginx.config
vim /usr/local/nginx/conf/nginx.conf
#添加如下配置
server {
listen 8888; ## 该端口为 storage.conf 中的 http.server_port 相同
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#测试下载,用外部浏览器访问刚才已传过的 nginx 安装包,引用返回的 ID
http://10.32.186.230:8888/group1/M00/00/00/CiC65l4WgtmAdqk3AAKBYA5fzTc243.jpg
#弹出下载单机部署全部跑通

配置过程中有几点要注意:
确保配置中用到的目录已经创建了。比如~/fdfs/client、~/fdfs/data、~/fdfs/logs
确保各种配置文件之间引用的端口一直。比如:
mod_fastdfs.conf 文件中 tracker_server 的端口应该跟 tracker.conf 中 port 一致;
mod_fastdfs.conf 文件中 storage_server_port 的端口应该跟跟 storage.conf 中 port 一致;
其他配置或文件虽然不用修改,但是 fastdfs-nginx-module 模块会用到:
anti-steal.jpg
http.conf
mime.types

启动

防火墙

#不关闭防火墙的话无法使用
systemctl stop firewalld.service #关闭
systemctl restart firewalld.service #重启

tracker

/etc/init.d/fdfs_trackerd start #启动 tracker 服务

http://10.32.87.148:8888/group1/M00/00/00/CiBXlF6JpMWAWHhuAA_BttUvEqM_big.tar.gz # 重 启 动
tracker 服务
/etc/init.d/fdfs_trackerd stop #停止 tracker 服务
chkconfig fdfs_trackerd on #自启动 tracker 服务

storage

/etc/init.d/fdfs_storaged start #启动 storage 服务

/etc/init.d/fdfs_storaged restart #重动 storage 服务


/etc/init.d/fdfs_storaged stop #停止动 storage 服务
chkconfig fdfs_storaged on #自启动 storage 服务

nginx

/usr/local/nginx/sbin/nginx #启动 nginx


Pwd
#重启 nginx
/usr/local/nginx/sbin/nginx -s stop #停止 nginx

错误处理:
ngx_http_fastdfs_process_init pid=1449
[2020-01-13 17:58:40] ERROR - file: ini_file_reader.c, line: 1029, include file "http.conf" not exists, line:
"#include http.conf"
[2020-01-13 17:58:40] ERROR - file: /usr/local/src/fastdfs-nginx-module/src//common.c, line: 163, load
conf file "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
2020/01/13 17:58:40 [alert] 1448#0: worker process 1449 exited with fatal code 2 and cannot be
respawned

./root/fastdfs-6.06/conf/http.conf (源目录)
cp http.conf /etc/fdfs/
cp http.conf /etc/fdfs/

检测集群

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 会显示会有几台服务器 有 3 台就会 显示 Storage 1-Storage 3 的详细信息
说明

配置文件

tracker_server #有几台服务器写几个
group_name #地址的名称的命名
bind_addr #服务器 ip 绑定
store_path_count #store_path(数字)有几个写几个
store_path(数字) #设置几个储存地址写几个 从 0 开始

可能遇到的问题

如果不是 root 用户 你必须在除了 cd 的命令之外 全部加 sudo


如果不是 root 用户 编译和安装分开进行 先编译再安装
如果上传成功 但是 nginx 报错 404 先检查 mod_fastdfs.conf 文件中的 store_path0 是否一致
如果 nginx 无法访问 先检查防火墙 和 mod_fastdfs.conf 文件 tracker_server 是否一致
如果不是在/usr/local/src 文件夹下安装 可能会编译出错

java 实现 FastDFS 文件操作

下载 FastClient 并实现依赖 Jar 安装

1. 通过 idea 下载 FastClient 项目 https://github.com/happyfish100/fastdfs-client-java,


2. 切换到 V.17 分支
3. 修改项目 Java 编译版本,如图所示:
4. 对项目进行编译和构建

构建成功后,会在 maven 本地仓库出现相关 Jar 包,如图所示:

编写测试项目

1. 在项目增加 Pom 文件依赖配置,配置内容如下:


2. 增加 FastDFS 连接配置文件

3. 编写 FastClient 工具类,用于封装文件操作
4. 文件操作
 上传文件

上传成功返回 ID

 下载文件
下载成功

由于 group1/M00/02/21/oYYBAF7Dy_KAbxlPAApMXHBhQ_8354.jpg 生成的连接信息包含了机器的
IP 地址信息,会导致多个环境都可以打开这个连接看到图片
为了避免这种情况,打开 storage_ids.conf
100001 group1 10.32.186.230
更改:
client.conf
use_storage_id = true

mod_fastdfs.conf
use_storage_id = true

分布式部署
参考 https://blog.51cto.com/daisywei/1928922
sudo vim /etc/fdfs/storage_ids.conf

100001 group1 10.32.87.148


100002 group1 10.32.87.149

You might also like