一、简介
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
(一)架构
FastDFS架构包括TrackerServer和StorageServer。客户端请求TrackerServer进行文件上传、下载,通过TrackerServer调度最终由StorageServer完成文件上传和下载。
TrackerServer作用是负载均衡和调度,通过TrackerServer在文件上传时可以根据一些策略找到StorageServer提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
StorageServer作用是文件存储,客户端上传的文件最终存储在Storage服务器上,StorageServer没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将Storage称为存储服务器。
1、Tracker:管理集群,也可实现集群。每个tracker地位平等。收集Storage集群的状态
2、Storage:实际保存文件,分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组内部成员保存的内容一样,地位一致,没有主从的概念
(二)文件上传流程
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
1、组名:文件上传后所在的Storage组名称,在文件上传成功后由Storage服务器返回,需要客户端自行保存。
2、虚拟磁盘路径:Storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
3、数据两级目录:Storage服务器在每个虚拟磁盘路径下创建两级目录,用于存储数据文件
4、文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
(三)文件下载流程
(四)最简单的FastDFS架构
二、安装
搭建过程参见FASTdfs-1.0.docx,这里直接使用
1、图片服务器解压到VMWare目录
2、配置VMWare的网络
编辑—>虚拟网络编辑器
桥接:虚拟机和电脑同级别访问网路
仅主机:虚拟机只能和该电脑通信
NAT:虚拟机可以和电脑或其他虚拟机通信
3、开机
选择“我已移动该虚拟机”。
移动:网络配置不发生变化。要使用图片服务器,需要保证网络配置不变。
复制:重新生成一块网卡mac地址,是新地址。
IP地址:192.168.25.133
用户名root,密码itcast
startx:启动图型界面
开机后Tracker、Storage、Nginx自启。
三、使用
(一)导入资源文件
将maven工程“fastdfs_client”添加到Eclipse,安装到仓库。在web中引用其jar包
(二)测试上传
1、普通上传
//创建一个配置文件,内容为tracker服务器的地址
//client.conf:tracker_server=192.168.25.133:22122
//使用全局对象加载配置文件
ClientGlobal.init("C:\\...\\e3-manager-web\\src\\main\\resources\\conf\\client.conf");
//创建一个TrackerClient对象
TrackerClient trackerClient = new TrackerClient();
//通过TrackerClient获得一个TrackerServer对象
TrackerServer trackerServer = trackerClient.getConnection();
//创建一个StorageServer对象,可以是null
StorageServer storageServer = null;
//创建一个StorageClient
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
//使用StorageClient上传文件
String[] strings = storageClient.upload_file("C:\\Users\\16434\\Pictures\\HPU.png", "png", null);
for (String string : strings) {
System.out.println(string);//组名和图片的路径
}
2、工具类上传
引入工具类:FastDFSClient.java
FastDFSClient fastDFSClient = new FastDFSClient("D:/…/src/main/resources/resource/client.conf");
String file = fastDFSClient.uploadFile("D:/Documents/Pictures/images/2f2eb938943d.jpg");
System.out.println(file);
3、访问
http://192.168.25.133/group1/M00/00/00/wKgZhVpJpsmAf7DnAAhLW5zVZ9E101.png