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
文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
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
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
1.安装nginx
2.修改配置文件,加入如下配置
server {
listen 88;
server_name localhost;
location /group1/M00 {
alias /fastdfs/storage/data;
}
}
3.即可根据服务器的80端口访问到图片
# 下载
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