FastDFS 分布式存储
一、核心概念
- FastDFS:开源轻量级分布式文件系统,适合4KB~500MB中小文件存储(图片 / 视频 / 文档)。
- 三大角色
- Tracker Server:调度中心,负载均衡、状态管理,无持久化数据。
- Storage Server:存储节点,按Group分组,同组数据互为备份。
- Client:上传 / 下载客户端,提供 API 接口。
- 文件 ID 结构:
group1/M00/00/00/xxx.jpg- group1:组名;M00:虚拟磁盘路径;00/00:两级哈希目录;xxx:文件名。
二、实验环境(OpenEuler)
| 角色 | IP | 主机名 |
|---|---|---|
| Tracker1 | 192.168.10.101 | tracker01 |
| Tracker2 | 192.168.10.102 | tracker02 |
| Storage1 | 192.168.10.103 | storage1 |
| Storage2 | 192.168.10.104 | storage2 |
| Nginx 代理 | 192.168.10.105 | nginx |
三、实验步骤
1. 基础环境配置(所有节点)
# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config2. 安装依赖库(所有 Tracker/Storage 节点)
dnf -y install zlib-devel gcc* libtool pcre-devel libevent # 安装libfastcommon tar zxvf libfastcommon-1.0.36.tar.gz cd libfastcommon-1.0.36 ./make.sh && ./make.sh install cp /usr/lib64/libfastcommon.so /usr/lib3. 安装 FastDFS(所有 Tracker/Storage 节点)
tar zxvf fastdfs-5.11.tar.gz cd fastdfs-5.11 ./make.sh && ./make.sh install4. 配置 Tracker Server(101/102 节点)
# 复制配置文件 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 start5. 配置 Storage Server(103/104 节点)
# 复制配置文件 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 http.server_port=8888 # 创建目录并启动 mkdir -p /fastdfs/storage /etc/init.d/fdfs_storaged start ps -ef | grep fdfs_storaged6. 配置 Client(任意节点)
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:221227. 测试上传文件
# 上传测试 fdfs_upload_file /etc/fdfs/client.conf logo.jpg # 返回示例 group1/M00/00/00/wKgKaGadD5aAZBiJAAFMnKMUrMI833.jpg # 查看实际存储路径 ll /fastdfs/storage/data/00/00/8. Storage 节点安装 Nginx + fastdfs-nginx-module
# 解压模块 tar zxvf fastdfs-nginx-module_v1.16.tar.gz # 编译Nginx tar zxvf nginx-1.19.5.tar.gz cd nginx-1.19.5 useradd nginx cp /usr/include/fastcommon/* /usr/include/fastdfs/ ./configure \ --add-module=/root/fastdfs-nginx-module/src \ --prefix=/usr/local/nginx \ --with-cc-opt="-Wno-error=format-truncation" make && make install ln -s /usr/local/nginx/sbin/* /usr/local/sbin/配置 mod_fastdfs.conf
cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ vi /etc/fdfs/mod_fastdfs.conf connect_timeout=10 base_path=/tmp tracker_server=192.168.10.101:22122 tracker_server=192.168.10.102:22122 url_have_group_name=true group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/fastdfs/storage # 复制配置 cp /root/fastdfs-5.11/conf/http.conf /etc/fdfs cp /root/fastdfs-5.11/conf/mime.types /etc/fdfs # 创建软链接 ln -s /fastdfs/storage/data /fastdfs/storage/M00Nginx 配置
vi /usr/local/nginx/conf/nginx.conf location /group1/M00 { ngx_fastdfs_module; } # 启动Nginx nginx9. 部署 Nginx 代理(105 节点)
# 安装Nginx tar zxvf nginx-1.19.5.tar.gz cd nginx-1.19.5 useradd nginx ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ # 配置负载均衡 vi /usr/local/nginx/conf/nginx.conf upstream storage_server_group1 { server 192.168.10.103:80 weight=1; server 192.168.10.104:80 weight=1; } server { listen 80; location / { proxy_pass http://storage_server_group1; } } # 重启 nginx -s reload10. 访问测试
http://192.168.10.105/group1/M00/00/00/xxx.jpg四、关键原理
- 上传流程:Client → Tracker 查询可用 Storage → 上传文件 → 生成 FileID → 返回路径。
- 下载流程:Client → Tracker 解析 FileID 定位 Storage → 读取文件。
- Nginx 作用:解决同步延迟问题,提供 HTTP 访问,支持负载均衡。
五、常用命令
- 启动 Tracker:
/etc/init.d/fdfs_trackerd start - 启动 Storage:
/etc/init.d/fdfs_storaged start - 上传文件:
fdfs_upload_file 配置文件 本地文件
六、总结
FastDFS 是轻量级分布式文件系统,适合中小文件存储,由Tracker 调度、Storage 分组存储、Client三部分组成。通过部署 Tracker 与 Storage 集群,搭配 Nginx 实现 HTTP 访问与负载均衡,可快速搭建高可用、易扩展的分布式存储服务。
