一、核心架构与组件
FastDFS 采用 Tracker + Storage 两层架构:
Tracker Server(跟踪服务器)
作用:管理集群拓扑,调度文件访问(负载均衡)。
要求:
至少部署 2 个节点(避免单点故障)。
通过
client.conf
配置客户端连接。本身无状态,可水平扩展。
Storage Server(存储服务器)
作用:实际存储文件数据(分卷管理)。
要求:
每个存储节点划分为多个 Volume(卷),卷内分 Trunk(分块)。
支持 Group(组):同组节点存储相同数据(冗余),不同组存储不同数据(扩容)。
数据同步:组内节点通过 Binlog 异步同步。
二、核心功能要求
功能 | 要求细节 |
---|---|
文件上传 | 客户端 → Tracker 获取 Storage IP → 直连 Storage 上传,返回文件ID(如 group1/M00/00/01/abc.jpg )。 |
文件下载 | 通过文件ID从 Tracker 获取 Storage 地址,直接访问 Storage。 |
文件删除 | 需提供文件ID,由 Storage 执行删除并同步组内节点。 |
冗余备份 | 通过 Group 内多副本(默认2副本,可配置)保障高可用。 |
负载均衡 | Tracker 按策略(轮询、最小连接数等)分配 Storage 节点。 |
扩展性 | 动态添加 Storage Group 实现容量扩展;新增 Tracker 提升调度能力。 |
三、部署与运维要求
类别 | 要求 |
---|---|
操作系统 | Linux(推荐 CentOS 7+/Ubuntu 18.04+) |
依赖 | libfastcommon (基础库)、nginx (可选,用于 HTTP 访问扩展)。 |
网络 | 内网低延迟(Storage 组内同步对网络敏感)。 |
存储 | 直接使用本地文件系统(如 Ext4/XFS),无需额外分布式文件系统(如 HDFS)。 |
高可用 | - Tracker:至少 2 节点 + Keepalived/VIP。 - Storage:每组至少 2 节点。 |
监控 | 通过 fdfs_monitor 工具检查节点状态,或集成 Prometheus + Grafana。 |
四、性能与限制
指标 | 说明 |
---|---|
文件大小 | 建议 < 500MB(大文件需分片,性能下降)。 |
吞吐量 | 依赖网络和磁盘 I/O,单节点可处理数千 QPS(小文件场景)。 |
元数据 | 无中心元数据库,文件寻址通过 Tracker 调度。 |
协议支持 | 原生仅支持 专用 API,HTTP 访问需通过 fastdfs-nginx-module 扩展。 |
POSIX 兼容性 | 不支持(非通用文件系统接口)。 |
五、安全要求
措施 | 说明 |
---|---|
防盗链 | 通过 Token 校验(如 ts + secret_key 生成 MD5)。 |
IP 白名单 | 在 Tracker 配置 http.anti_steal.check_token 限制访问来源。 |
内网隔离 | Storage/Tracker 节点部署在内网,仅通过 Nginx 网关对外暴露 HTTP。 |
六、适用场景 vs 不适用场景
适用场景 | 不适用场景 |
---|---|
✅ 海量小文件存储(图片、短视频) | ❌ 大文件(>1GB)存储 |
✅ 高并发读取(CDN 前端缓存友好) | ❌ 需 POSIX 接口访问的场景 |
✅ 简单冗余备份需求 | ❌ 强一致性事务(如数据库) |
✅ 低成本扩展方案 | ❌ 复杂元数据管理(如目录树权限) |
七、生态工具
管理界面
客户端 SDK
支持 Java/Python/PHP/C/C++ 等主流语言。
与云原生集成
Kubernetes 部署需自行编排 StatefulSet(Storage)和 Deployment(Tracker)。
八、关键配置示例
# tracker.conf port=22122 base_path=/data/fastdfs/tracker # storage.conf group_name=group1 tracker_server=192.168.1.100:22122 tracker_server=192.168.1.101:22122 store_path0=/data/fastdfs/storage
总结
FastDFS 的核心价值在于:
以简单架构实现小文件的高性能分布式存储,适合对 POSIX 无强需求、追求轻量化的场景。
运维重点在于 Tracker 高可用、Storage 组内同步优化及 HTTP 网关扩展。