FastDFS分布式存储

发布于:2025-06-13 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、核心架构与组件

FastDFS 采用 Tracker + Storage 两层架构:

  1. Tracker Server(跟踪服务器)

    • 作用:管理集群拓扑,调度文件访问(负载均衡)。

    • 要求

      • 至少部署 2 个节点(避免单点故障)。

      • 通过 client.conf 配置客户端连接。

      • 本身无状态,可水平扩展。

  2. 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 接口访问的场景
✅ 简单冗余备份需求 ❌ 强一致性事务(如数据库)
✅ 低成本扩展方案 ❌ 复杂元数据管理(如目录树权限)

七、生态工具

  1. 管理界面

  2. 客户端 SDK

    • 支持 Java/Python/PHP/C/C++ 等主流语言。

  3. 与云原生集成

    • 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 网关扩展。