分布式文件系统FastDFS
FastDFS
什么是 FastDFS
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
常见术语
- tracker:追踪者服务器,主要用于协调调度,可以起到负载均衡的作用,记录storage的相关状态信息。
- storage:存储服务器,用于保存文件以及文件的元数据信息。
- group:组,同组节点提供冗余备份,不同组用于扩容。
- mata data:文件的元数据信息,比如长宽信息,图片后缀,视频的帧数等。
FastDFS 架构

上传

下载

FastDFS 配置安装
我这里准备了两台Centos7.x 虚拟机,分别安装tracker与storage
1、环境准备
| 名称 | 说明 |
|---|---|
| centos | 7.x |
| libfastcommon | FastDFS分离出的一些公用函数包 |
| FastDFS | FastDFS本体 |
| fastdfs-nginx-module | FastDFS和nginx的关联模块 |
| nginx | 发布访问服务 |

2、安装步骤 (tracker与storage都要执行)
安装基础环境
yum install -y gcc gcc-c++
yum -y install libevent
安装libfatscommon函数库
# 解压
tar -zxvf libfastcommon-1.0.42.tar.gz
进入libfastcommon解压后文件夹,编译并且安装
./make.sh
./make.sh install
可以看到安装目录

安装fastdfs主程序文件
# 解压
tar -zxvf fastdfs-6.04.tar.gz
进入fastdfs解压后文件夹,编译并且安装
./make.sh
./make.sh install
从安装日志中可以看到

- /usr/bin 中包含了可执行文件;
![image]()
- /etc/fdfs 包含了配置文件;
![image]()
将安装包conf目录下所有配置文件拷贝到/etc/fdfs目录中
cp /home/software/fastdfs-6.04/conf/* /etc/fdfs/

配置tracker服务
tracker和storage都是同一个fastdfs的主程序的两个不同概念,配置不同的配置文件就可以设定为tracker或者storage
/etc/fdfs 目录下,配置tracker.conf文件:
vim tracker.conf
修改 base_path 路径

记得创建路径文件夹:
mkdir /usr/local/fastdfs/tracker -p
启动tracker服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
可以查看tracker进程

停止服务的命令
/usr/bin/stop.sh /etc/fdfs/tracker.conf
配置storage服务
在第二台做storage的服务器上配置
/etc/fdfs 目录下,配置storage.conf文件:
vim storage.conf
文件中修改的内容如下:
# 修改组名
group_name=jinsh
# 修改storage的工作空间
base_path=/usr/local/fastdfs/storage
# 修改storage的存储空间
store_path0=/usr/local/fastdfs/storage
# 修改tracker的地址和端口号,用于心跳
tracker_server=192.168.10.134:22122
# 后续结合nginx的一个对外服务端口号
http.server_port=8888
创建目录
mkdir /usr/local/fastdfs/storage -p
启动storage服务
前提:必须首先启动tracker
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
可以查看storage进程

参考:
3、测试上传
在storaged这台节点上操作
首先配置下 /etc/fdfs/ 目录下的 client.conf 文件
base_path=/usr/local/fastdfs/client
tracker_server=192.168.10.134:22122
创建文件夹
mkdir /usr/local/fastdfs/client
然后找一张图片放到 /home/ 目录下
进入 /usr/bin/ 目录下执行上传命令:
./fdfs_test /etc/fdfs/client.conf upload /home/logo.png
命令执行成功,即上传成功

文件上传的目录在
/usr/local/fastdfs/storage/data/00/00/wKgKh2E0ekOAAOV0AAAPhlsl1IM328.png
4、配置 nginx fastdfs 实现文件服务器
fastdfs安装好以后是无法通过http访问的,这个时候就需要借助nginx了,所以需要安装fastdfs的第三方模块到nginx中,就能使用了。
安装fastdfs-nginx-module插件
解压
tar -zxvf fastdfs-nginx-module-1.22.tar.gz
进入解压后的目录/src文件夹下,修改config文件
vim config

把local删除,因为fastdfs安装的时候我们没有修改路径,原路径是 /usr
安装 nginx
nginx需要和storage在同一个节点。
安装步骤参考:https://www.cnblogs.com/jinshengnianhua/p/15189075.html
博文中第5部分的第(2)小步需要添加下fastdfs-nginx-module插件的src目录配置:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/home/software/fastdfs-nginx-module-1.22/src
其他安装步骤不变。
配置fastdfs-nginx-module插件
进入fastdfs-nginx-module插件的解压目录下的src目录
复制mod_fastdfs.conf配置文件到/etc/fdfs目录,统一管理
cp mod_fastdfs.conf /etc/fdfs
修改复制后的 mod_fastdfs.conf 文件
base_path=/usr/local/fastdfs/tmp
tracker_server=192.168.10.134:22122
group_name=jinsh
url_have_group_name = true
store_path0=/usr/local/fastdfs/storage
创建文件夹
mkdir /usr/local/fastdfs/tmp
配置nginx
修改nginx.conf,添加如下虚拟主机:
server {
listen 8888;
server_name localhost;
location /jish/M00 {
ngx_fastdfs_module;
}
}
配置完成,启动nginx
测试
我们可以通过浏览器访问之前上传的那张图片
http://192.168.10.135:8888/jinsh/M00/00/00/wKgKh2E0ekOAAOV0AAAPhlsl1IM328.png

参考:
https://www.cnblogs.com/leechenxiang/p/5406548.html
https://www.cnblogs.com/leechenxiang/p/7089778.html
Springboot 集成 FastDFS
pom
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.7</version>
</dependency>
yml
fdfs:
connect-timeout: 30 # 连接的超时时间
so-timeout: 30 # 读取的超时时间
tracker-list: 192.168.10.134:22122 # tracker服务所在的IP和端口号



浙公网安备 33010602011771号