news 2026/8/19 22:40:15

CentOS7 部署 FastDFS 5.11 + Nginx 1.14 文件服务器(完整实践)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS7 部署 FastDFS 5.11 + Nginx 1.14 文件服务器(完整实践)

文章目录

  • CentOS7 部署 FastDFS + Nginx 文件服务器(完整实践)
  • 一、FastDFS 简介
  • 二、实验环境
  • 三、软件版本
  • 四、安装包下载
  • 五、环境准备
  • 六、安装 libfastcommon
  • 七、安装 FastDFS
  • 八、配置 FastDFS
  • 九、配置 Tracker
  • 十、配置 Storage
  • 十一、配置 Client
  • 十二、启动 FastDFS
  • 十三、配置开机启动
  • 十四、部署 Nginx
  • 十五、编译 Nginx + FastDFS 模块
  • 十六、配置 fastdfs-nginx-module
  • 十七、配置 Nginx
  • 十八、启动 Nginx
  • 十九、使用 Supervisor 管理 Nginx
  • 二十、测试文件上传
  • 二十一、查看 FastDFS 状态
  • 总结
  • 致此完毕,下边是补充
  • 二十二、FastDFS 目录结构解析
    • 为什么有 256 × 256 个目录?
      • 避免单目录文件过多
  • 二十三、FastDFS 文件上传流程
    • ① Client 请求 Tracker
    • ② Client 上传文件到 Storage
    • ③ Client 保存文件地址
  • 二十四、生产环境最佳实践
    • 1 Tracker 高可用
    • 2 Storage 多节点
    • 3 存储磁盘独立
    • 4 Nginx 负载均衡
    • 5 日志和监控
  • 二十五、FastDFS 常见坑(90%的人会踩)
    • 1 Nginx 无法访问文件
    • 2 storage.conf 与 mod_fastdfs.conf 不一致
    • 3 tracker 地址错误
    • 4 SELinux 或防火墙问题
    • 5 文件描述符不足
    • 6 Nginx 编译模块错误
    • 7 Storage 没有注册到 Tracker
  • 结语

CentOS7 部署 FastDFS + Nginx 文件服务器(完整实践)


一、FastDFS 简介

FastDFS是一个开源的分布式文件系统,主要用于解决大规模文件存储问题,例如:

  • 图片存储
  • 视频存储
  • 文档存储
  • 对象存储

FastDFS 具有以下特点:

  • 高性能
  • 支持海量文件存储
  • 支持负载均衡
  • 支持横向扩展
  • 部署简单

FastDFS 主要由三个角色组成:

组件作用
Tracker调度服务器,负责管理 Storage
Storage实际存储文件
Client上传和下载文件

系统架构示意:

Client │ ▼ Tracker Server │ ▼ Storage Server │ ▼ File Storage

通常情况下我们会通过Nginx + FastDFS 模块来提供 HTTP 访问能力。


二、实验环境

项目信息
操作系统CentOS 7.9
CPU4 Core
内存8G
磁盘100G
IP192.168.1.1

三、软件版本

软件版本
FastDFS5.11
libfastcommon1.0.39
fastdfs-nginx-module1.20
nginx1.14.2

四、安装包下载

mkdir-p/data/bag/fastdfs/cd/data/bag/fastdfs/
wgethttps://github.com/happyfish100/fastdfs/archive/refs/tags/V5.11.tar.gzwgethttps://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.39.tar.gzwgethttps://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.20.tar.gzwgethttp://nginx.org/download/nginx-1.14.2.tar.gz

五、环境准备

安装依赖:

yum-yinstallgcc gcc-c++ libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel libevent libevent-devel perlunzipnet-tools

六、安装 libfastcommon

libfastcommon 是 FastDFS 的基础依赖库。

tarxf V1.0.39.tar.gzcdlibfastcommon-1.0.39 ./make.sh ./make.shinstall

七、安装 FastDFS

tarxf V5.11.tar.gzcdfastdfs-5.11 ./make.sh ./make.shinstall

检查是否安装成功:

ls/usr/bin|grepfdfs

正常情况下会看到类似命令:

fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_crc32 fdfs_delete_file fdfs_download_file fdfs_file_info fdfs_monitor fdfs_storaged fdfs_test fdfs_test1 fdfs_trackerd fdfs_upload_appender fdfs_upload_file

八、配置 FastDFS

进入配置目录:

cd/etc/fdfs

备份示例配置:

mkdirbakmv*sample bak/

修改系统文件描述符限制:

ulimit-n25600

创建 FastDFS 数据目录:

mkdir-p/data/app/fastdfs

需要修改三个配置文件:

client.conf storage.conf tracker.conf

九、配置 Tracker

编辑:

vim/etc/fdfs/tracker.conf

完整配置:

disabled=false bind_addr= port=22122 connect_timeout=30 network_timeout=60 ## 路径 base_path=/data/app/fastdfs max_connections=25600 accept_threads=1 work_threads=20 store_lookup=2 store_group=group2 store_server=0 store_path=0 download_server=0 reserved_storage_space = 10% log_level=info run_by_group= run_by_user= allow_hosts=* sync_log_buff_interval = 10 check_active_interval = 120 thread_stack_size = 64KB storage_ip_changed_auto_adjust = true storage_sync_file_max_delay = 86400 storage_sync_file_max_time = 300 use_trunk_file = false slot_min_size = 256 slot_max_size = 16MB trunk_file_size = 64MB trunk_create_file_advance = false trunk_create_file_time_base = 02:00 trunk_create_file_interval = 86400 trunk_create_file_space_threshold = 20G trunk_init_check_occupying = false trunk_init_reload_from_binlog = false trunk_compress_binlog_min_interval = 0 use_storage_id = false storage_ids_filename = storage_ids.conf id_type_in_filename = ip store_slave_file_use_link = false rotate_error_log = false error_log_rotate_time=00:00 rotate_error_log_size = 0 log_file_keep_days = 0 use_connection_pool = false connection_pool_max_idle_time = 3600 http.server_port=8080 http.check_alive_interval=30 http.check_alive_type=tcp http.check_alive_uri=/status.html

说明:

  • base_path:日志和数据存储目录
  • port:tracker 服务端口

十、配置 Storage

编辑:

vim/etc/fdfs/storage.conf

完整配置:

disabled=false group_name=group1 bind_addr= client_bind=true port=23000 connect_timeout=30 network_timeout=60 heart_beat_interval=30 stat_report_interval=60 ## 路径 base_path=/data/app/fastdfs max_connections=25600 buff_size = 256KB accept_threads=2 work_threads=20 disk_rw_separated = true disk_reader_threads = 5 disk_writer_threads = 5 sync_wait_msec=50 sync_interval=0 sync_start_time=00:00 sync_end_time=23:59 write_mark_file_freq=500 store_path_count=1 ## 路径 store_path0=/data/app/fastdfs subdir_count_per_path=256 ## 地址 tracker_server=192.168.1.1:22122 log_level=info run_by_group= run_by_user= allow_hosts=* file_distribute_path_mode=0 file_distribute_rotate_count=100 fsync_after_written_bytes=0 sync_log_buff_interval=10 sync_binlog_buff_interval=10 sync_stat_file_interval=300 thread_stack_size=512KB upload_priority=10 if_alias_prefix= check_file_duplicate=0 file_signature_method=hash key_namespace=FastDFS keep_alive=0 use_access_log = false rotate_access_log = false access_log_rotate_time=00:00 rotate_error_log = false error_log_rotate_time=00:00 rotate_access_log_size = 0 rotate_error_log_size = 0 log_file_keep_days = 0 file_sync_skip_invalid_record=false use_connection_pool = true connection_pool_max_idle_time = 3600 http.domain_name= http.server_port=8888

说明:

参数说明
group_name存储组名称
store_path0文件存储路径
tracker_servertracker 地址

十一、配置 Client

编辑:

vim/etc/fdfs/client.conf

配置:

connect_timeout=30 network_timeout=60 ## 路径 base_path=/data/app/fastdfs ## 地址 tracker_server=192.168.1.1:22122 log_level=info use_connection_pool = true connection_pool_max_idle_time = 3600 load_fdfs_parameters_from_tracker=false use_storage_id = false storage_ids_filename = storage_ids.conf http.tracker_server_port=80

十二、启动 FastDFS

启动 Tracker:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

启动 Storage:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

检查服务:

ps-ef|grepfdfsnetstat-nltp|grepfdfs


十三、配置开机启动

编辑:

/etc/rc.local

添加:

#!/bin/bash/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

赋予执行权限:

chmod+x /etc/rc.d/rc.local

十四、部署 Nginx

解压源码:

cd/data/bag/fastdfstarxf V1.20.tar.gztarxf nginx-1.14.2.tar.gz

十五、编译 Nginx + FastDFS 模块

编辑fastdfs-nginx-module-1.20的config,只改这两行,其他不变

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/" ··· CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

进入 nginx 目录:

cdnginx-1.14.2

编译:

./configure--prefix=/data/app/nginx --add-module=/data/bag/fastdfs/fastdfs-nginx-module-1.20/src

安装:

makemakeinstall

十六、配置 fastdfs-nginx-module

复制配置:

cpfastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/

编辑:

vim/etc/fdfs/mod_fastdfs.conf

配置:

#include http.conf connect_timeout=2 network_timeout=30 base_path=/tmp load_fdfs_parameters_from_tracker=true storage_sync_file_max_delay = 86400 use_storage_id = false storage_ids_filename = storage_ids.conf # 地址 tracker_server=192.168.1.1:22122 storage_server_port=23000 group_name=group1 url_have_group_name = true store_path_count=1 # 路径 store_path0=/data/app/fastdfs log_level=info log_filename= response_mode=proxy if_alias_prefix= flv_support = true flv_extension = flv group_count = 0

复制 HTTP 配置文件:

cpfastdfs-5.11/conf/http.conf /etc/fdfs/cpfastdfs-5.11/conf/mime.types /etc/fdfs/

十七、配置 Nginx

编辑:

vim/data/app/nginx/conf/nginx.conf

配置:

user root; worker_processes 1; error_log logs/error.log debug; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; server { listen 8888; access_log logs/host.access.log main; location ~/group([0-9])/M00 { alias /data/app/fastdfs/data; ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

十八、启动 Nginx

检测配置:

/data/app/nginx/sbin/nginx-t

启动:

/data/app/nginx/sbin/nginx

查看端口:

netstat-nltp|grep8888

十九、使用 Supervisor 管理 Nginx

安装:

yuminstall-yepel-release yuminstall-ysupervisor

启动:

systemctlenablesupervisord--now

配置:

/etc/supervisord.d/nginx.ini
[program:nginx] command=/data/app/nginx/sbin/nginx -g 'daemon off;' directory=/data/app/nginx autostart=true autorestart=true # 为true,则stderr/stdout的日志会被写入stdout/stdout日志文件中 redirect_stderr=true redirect_stdout=true priority=10 stdout_logfile=/data/app/nginx/nginx.log stderr_logfile=/data/app/nginx/nginx.log # 最大日志文件大小为 10MB stdout_logfile_maxbytes=10MB # 保留 5 个备份文件 stdout_logfile_backups=5 # 最大错误日志文件大小为 10MB stderr_logfile_maxbytes=10MB # 保留 5 个备份错误日志文件 stderr_logfile_backups=5

加载配置:

supervisorctl update

二十、测试文件上传

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf aaa.jpeg

返回结果:


二十一、查看 FastDFS 状态

fdfs_monitor /etc/fdfs/client.conf

查看版本:

fdfs_monitor /etc/fdfs/client.conf|grepversion

总结

至此,一个完整的FastDFS + Nginx 文件服务器就部署完成了。

整体架构如下:

Client │ ▼ Nginx │ ▼ FastDFS Storage │ ▼ 文件存储

优点:

  • 高性能
  • 支持海量文件
  • 可横向扩展
  • 适合图片/视频存储

致此完毕,下边是补充


二十二、FastDFS 目录结构解析

在上传文件之后,我们会发现 Storage 的存储目录结构比较复杂,例如:

/data/app/fastdfs/data/00/00/CgABk2Yxxx.jpg

完整结构一般类似:

/data/app/fastdfs ├── data │ ├── 00 │ │ ├── 00 │ │ │ ├── CgABk2Yxxx.jpg │ │ │ ├── CgABk2Yxxx.meta │ │ │ └── ... │ ├── 00 │ ├── 01 │ └── ... ├── logs └── storage_stat.dat

目录说明:

目录作用
base_pathFastDFS 的运行目录
data实际存储文件目录
logs日志目录
storage_stat.datStorage 状态信息
sync集群同步信息

为什么有 256 × 256 个目录?

FastDFS 默认会创建:

256 × 256 = 65536

个子目录。

例如:

data/00/00 data/00/01 data/01/00 data/01/01

这样设计的原因:

避免单目录文件过多

Linux 单目录文件过多会导致:

  • inode 查找慢
  • ext4 性能下降

因此 FastDFS 使用两级 hash 目录来分散文件。


二十三、FastDFS 文件上传流程

FastDFS 的上传流程如下:

Client │ │ 1. 上传请求 ▼ Tracker Server │ │ 2. 返回可用 Storage ▼ Storage Server │ │ 3. 写入磁盘 ▼ File Storage

详细步骤:

① Client 请求 Tracker

客户端首先向 Tracker 请求:

我要上传文件

Tracker 会返回:

可用的 Storage 节点

例如:

192.168.1.1:23000

② Client 上传文件到 Storage

客户端直接连接 Storage:

upload file

Storage 会:

  1. 生成文件名
  2. 写入磁盘
  3. 返回文件 ID

例如:

group1/M00/00/00/CgABk2Yxxx.jpg

③ Client 保存文件地址

应用程序保存返回路径:

group1/M00/00/00/CgABk2Yxxx.jpg

访问时通过:

http://nginx/group1/M00/00/00/CgABk2Yxxx.jpg

二十四、生产环境最佳实践

在生产环境部署 FastDFS 时,建议遵循以下架构。

1 Tracker 高可用

Tracker 至少部署2 台

Tracker1 Tracker2

客户端配置:

tracker_server=192.168.1.10:22122 tracker_server=192.168.1.11:22122

Tracker 本身是无状态的

因此:

  • 不需要同步
  • 可以直接扩展

2 Storage 多节点

建议:

Storage1 Storage2 Storage3

同一个 group:

group1

好处:

  • 文件自动同步
  • 提高容灾能力

3 存储磁盘独立

建议:

系统盘 /data

示例:

/dev/sda 系统盘 /dev/sdb FastDFS 存储盘

Storage 配置:

store_path0=/data/fastdfs

这样可以避免:

  • 系统盘被写满
  • I/O 争抢

4 Nginx 负载均衡

架构:

Nginx / \ Storage1 Storage2

Nginx upstream:

upstream fastdfs { server 192.168.1.21:8888; server 192.168.1.22:8888; }

5 日志和监控

建议监控:

  • Tracker 进程
  • Storage 进程
  • 磁盘容量
  • 文件同步状态

可以结合:

  • Zabbix
  • Prometheus

二十五、FastDFS 常见坑(90%的人会踩)

这里总结几个部署时最常见的问题


1 Nginx 无法访问文件

现象:

404 Not Found

原因:

mod_fastdfs.conf配置错误。

重点检查:

store_path0 group_name url_have_group_name

例如:

store_path0=/data/app/fastdfs group_name=group1 url_have_group_name=true

2 storage.conf 与 mod_fastdfs.conf 不一致

这是最常见的问题。

例如:

storage.conf

store_path0=/data/app/fastdfs

mod_fastdfs.conf

store_path0=/data/fastdfs

会导致:

Nginx 无法找到文件

3 tracker 地址错误

如果 tracker 配错:

tracker_server=192.168.1.2

会导致:

upload file failed

检查:

telnet tracker_ip 22122

4 SELinux 或防火墙问题

很多人会遇到:

Nginx访问失败

建议关闭:

setenforce 0

或关闭防火墙:

systemctl stop firewalld

5 文件描述符不足

FastDFS 高并发时容易报错:

too many open files

解决:

ulimit -n 25600

或者修改:

/etc/security/limits.conf

6 Nginx 编译模块错误

错误类似:

ngx_http_fastdfs_module.c: No such file

原因:

模块路径错误。

正确示例:

--add-module=/data/bag/fastdfs/fastdfs-nginx-module-1.20/src

7 Storage 没有注册到 Tracker

查看状态:

fdfs_monitor /etc/fdfs/client.conf

如果看到:

storage server count: 0

说明 Storage 没注册成功。

原因通常是:

tracker_server 配错

结语

FastDFS 是一个非常经典的分布式文件存储系统,虽然现在很多公司开始使用:

  • MinIO
  • Ceph
  • OSS

但 FastDFS 在很多企业内部仍然被广泛使用。

如果是:

  • 图片服务器
  • 文件服务器
  • 内部对象存储

FastDFS 依然是一个稳定可靠的方案


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 16:25:49

COMSOL激光超声仿真:板状材料中激光激发超声波的数值模拟

COMSOL激光超声仿真:板状材料中激光激发超声波的数值模拟 版本为5.6,低于5.6的版本打不开此模型在材料科学与无损检测等领域,激光超声技术因其独特优势备受关注。借助COMSOL软件,我们能够对板状材料中激光激发超声波的过程进行精确数值模拟。…

作者头像 李华
网站建设 2026/7/14 16:25:46

Unity3d实时读取Modbus RTU数据

1.首先要了解Modbus RTU是什么?Modbus 是一种通信协议,用于在电子设备之间传输数据,最早由 Modicon(现为施耐德电气的一部分) 在1979年提出。它非常简单、开放,并且广泛用于工业自动化系统。RTU 是 Modbus …

作者头像 李华
网站建设 2026/7/14 16:25:47

计算有功功率和无功功率

微电网,下垂控制,两并联虚拟阻抗下垂控制,实现了有功功率共享,效果好,有参考文献。微电网技术近年来发展迅速,成为分布式能源系统的重要组成部分。然而,微电网中的多个发电单元如何协调运行&…

作者头像 李华
网站建设 2026/7/14 16:25:48

Hil-SERL真机复现思路及框架

项目介绍项目采用UC伯克利罗剑岚博士发表的HIL-SERL及SERL框架尝试通过“仿真经验 真实经验联合回放”的方式提升学习效率。项目地址:SERL(项目):https://serl-robot.github.io/SERL(代码):htt…

作者头像 李华
网站建设 2026/7/14 16:25:52

制造业如传统车企如何数字化转型实践?

曾今有幸做过宁波某车企二级供应商的数字化转型整体解决方案(包含企业精益生产管理以及数字化系统WMS\MES\APS三个系统的集成)我想我应该很有发言权! 是2022年接手项目,一开始面临质量追溯严苛、信息孤岛、效率瓶颈等行业共性挑战…

作者头像 李华