欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > FastDFS,分布式文件存储系统,介绍+配置+工具类

FastDFS,分布式文件存储系统,介绍+配置+工具类

2025/5/8 11:57:13 来源:https://blog.csdn.net/Aric_Jones/article/details/147769571  浏览:    关键词:FastDFS,分布式文件存储系统,介绍+配置+工具类

FastDFS

什么是分布式文件存储系统

随着文件逐渐增多,单台计算机已经存储不下这么多数据,需要用多台计算机存储不同的数据或进行备份,这样就需要有一个管理系统管理不同的计算机节点,这就是分布式管理系统。

使用分布式管理系统的优点

可以存储含量数据

文件数据的高可用(冗余备份)

良好的读写性能和负载均衡

什么是fastDFS

是一款轻量级的分布式文件存储系统,可以对文件进行管理,功能包括文件存储,文件访问,文件同步等,解决了发容量存储和负载均衡的问题。

fastDFS的角色

tracker:追踪者服务器,任务是协调调用,起到负载均衡的作用。

storage:存储节点,提供文件管理的服务。

group:组,相同的组提供冗余备份,不同的组提供扩容

FastDFS上传过程

  1. Storage会定时的向Tracker发送心跳,让Tracker知道现在有什么服务可以使用
  2. 客户端向网站服务发送上传请求,网站向Tracker发送请求,Tracker检查有没有可用服务
  3. 如果有可以用服务,客户端就可以上传数据到Storage
  4. Storage将文件写入磁盘,返回路径信息给客户端
  5. 客户端可以工具这个路径找到上传文件

在这里插入图片描述

FastDFS的下载流程

  1. Storage会定时的向Tracker安装发送心跳,告诉Tracker自己还还活着,这样Fastdfs就可以工作了
  2. 客户端发送下载请求到Tracker上,Tracker查找到存储的Storage地址后返回给客户端
  3. 客户端拿到Storage地址后,去Storage上找到文件
  4. 把文件返回给客户端

在这里插入图片描述

fastDFS配置文件

connect_timeout=60
network_timeout=60
charset=UTF-8
#Tracker的Http请求端口
http.tracker_http_port=8080
#Tracker的Http通讯端口
tracker_server=192.168.200.99:22122

fastDFS工具类

/*** @ClassName: FastDFSUtil* @Description: FastDFS工具类* @Author: CSH* @Date: 2025-05-06 15:07*/
public class FastDFSUtil {/*** @Author:CSH* @Updator:CSH* @Date 2025/5/6 15:10* @Description: 加载Tracker连接信息信息*/static {//从classpath下获取文件对象获取路径try {String path = new ClassPathResource("fdfs_client.conf").getPath();ClientGlobal.init(path);} catch (Exception e) {e.printStackTrace();}}/*** @param file* @return java.lang.String[]* @Author:CSH* @Updator:CSH* @Date 2025/5/6 15:11* @Description: 文件上传*/public static String[] upload(FastDFSFile file) throws Exception {// 获取trackerServerTrackerServer trackerServer = getTrackerServer();// 获取storageClientStorageClient storageClient = getStorageClient(trackerServer);//参数1 字节数组//参数2 扩展名(不带点)//参数3 元数据( 文件的大小,文件的作者,文件的创建时间戳)NameValuePair[] meta_list = new NameValuePair[]{new NameValuePair(file.getAuthor()), new NameValuePair(file.getName())};return storageClient.upload_file(file.getContent(), file.getExt(), meta_list);}/*** @param groupName* @param remoteFileName* @return java.io.InputStream* @Author:CSH* @Updator:CSH* @Date 2025/5/6 17:33* @Description: 文件下载*/public static InputStream downFile(String groupName, String remoteFileName) throws Exception {// 获取trackerServerTrackerServer trackerServer = getTrackerServer();// 获取storageClientStorageClient storageClient = getStorageClient(trackerServer);// 根据组名 和 文件名 下载图片byte[] bytes = storageClient.download_file(groupName, remoteFileName);return new ByteArrayInputStream(bytes);}/*** @param groupName* @param remoteFileName* @return void* @Author:CSH* @Updator:CSH* @Date 2025/5/6 17:33* @Description: 文件删除*/public static void deleteFile(String groupName, String remoteFileName) throws Exception {// 获取trackerServerTrackerServer trackerServer = getTrackerServer();// 获取storageClientStorageClient storageClient = getStorageClient(trackerServer);int i = storageClient.delete_file(groupName, remoteFileName);if (i == 0) {System.out.println("删除成功");} else {System.out.println("删除失败");}}/*** @return java.lang.String* @Author:CSH* @Updator:CSH* @Date 2025/5/6 15:26* @Description: 获取tracker的ip和端口信息*/public static String getTrackerUrl() throws IOException {// 1. 获取trackerServerTrackerServer trackerServer = getTrackerServer();// 2. 获取tracker 的ip的信息String hostString = trackerServer.getInetSocketAddress().getHostString();// 3. 获取tracker 的端口的信息int trackerHttpPort = ClientGlobal.getG_tracker_http_port();return "http://" + hostString + ":" + trackerHttpPort;}/*** @param groupName* @param remoteFileName* @return org.csource.fastdfs.FileInfo* @Author:CSH* @Updator:CSH* @Date 2025/5/6 17:28* @Description: 根据文件名和组名获取文件的信息*/public static FileInfo getFile(String groupName, String remoteFileName) throws IOException, MyException {// 获取trackerServerTrackerServer trackerServer = getTrackerServer();// 获取storageClientStorageClient storageClient = getStorageClient(trackerServer);// 根据文件名和组名获取文件的信息return storageClient.get_file_info(groupName, remoteFileName);}/*** @param groupName* @return org.csource.fastdfs.StorageServer* @Author:CSH* @Updator:CSH* @Date 2025/5/6 20:01* @Description: 获取Storages信息*/public static StorageServer getStorages(String groupName) throws Exception {TrackerClient trackerClient = new TrackerClient();TrackerServer trackerServer = trackerClient.getConnection();return trackerClient.getStoreStorage(trackerServer, groupName);}/*** @param groupName* @param remoteFileName* @return org.csource.fastdfs.ServerInfo[]* @Author:CSH* @Updator:CSH* @Date 2025/5/6 20:06* @Description: 获取Storage的ip和端口信息*/public static ServerInfo[] getServerInfo(String groupName, String remoteFileName) throws Exception {TrackerClient trackerClient = new TrackerClient();TrackerServer trackerServer = trackerClient.getConnection();return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);}private static StorageClient getStorageClient(TrackerServer trackerServer) {return new StorageClient(trackerServer, null);}private static TrackerServer getTrackerServer() throws IOException {// 创建一个tracker客户端TrackerClient trackerClient = new TrackerClient();// 通过tracker客户端获取tracker服务信息return trackerClient.getConnection();}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com