FastDFS分布式文件系统架构学习
1. FastDFS简介
FastDFS是一个开源的轻量级分布式文件系统,由淘宝资深架构师余庆设计并开发。它专为互联网应用量身定制,特别适合以中小文件(如图片、文档、音视频等)为载体的在线服务。FastDFS不支持POSIX文件访问语义,只能通过专有API访问,无需支持文件随机修改等复杂功能,因此可以大幅简化设计,提高系统的性能和扩展性。
2. 系统架构
FastDFS采用了C/S架构,由两个主要角色组成:
2.1 Tracker Server(跟踪服务器)
- 功能: 负责调度和负载均衡
- 特点:
- 作为集群访问入口,不存储文件
- 提供集群状态管理
- 执行存储策略选择
- 可水平扩展部署多个节点形成集群
2.2 Storage Server(存储服务器)
- 功能: 实际存储文件
- 特点:
- 按Group(组)管理,同组内服务器互为备份
- 组内文件同步,保证数据一致性
- 可水平扩展,支持海量存储
2.3 架构图
+------------------+ +------------------+
| Client | | Tracker Server |
| (上传/下载应用) | <-> | (调度和负载均衡) |
+------------------+ +------------------+|| 调度v
+--------------------------------------------------+
| Storage集群 |
| +----------------+ +----------------+ |
| | Storage Group1 | <----> | Storage Group2 | |
| | (存储服务器组) | | (存储服务器组) | |
| +----------------+ +----------------+ |
+--------------------------------------------------+
3. 工作流程
3.1 文件上传流程
- 客户端连接Tracker服务器,请求上传文件
- Tracker根据负载均衡策略选择一个Storage服务器
- 客户端连接选定的Storage服务器并上传文件
- Storage服务器生成文件ID并返回给客户端
- 如果同组内有多个Storage,则自动进行文件同步复制
3.2 文件下载流程
- 客户端带着文件ID请求Tracker服务器获取可用的Storage
- Tracker返回可用的Storage服务器IP列表
- 客户端选择一个Storage服务器进行连接
- 客户端发送文件ID给Storage服务器
- Storage服务器根据文件ID查找并返回文件内容
4. 存储策略
FastDFS采用了两种存储策略:
4.1 组内存储
- 同一个文件组内的Storage服务器互为备份,文件会在组内自动同步
- 组内服务器存储相同的文件,提高了可用性
4.2 分组存储
- 不同组的Storage服务器存储不同的文件
- 通过增加组数量可以线性扩展系统的存储容量
5. 文件标识
FastDFS对每个文件生成一个文件ID,格式为:
group_name/filename
例如:group1/M00/00/00/wKgBaFYrGb-AfL48AAATIDVoHqQ788.jpg
这里:
group1
: 文件所在的Storage组名M00
: Storage服务器ID00/00
: 存储路径wKgBaFYrGb-AfL48AAATIDVoHqQ788.jpg
: 文件名(含时间戳等信息)
6. FastDFS的优势
- 高可用性: 通过文件冗余实现高可用
- 高性能: 支持高并发访问
- 易扩展: 可以通过增加Storage节点线性扩展存储容量
- 负载均衡: Tracker服务器自动进行负载均衡
- 高效率: 专为处理小文件而设计的高效率文件系统
7. 应用场景
- 图片服务器: 电商、社交媒体的图片存储
- 视频存储: 短视频平台、在线教育的视频存储
- 文档管理系统: 企业文档的集中存储和管理
- 大数据存储: 分布式应用的数据存储
8 安装FastDFS
git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs
./make.sh
./make.sh install
8配置Tracker服务器
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
# 编辑tracker.conf配置文件,设置base_path等参数
# 启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
8 配置Storage服务器
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
# 编辑storage.conf配置文件,设置base_path、store_path等参数
# 启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
10. 结合Nginx使用
为了提高FastDFS的访问性能,通常会结合Nginx使用:
- 安装fastdfs-nginx-module
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
# 配置Nginx时添加此模块
- 配置nginx.conf
location /group1/M00 {root /fastdfs/storage/data;ngx_fastdfs_module;
}2025-5-18学习记录