& FastDFS快速入门
fastDFS快速入门#
1. 为什么使用FastDFS#
Fast DFS(最快的分布式文件系统)
使用FASTDFS的公司有:
支付宝,京东商城,赶集网,淘米网,迅雷,UC等等。
目前规模最大的一家:集群中存储的group数有200个,存储容量达到3PB,文件数接近1亿个,目前处于持续增长中。
2. FastDFS简介#
FastDFS是淘宝的余庆先生所开发,是一款开源的轻量级分布式文件系统,采用纯C实现,目前提供了C,Java和PHP的API,主要用它来对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。
跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点主要的工作:存储、同步和提供存取接口。
整体来说:FastDFS主要有以下两个主要特点:
高可靠性:无单点故障;
高吞吐量:只要 Group 足够多,数据流量是足够分散的。
工作原理说明:
跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
3. 上传文件流程#
4. 下载文件流程#
5. 安装搭建FastDFS#
5.1 安装依赖环境#
5.2 上传安装文件#
5.3.安装libfastcommon#
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
- 安装步骤(命令)
- cd /usr/local
- tar -zxvf libfastcommonV1.0.7.tar.gz
- cd libfastcommon-1.0.7/
- ./make.sh
- ./make.sh install
注意:libfastcommon安装好之后会将库文件拷贝至/usr/lib64下,由于FastDFS程序引用/usr/lib/目录,所以需要将/usr/lib64下的库文件拷贝至/usr/lib/目录下
- 查找当前目录下是否包含指定文件
- find -name libfastcommon.so
- 查找/usr/lib/目录下是否包含指定文件
- find /usr/lib/ -name libfastcommon.so
5.4 安装FastDFS_v5.05(tracker + storage)#
5.4.1 tracker
tar -zxvf FastDFS_v5.05.tar.gz
./make.sh
./make.sh install
将/usr/local/fastdfs/FastDFS/conf 路径下的文件 copy到/etc/fdfs/目录下
cp * /etc/fdfs/
修改配置文件,上传资源文件存储位置
vi /etc/fdfs/tracker.conf
启动FastDFS
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
重启命令:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
配置自启动
5.4.2 storage
配置自启动
5.5 配置客户端#
- 将/usr/local/FastDFS/client 里面的 libfdfsclient.so 拷贝到 /usr/lib 目录下 (这一步非常重要 nginx)
- 修改配置文件 /etc/fdfs/client.conf
- 测试
5.6 安装Nginx和nginx插件#
5.6.1 Nginx环境依赖
nginx需要的一些环境
- gcc (前面已经安装)
- yum install gcc-c++
- PCRE
- yum install -y pcre pcre-devel
- zlib
- yum install -y zlib zlib-devel
- openssl
- yum install -y openssl openssl-devel
5.6.2 fastdfs-nginx-module
安装nginx 和 nginx插件,两者结合
可以使用官方提供的nginx插件。要使用nginx插件需要重新编译
fastdfs-nginx-module_v1.16.tar.gz
- 解压插件压缩包
- 修改/usr/local/fastdfs/fastdfs-nginx-module/src目录下config文件,把其中的local去掉
- 把/usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf 文件复制到/etc/fdfs目录下。并编辑该文件:
5.6.3 Nginx安装
如果nginx之前已经安装
https://blog.csdn.net/wangjia55/article/details/91961569
如果nginx没有安装 则安装正常nginx
- ./configure --add-module=/usr/local/fastdfs/fastdfs-nginx-module/src
- make
- make install
- 省略
启动nginx
./nginx
6. 与SpringBoot的整合#
pom.xml
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.1-RELEASE</version>
</dependency>
application.yml
fdfs:
connect-timeout: 600
so-timeout: 1500
pool:
jmx-enabled: false
thumb-image:
width: 100
height: 100
tracker-list: 192.168.136.128:22122
BootFastdfsApplicationTests测试类
package com.lhx.bootfastdfs;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@RunWith(SpringRunner.class)
@SpringBootTest
class BootFastdfsApplicationTests {
@Autowired
private FastFileStorageClient fastFileStorageClient;
@Test
void contextLoads() throws FileNotFoundException {
File file = new File("d://image.jpg");
FileInputStream fileInputStream = new FileInputStream(file);
String extName = file.getName().substring(file.getName().lastIndexOf(".") + 1);
StorePath storePath = fastFileStorageClient.uploadFile(fileInputStream, file.length(), extName, null);
System.out.println(storePath.getGroup());
System.out.println(storePath.getPath());
System.out.println(storePath.getFullPath());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix