FastDFS

1. FastDFS 理论

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

tracker server
跟踪服务器,主要做调度工作,起负载均衡的作用。负责管理所有的storage server和group,每个storage在启动后会连接tracker,告诉tracker自己所属的group,并保持周期性心跳,tracker根据storage的心跳信息,建立映射表,tracke管理的元数据很少(tracker上的元数据都是由storage汇报产生),并且直接存在内存中,本身不需要持久化任何数据。tracker之间是对等的,因此扩展tracker是很容易的,直接增加tracker服务,同时修改storage的配置,增加新增的tarcker服务的地址和端口,重启即可。所有的tracker都会接受storage的心跳信息,以生成元数据信息。

storage server
存储服务器(又称:存储节点或数据服务器),顾名思义是用来保存文件的和文件属性的。以group为单位,每个group内可以包含多台storage server,数据互为备份,存储容量空间以group中storage server容量最小的为准。以group为单位组织存储能够方便的进行应用隔离、负责均衡和副本数定制;确定是group的容量受单机容量的限制。group内机器故障,需要依赖group内其他机器重新同步数据来恢复数据(更换坏盘,重启fdfs_storaged即可)。storage存储依赖本地文件系统,storage课配置多个数据存储目录,磁盘不做raid,直接分别挂在到多个目录,将这些目录配置为storage的数据目录即可。

storage接收写请求的时候,会根据配置好的规则,选择其中一个存储目录来存储文件;为了避免单个目录下的文件过多,storage第一次启动的时候,会在每个数据存储目录创建2级子目录,每级256,总共65536个目录,新写的文件会以hash的方式路由到其中一个子目录下,然后将文件数据直接作为一个本地文件存储。

client
客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。
文件上传

文件上传

在这里插入图片描述
生成file id
选择存储目录之后,storage会生成一个file_id,采用base64编码,包含有:storage server ip,文件创建时间,文件大小,文件CRC32校验码和随机数。每个存储目录下有两个256*256个子目录,storage会按文件file_id进行两次hash,路由到其中一个子目录,然后将文件以file_id为名字存储。
文件路径如下:
group0/M00/00/00/rBAAAl0EkICAIiBOAAABowgL3Pk888.png

  • 组名:group0
  • 磁盘: M00
  • 目录:00/00
  • 文件名:rBAAAl0EkICAIiBOAAABowgL3Pk888.png

文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名

  • 组名:文件上传后所在的存储组名称,在文件上传成功后有存储服务器返回,需要客户端自行保存。
  • 虚拟磁盘路径:存储服务器配置的虚拟路径,与磁盘选项store_path*对应。
  • 数据两级目录:存储服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  • 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
文件下载

文件下载

2.安装FastDFS环境
下载安装 libfastcommon
yum -y install libevent
# 下载libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
# 解压
tar -zxvf V1.0.7.tar.gz
# 编译、安装
cd libfastcommon-1.0.7
 ./make.sh
 ./make.sh install
 cd /usr/lib64
 ll libfast* 
 # 复制libfastcommon.so 到 usr/lib
 cp libfastcommon.so /usr/lib
 cd /usr/lib
下载安装FastDFS
# 下载FastDFS
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
# 解压FastDFS
tar -zxvf V5.05.tar.gz
# 编译、安装
cd fastdfs-5.05
 ./make.sh
 ./make.sh install
 
# 配置tracker
cd /usr/bin
ll fdfs*
cd /etc/fdfs/
# 进入 fastdfs-5.05/conf目录
cp * /etc/fdfs/
vim tracker.conf
# 修改 base_path=/fastdfs/tracker
cd /
mkdir /fastdfs/tracker -p
cd fastdfs/
mkdir storage
mkdir client
cd /usr/bin
fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_trackerd /etc/fdfs/tracker.conf restart

# 配置storage
vim storage.conf
# 修改 base_path=/fastdfs/storage
#     store_path0=/fastdfs/storage
#     tracker_server=203.195.238.249:22122
cd /usr/bin
fdfs_storaged /etc/fdfs/storage.conf restart

# 配置client
vim client.conf
# 修改 base_path=/fastdfs/client
#     tracker_server=203.195.238.249:22122
# 测试 (先放一张图片到/root/test/headImg.jpg)
fdfs_test /etc/fdfs/client.conf upload /root/test/headImg.jpg
# 返回路径http://203.195.238.249/group1/M00/00/00/rBAAAl0EX5WAQtpGAACGZ5UrSuI275_big.jpg
目录结构
|--- /
	|---fastdfs
		|---client
		|---storage
			|---data
				|---存储的文件 256*256个目录
			|---logs
		|---tracker
			|---data
			|---logs
		|---tmp
	|---usr
		|---lib
			|---libfastcommon.so
		|---lib64
			|---libfastcommon.so
		|---bin
			|---fdfs* 命令工具
	|---etc
		|---fdfs
			|---client.conf
			|---tracker.conf
			|---storage.conf
			|---mod_fastdfs.conf
安装nginx

1.安装nginx
2.修改配置文件,加入如下配置

	server  {
        listen       88;
        server_name  localhost;
       
        location /group1/M00 {
           alias /fastdfs/storage/data;
		}
    }

3.即可根据服务器的80端口访问到图片

fastdfs-nginx-module
# 下载
wget wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 解压
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 重命名
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1  fastdfs-nginx-module-master
# 先停掉nginx服务
/usr/local/nginx/sbin/nginx -s stop
# 进入之前安装nginx的解压包的位置
cd nginx-1.14.2
# 添加fastdfs-nginx-module模块
./configure --add-module=../fastdfs-nginx-module-master/src
# 重新编译、安装
make && make install
# 复制fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录
cp mod_fastdfs.conf /etc/fdfs
cd /etc/fdfs
mkdir /fastdfs/tmp
vim mod_fastdfs.conf
# 修改 store_path0=/fastdfs/storage
#     tracker_server=203.195.238.249:22122
#     base_path=/fastdfs/tmp

修改nginx的配置文件

	server  {
        listen       88;
        server_name  localhost;
       
        location /group1/M00 {
            ngx_fastdfs_module;
		}
    }
部署结构图

部署结构图
参考:https://www.cnblogs.com/chiangchou/p/fastdfs.html
https://www.cnblogs.com/chiangchou/p/fastdfs.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值