Professional Documents
Culture Documents
环境准备
使用的系统软件
名称 说明
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/
安装 nginx
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
上传文件:/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
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
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 开始
可能遇到的问题
编写测试项目
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