1、简介
FastDFS是用c语言编写的一款开源的分布式文件系统,它对文件进行管理,功能包括:文件存储,文件同步,文件访问(文件上传,文件下载)等,解决大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站,视频网站等。
FastDFS分为客户端client(我们的项目),tracker管理端(管理存储端服务器的,不存储文件),storage存储端(存储文件) 共三部分
管理端tracker不存储具体的文件,它用来管理storage存储端集群服务器。tracker可以是一主多从,备机每隔一段时间ping主机,主机返回pong命令,具有心跳检测机制。
storage存储端服务器,是两台为一组,一台主机和一台备机。存储时向主机从存储,然后主机将文件同步到备机保存一份,冗余存储防止文件丢失。主机和备机之间也有心跳检测机制,防止主机宕机,高可用。存储端服务器可以水平无限扩展,这样理论上fastDFS分布式文件系统可以存储的文件大小是无限大。
客户端如果想要存储,发送请求到tracker管理端,管理端会返回给客户端一个存储端服务器的ip和端口,然后客户端向具体的存储端服务器中存储,存储后返回一个存储后的路径,并且文件会被自动重命名,防止文件重名。
2、安装
官方文档:https://gitee.com/fastdfs100/fastdfs/wikis/Home
环境准备:
名称 | 说明 |
---|---|
centos | 7.x |
libfastcommon | FastDFS分离出的公用函数库 |
libserverframe | FastDFS分离出的网络框架 |
FastDFS | FastDFS本体 |
fastdfs-nginx-module | FastDFS和nginx的关联模块 |
nginx | nginx1.16 |
安装环境:使用centos7.9
1 | [root@iZgw02lo2mc5w2j7dgdd5zZ ~]# cat /etc/centos-release |
环境准备:
安装 gcc 和 g++
1 | yum install gcc gcc-c++ -y |
安装 perl,用于编译源码
1 | yum install perl -y |
准备安装包
https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.57.tar.gz
https://github.com/happyfish100/libserverframe/archive/refs/tags/V1.1.15.tar.gz
https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.08.tar.gz
安装libfastcommon,libserverframe,fastdfs
1 | ./make.sh clean && ./make.sh && ./make.sh install |
出现问题:-bash: *.sh: Permission denied。
解决方法:chmod +x *.sh
1 | [root@iZgw02lo2mc5w2j7dgdd5zZ libfastcommon-master]# ./make.sh |
说明 | 位置 |
---|---|
所有安装包 | /usr/local/src |
数据存储位置 | /home/dfs/ |
配置文件准备:
1 | 说明 位置 |
启动trackerd、storaged,配置文件目录:/etc/fdfs
1 | fdfs_trackerd /etc/fdfs/tracker.conf |
上传图片
查看详细信息:fdfs_monitor /etc/fdfs/client.conf
安装nginx
1 | ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ |
单机部署
tracker配置文件
1 | 服务器ip为 192.168.52.1 |
storage配置文件
1 | vim /etc/fdfs/storage.conf |
client配置文件
1 | vim /etc/fdfs/client.conf |
配置nginx
1 | vim /etc/fdfs/mod_fastdfs.conf |
使用成功:
3、整合
导入依赖
1 | <dependency> |
创建pojo类
1 | package com.jiuzhao73.pojo; |
编写FastDFSClient类:
1 | package com.jiuzhao73.util; |
编写Controller:
1 | package com.jiuzhao73.controller; |