TL;DR
- 场景: 三台主机(h121/122/123)同时部署 tracker、storage、Nginx,按轮询上传存储。
- 结论: 按 store_lookup=0 与多 tracker_server 列表即可跑通;关键在 Nginx+mod_fastdfs 路由与监控校验。
- 产出: 一套可复用的集群配置清单 + 版本矩阵 + 常见错误速查卡,便于上线与回归。
版本矩阵
| 条目/特性 | 已验证说明 |
|---|---|
| 多 Tracker(h121/h122/h123)并行 | client.conf/storage.conf 均配置三条 tracker_server,可路由与容灾。 |
| store_lookup=0 轮询 | 贴合多 storage 组装场景,默认即为 0,与配置一致。 |
| Storage 三节点(同一 group) | 按文中示例已联通并可监控;同步状态以 fdfs_monitor 为准。 |
| Nginx + mod_fastdfs | 已给出 mod_fastdfs.conf tracker 列表与 Nginx 路由配置。 |
| fdfs_monitor 观测与巡检 | 已展示运行截图,可用于 ACTIVE/SYNCING/DISCONNECTED 判定。 |
1. FastDFS 集群介绍
1.1 基本概念
FastDFS(Fast Distributed File System)是一款开源的轻量级分布式文件系统,由阿里巴巴资深架构师余庆开发。它主要用于解决大容量文件存储和高并发访问的问题,特别适合中小型互联网企业使用。
1.2 核心组件
FastDFS集群主要由两个核心组件构成:
- Tracker Server(跟踪服务器): 负责调度和管理整个文件系统,记录storage server的状态信息。通常采用主备架构保证高可用性。一个集群可以部署多个tracker server实现负载均衡。
- Storage Server(存储服务器): 负责实际的文件存储工作,以组(group)为单位组织。每个group包含多个storage server,采用冗余备份机制确保数据安全。
1.3 主要特点
- 高性能: 采用内存索引方式,文件定位快速
- 高扩展性: 支持在线扩容,不影响现有服务
- 高可用性: 无单点故障,自动故障转移
- 负载均衡: 支持多tracker和多storage的负载均衡
- 文件去重: 相同文件只存储一份,节省空间
2. 架构设置
我们需要三台服务器,三个 tracker 和 三个 storage。
- h121: tracker + storage group + nginx
- h122: tracker + storage group + nginx
- h123: tracker + storage group + nginx
3. 集群配置
3.1 tracker集群
vim /etc/fdfs/tracker.conf
修改配置:
# 0 轮询
# 1 指定组
# 2 剩余存储空间多的优先
store_lookup=0
h121 h122 h123 都需要配置(默认值是0)
3.2 storage集群
vim /etc/fdfs/storage.conf
写入以下内容:
tracker_server = h121.wzk.icu:22122
tracker_server = h122.wzk.icu:22122
tracker_server = h123.wzk.icu:22122
h121 h122 h123 都需要进行配置。
然后重启 tracker 和 storage:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
3.3 FastDFS 访问原理
FastDFS 的访问机制中,tracker 服务器虽然在逻辑上是对等的,但在实际运行过程中存在 Leader 选举机制。
3.4 测试上传
vim /etc/fdfs/client.conf
修改内容:
tracker_server = h121.wzk.icu:22122
tracker_server = h122.wzk.icu:22122
tracker_server = h123.wzk.icu:22122
上传文件:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf ~/wzk.png
4. Nginx结合
vim /etc/fdfs/mod_fastdfs.conf
修改内容:
tracker_server = h121.wzk.icu:22122
tracker_server = h122.wzk.icu:22122
tracker_server = h123.wzk.icu:22122
5. 错误速查
| 症状 | 根因 | 定位 | 修复 |
|---|---|---|---|
上报报错 connect to tracker timeout / Connection refused :22122 | tracker 列表/端口不通、DNS 未解析 | telnet h121 22122、dig h121.wzk.icu | 检查端口连通性,修复DNS解析或tracker配置 |
| 下载 404(Nginx 命中但取不到文件) | URL 前缀与 group 映射不一致 | 查 Nginx 日志与 mod_fastdfs.conf | 统一前缀,校验 group_name、url_have_group_name |
fdfs_monitor 显示某节点长期 DISCONNECTED | storage 进程挂/磁盘满/权限或网络问题 | systemctl status fdfs_storaged、df -h | 清理磁盘、修复权限;重启 storage |
| 新增 storage 同步极慢或不动 | 时间漂移、带宽瓶颈、I/O 慢 | date -R 校时、iftop | NTP 校时;高峰期限速/离线预热 |