FastDFS分布式存储

一、FastDFS 核心架构与角色

FastDFS 整体由三类角色构成,分工明确、易于理解:

1. Tracker Server(调度节点)

  • 负责集群调度、负载均衡,管理所有 Storage 与分组信息
  • 接收 Storage 心跳上报,动态维护节点状态
  • 自身不持久化数据,支持多节点对等集群,扩展简单

2. Storage Server(存储节点)

  • 实际负责文件存储、备份、同步
  • 以 Group(分组) 为单位,同组内节点互为副本
  • 直接使用操作系统文件系统,支持多磁盘多目录配置

3. Client(业务客户端)

  • 提供上传、下载、删除等文件操作接口
  • 通过 Tracker 调度,与目标 Storage 完成数据交互

二、文件上传与下载流程

1. 上传流程

  1. 客户端向 Tracker 请求可用存储节点
  2. Tracker 按策略选择 Group、Storage、存储路径
  3. 客户端上传文件到 Storage
  4. Storage 生成唯一 FileID,返回给客户端
  5. 同组 Storage 后台异步完成文件同步

2. 下载流程

  1. 客户端携带 FileID 请求 Tracker
  2. Tracker 解析组名、路径,定位目标 Storage
  3. 直接从 Storage 读取并返回文件

三、FastDFS + Nginx 集群部署(OpenEuler 实战)

环境规划

  • tracker01:192.168.10.101
  • tracker02:192.168.10.102
  • storage1:192.168.10.103
  • storage2:192.168.10.104
  • nginx-proxy:192.168.10.105

1. 基础环境配置

关闭防火墙与 SELinux:

plaintext

复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2. 安装依赖库 libfastcommon

plaintext

复制代码
yum install -y zlib-devel gcc libtool pcre-devel libevent
tar -zxvf libfastcommon-1.0.36.tar.gz
cd libfastcommon-1.0.36
./make.sh && ./make.sh install
cp libfastcommon.so /usr/lib

3. 安装 FastDFS

plaintext

复制代码
tar -zxvf fastdfs-5.11.tar.gz
cd fastdfs-5.11
./make.sh && ./make.sh install

4. 配置并启动 Tracker

plaintext

复制代码
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
vi /etc/fdfs/tracker.conf
disabled=false
port=22122
base_path=/fastdfs/tracker
store_group=group1

mkdir -p /fastdfs/tracker
/etc/init.d/fdfs_trackerd start

5. 配置并启动 Storage

plaintext

复制代码
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
vi /etc/fdfs/storage.conf
disabled=false
port=23000
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=192.168.10.101:22122
tracker_server=192.168.10.102:22122
group_name=group1

mkdir -p /fastdfs/storage
/etc/init.d/fdfs_storaged start

6. 配置 Client 并测试上传

plaintext

复制代码
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vi /etc/fdfs/client.conf
base_path=/fastdfs/tracker
tracker_server=192.168.10.101:22122
tracker_server=192.168.10.102:22122

# 测试上传
fdfs_upload_file /etc/fdfs/client.conf test.jpg

7. Storage 节点安装 Nginx + fastdfs-nginx-module

作用:解决同组节点文件同步延迟导致的访问失败,支持 HTTP 直接访问文件。

plaintext

复制代码
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
tar -zxvf nginx-1.19.5.tar.gz
cd nginx-1.19.5
./configure --add-module=../fastdfs-nginx-module/src
make && make install

cp ../fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.10.101:22122
tracker_server=192.168.10.102:22122
url_have_group_name=true
store_path0=/fastdfs/storage

ln -s /fastdfs/storage/data /fastdfs/storage/M00

8. Nginx 配置

plaintext

复制代码
location /group1/M00 {
    ngx_fastdfs_module;
}

9. 部署前端 Nginx 代理

配置 upstream 做负载均衡,统一入口访问存储集群。


四、FastDFS 适用场景与优势

  • 适合:图片、短视频、文档等 4KB~500MB 中小文件
  • 优势:轻量、部署简单、线性扩容、高可用、负载均衡友好
  • 特点:分组存储、同组副本、异步同步、Tracker 无状态

五、总结

FastDFS 是一款专为互联网中小文件设计的分布式存储系统,架构清晰、运维成本低,配合 Nginx 可实现高可用、高并发的文件访问服务。从 Tracker/Storage 部署到集群整合,整套流程可快速落地,非常适合企业级图片 / 文件服务场景。

相关推荐
灯澜忆梦15 小时前
【RabbitMQ #3】 | Go 客户端 + SpringAMQP
分布式·golang·rabbitmq
Q264336502321 小时前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
新思维软件1 天前
基于无线传输的地衡系统:三节点 LoRa 组网与 MQTT 上云的分布式称重方案
分布式·stm32·单片机·嵌入式硬件·物联网·物联网开发
俊哥大数据1 天前
Flink1.20.3 实时消费 Kafka 数据并解析入湖 Paimon1.4.2 全流程实战
分布式·flink·kafka·数据湖·paimon
宸津-代码粉碎机1 天前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
程序猿乐锅1 天前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
灯澜忆梦1 天前
【RabbitMQ #7】 | 消息转换器
分布式·rabbitmq·ruby
需要8261 天前
分布式事务:Seata AT/TCC/SAGA 的取舍与踩坑
java·spring boot·分布式·spring·spring cloud
CS创新实验室1 天前
为什么三台机器就能选出一个“带头大哥“?——Raft 一致性算法,一次讲透
分布式·操作系统
本人手速666+1 天前
企微开发API如何设计客户冻结状态?WeComApi 在删除、投诉和异常客户场景中的自动化边界
运维·分布式·自动化·企业微信·企微外部群开发·wecomapi·企业微信二次开发