FastDFS 分布式存储

目录

一、介绍

二、 Fast DFS

1. FastDFS 原理

2. FastDFS 架构

3. 文件的上传

4. 文件的下载

5. 同步时间管理

6. 集成 Nginx

三、FasDFS 部署


一、介绍

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. 文件的上传

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

4. 文件的下载

  1. 客户端带文件标识(如 ID )发下载请求给 Tracker
  2. Tracker 找对应 Storage 地址给客户端
  3. 客户端连 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值