目录
一、介绍
FastDFS 是一个开源的轻量级分布式文件系统(Distributed File System),由国人余庆开发。
核心目标:解决大规模文件存储与高并发访问问题,适用于图片、视频、文档等海量非结构化数据。
特点:
-
无中心节点(对比 HDFS)
-
文件不分块存储
-
支持横向扩展、负载均衡
-
高可用(冗余备份)
-
协议简单(专有 API + HTTP)
二、 Fast DFS
1. FastDFS 原理
-
文件标识:文件上传后返回唯一标识符
group1/M00/00/00/wKgBc2H9_5iAJ3vRAAA.txt,包含:-
group1:卷名(存储组) -
M00:虚拟磁盘路径 -
00/00:两级目录散列(解决单目录文件数上限)
-
-
元数据管理:文件元信息(大小、时间戳)直接存储在 Storage 本地,不依赖独立数据库。
2. FastDFS 架构
采用 Tracker + Storage 双角色分离设计:
| 组件 | 作用 | 高可用方案 |
|---|---|---|
| Tracker Server(追踪服务器) | 调度中心:管理 Storage 节点状态(心跳监测 )、负载均衡、文件路由 | 多节点部署(集群) |
| Storage Server(存储服务器) | 存储节点:文件物理存储、同步备份、提供文件读写接口 | 组内多节点(同组冗余备份) |
| Client(客户端) | 集成 SDK:通过 Tracker 获取 Storage 地址,直接与 Storage 交互 | 支持重试机制 |
3. 文件的上传

- 客户端发上传请求给 Tracker
- Tracker 选合适 Storage 回给客户端
- 客户端传文件给 Storage,Storage 存文件、生成标识,同组节点后续同步
- Storage 回传存储成功信息(文件 ID 等 )
4. 文件的下载

- 客户端带文件标识(如 ID )发下载请求给 Tracker
- Tracker 找对应 Storage 地址给客户端
- 客户端连 Storage 取文件,完成下载
5. 同步时间管理
-
同步机制:Storage 组内节点通过 Binlog 增量同步(类似 MySQL)。
-
关键配置(
storage.conf):# 同步延迟阈值(秒) sync_max_delay = 120 # 同步频率(毫秒) sync_interval = 200 -
触发场景:
-
新文件写入主节点
-
从节点重启后主动同步
-
定时检查差异文件列表
-
6. 集成 Nginx
- 作用:借 Nginx 缓存、异步非阻塞提升下载性能;用模块实现文件 ID 解析、防盗链、实时处理(如图片缩略 )等扩展功能
- 步骤:装 Nginx→编译装 fastdfs-nginx-module→改 Nginx 配置(指定 Tracker、存储路径 )→重启 Nginx 生效
三、FasDFS 部署
FastDFS 下载地址:https://github.com/happyfish100
(1)fastdfs
(2)libfastcommon
(3)fastdfs-nginx-module
(4)nginx-1.18.0
实验环境:
192.168.10.101、192.168.10.102:跟踪服务器
192.168.10.103、192.168.10.104:存储服务器
192.168.10.105:代理服务器
部署搭建:
------------------1.基础环境------------------------------
#在所有节点上关闭防火墙和selinux(代理除外)
systemctl stop firewalld
setenforce 0
sed -i "s/SELINUX=./*SELINUX=disabled/g" /etc/selinux/config
-----------------2.安装libfastocmmon(代理除外)------------------
#部署环境安装
dnf -y install zlib-devel gcc libtool pcre-devel
dnf -y install libevent
#上传安装软件包
libfastcommon-1.0.36.tar.gz
fastdfs-5.11.tar.gz
#解压软件包
tar zxvf libfastcommon-1.0.36.tar.gz
cd libfastcommon-1.0.36
./make.sh #编译
./make.sh install #安装
cd /usr/lib64
ll libfast* #查看以libfast开头的内容
cp libfastcommon.so /usr/lib #覆盖原有模块文件
-------------3.安装编译Fast DFS(代理除外)-----------------
tar zxvf fastdfs-5.11.tar.gz
cd fastdfs-5.11
./make.sh #编译
./make.sh install #安装
-----------------4.配置tracker 服务器----------------
(追踪节点):
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
#修改配置文件
vim /etc/fdfs/tracker.conf
#修改的内容如下:
disabled=false # 启用配置文件
port=22122 #tracker服务器端口(默认 22122)
base_path=/fastdfs/tracker # 存储日志和数据的根目录
store_group=group1 #设置存储组名称
#创建base_path指定目录
mkdir -p /fastdfs/tracker
#启动tracker服务器
/etc/init.d/fdfs_trackerd start
-------------------5.配置 Storage 服务----------------------
存储节点):
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
#修改配置文件
vim /etc/fdfs/storage.conf
#修改的内容如下:
url_have_group_name=Ture
disabled=false #启用配置文件
port=23000 #storage服务端口
base_path=/fastdfs/storage
# 数据和日志文件存储根目录
store_path0=/fastdfs/storage #第一个存储目录
tracker_server=192.168.10.201:22122
tracker_server=192.168.10.202:22122
#tracker 服务器 IP 和端口
group_name=group1
#需要和 tracker 中的组名保持一致
http.server_port=8888 # http 访问文件的端口
#创建基础数据目录
mkdir -p /fastdfs/storage
#启动storage服务器,并检查进程
/etc/init.d/fdfs_storaged start
ps -ef | grep fastdfs_storaged
-------------------6.配置client------------------
(任意一个节点充当客户端):
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
#创建base_path指定目录
mkdir -p /fastdfs/tracker
#修改配置文件
vim /etc/fdfs/client.conf
#修改的内容如下:
base_path=/fastdfs/tracker # 存储日志和数据的根目录
tracker_server=192.168.10.201:22122
tracker_server=192.168.10.202:22122
#tracker 服务器 IP 和端口
(不需要启动客户端服务)
----------------7.测试上传文件-------------------------
方法1:
上传文件(图片logo.jpg)
fdfs_upload_file /etc/fdfs/client.conf logo.jpg
方法2:
fdfs_test /etc/fdfs/client.conf upload logo.jpg
#在104上进行查看
cd /fastdfs/storage
cd data/
ll
-----------------7.所有存储节点安装fastdfs-nginx-module和nginx------------
(在所有storage节点安装fastdfs-nginx-module和nginx)
#上传安装软件
fastdfs-nginx-module_v1.16.tar.gz
nginx-1.19.5.tar.gz
#解压安装包
tar zxvf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module/
cd src/
vim config
#修改路径
#解压安装包
tar zxvf nginx-1.19.5.tar.gz
cd nginx-1.19.5
cp /usr/include/fastcommon/* /usr/include/fastdfs/
#编译安装
./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module/src/ --with-cc-opt="-Wno-error=format-truncation"
make
make install
#软链接
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
--配置fastDFS
cd fastdfs-nginx-module
cd src/
cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
#修改参数如下:
connect_timeout=10
base_path=/tmp #用户存储日志的
tracker_server=192.168.10.201:22122
tracker_server=192.168.10.202:22122
#tracker 服务器 IP 和端口
tracker_url_have_group_name=true
(这个表示是否需要增加一个上述自定义名字的需要,改为 true,url 中包含 group 名称)
group_name=group1
storage_server_port=23000
store_path.count=1
store_path0=/fastdfs/storage
cd fastdfs-5.11
cd conf/
#复制fastdfs的部分配置文件到/etc/fdfs
cp http.conf /etc/fdfs
cp mime.types /etc/fdfs
#创建软链接
ln -s /fastdfs/storage/data /fastdfs/storage/M00
--配置nginx
vim /usr/local/nginx/conf/nginx.conf
添加内容:
location /group1/M00 {
ngx_fastdfs_module;
}
#启用nginx配置文件
/usr/local/nginx/sbin/nginx -t
浏览器访问:
http://192.168.10.203/group1/M00/00/00/图片.jpg
http://192.168.10.204/group1/M00/00/00/图片.jpg
部署代理
10.105:代理服务器
#部署环境安装
dnf -y install zlib-devel gcc pcre-devel
#上传安装软件
nginx-1.19.5.tar.gz
#解压安装包
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
vim /usr/local/nginx/conf/nginx.conf
http里面添加:
upstream mycluster {
server 192.168.10.203:80 weight=1;
server 192.168.10.204:80 weight=1;
}
server里面修改:
location / {
proxy_pass http://mycluster;
}
#启用nginx配置文件
/usr/local/nginx/sbin/nginx -t
浏览器访问:
http://192.168.10.205/group1/M00/00/00/图片.jpg
关闭防火墙
systemctl stop firewalld
setenforce 0
7238

被折叠的 条评论
为什么被折叠?



