Fastdfs分布式文件系统

一、概述

1.1 Fastdfs介绍

FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、横向扩展等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.2 Fastdfs架构

在这里插入图片描述
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

Tracker server:负责负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。

Storage server:负责文件存储。客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

1.3 搭建文件服务器

1.3.1 文件服务器架构图

在这里插入图片描述

1.3.2 软件安装

(1)安装libfastcommon

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。

第一步:下载libfastcommon压缩包。
链接:https://pan.baidu.com/s/1l5OMoE6R6E11IXyNbV_4YQ
提取码:vz08

第二步:解压缩文件。

$ unzip libfastcommon-1.36.zip

第三步:编译和安装。

# 进入安装目录
$ cd libfastcommon-master
# 编译
$ ./make.sh
# 安装
$ sudo ./make.sh install

(2)安装fastdfs

第一步:下载fastdfs压缩包。
链接:https://pan.baidu.com/s/13dUvr7zCbZ04GoDOrnC7ng
提取码:bo4v

第二步:解压缩文件。

$ tar zxvf fastdfs-5.10.tar.gz

第三步:编译和安装。

# 进入安装目录
$ cd fastdfs-5.10
# 编译
$ ./make.sh
# 安装
$ sudo ./make.sh install

(3)配置Tracker

第一步:复制tracker.conf.sample一份,并改名为tracker.conf。

$ cd /etc/fdfs
$ cp tracker.conf.sample tracker.conf

第二步:修改tracker.conf文件,配置Tracker服务器参数。
在这里插入图片描述

(4)配置Storage

第一步:复制storage.conf.sample一份,并改名为storage.conf。

$ cd /etc/fdfs
$ cp storage.conf.sample storage.conf

第二步:修改storage.conf文件,配置Storage服务器参数。
在这里插入图片描述
在这里插入图片描述

(4)配置client

第一步:复制client.conf.sample一份,并改名为client.conf。

$ cd /etc/fdfs
$ cp client.conf.sample client.conf

第二步:修改client.conf文件,配置客户端参数。
在这里插入图片描述

(5)测试

  • 启动Tracker
# 启动
$ fdfs_trackerd /etc/fdfs/tracker.conf
# 停止
$ fdfs_trackerd /etc/fdfs/tracker.conf stop
# 重启
$ fdfs_trackerd /etc/fdfs/tracker.conf restart

启动成功后,可以看到22122端口已经被Tracker占用了。
在这里插入图片描述

  • 启动Storage
# 启动
$ fdfs_storaged /etc/fdfs/storage.conf
# 停止
$ fdfs_storaged /etc/fdfs/storage.conf stop
# 重启
$ fdfs_storaged /etc/fdfs/storage.conf restart

启动成功后,可以看到23000端口已经被Storage占用了。
在这里插入图片描述

  • 文件上传测试:
$ fdfs_upload_file /etc/fdfs/client.conf 文件

例如:
在这里插入图片描述

  • 文件下载:
$ fdfs_download_file /etc/fdfs/client.conf 文件ID

例如:
在这里插入图片描述

二、文件上传

2.1 文件上传流程

在这里插入图片描述
客户端上传文件后,存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。

文件索引信息包括:组名+虚拟磁盘路径+数据两级目录+文件名,如下图所示:
在这里插入图片描述
组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。两级目录的范围都是 00~FF。

文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

2.2 实现文件上传

第一步:在maven工程中引入坐标。

<dependency>
	<groupId>org.csource</groupId>
	<artifactId>fastdfs-client</artifactId>
	<version>1.25-RELEASE</version>
</dependency>

第二步:在src/main/resources目录中创建配置文件。
在这里插入图片描述

第三步:修改配置文件,配置Tracker服务器的地址。

tracker_server=192.168.31.20:22122

第四步:编写测试类。

public class FastdfsTest {

	@Test
	public void upload_file() throws Exception {
		// 配置文件路径
		String conf_file = this.getClass().getResource("/fastdfs_client.conf").getPath();
		// 初始化客户端全局信息
		ClientGlobal.init(conf_file);
		// 创建StorageClient对象
		StorageClient storageClient = new StorageClient();
		// 上传文件,并返回文件在服务器上的文件ID和组名
		String[] arr = storageClient.upload_file(".jpg", "jpg", null);
		// 输出返回值([group1, M00/00/00/wKgfFF0n-R6AIQXpAABQk5CwJ0k986.jpg])
		System.out.println(Arrays.toString(arr));
	}
		
}

运行效果:
在这里插入图片描述

三、文件下载

3.1 文件下载流程

在这里插入图片描述
tracker根据请求的文件路径即文件ID 来快速定义文件。比如请求下面文件:
在这里插入图片描述
通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

3.2 实现文件下载

@Test
public void download_file() throws Exception {
	// 配置文件路径
	String conf_file = this.getClass().getResource("/fastdfs_client.conf").getPath();
	// 初始化客户端全局信息
	ClientGlobal.init(conf_file);
	// 创建StorageClient对象
	StorageClient storageClient = new StorageClient();
	// 下载文件,返回文件字节数组数据
	byte[] data = storageClient.download_file("group1", "M00/00/00/wKgfFF0oH2yAXZo8AABQk5CwJ0k418.jpg");
	// 把数据写入文件中
	FileOutputStream fos = new FileOutputStream("d:/1.jpg");
	fos.write(data);
	fos.close();
}

四、SpringBoot项目整合Fastdfs

第一步:加入fastdfs-client-java依赖。

<dependency>
	<groupId>org.csource</groupId>
	<artifactId>fastdfs-client-java</artifactId>
	<version>1.27-SNAPSHOT</version>
</dependency>

第二步:配置文件上传传参数。
在这里插入图片描述
第三步:在src/main/resources目录下新建fastdfs_client.conf配置文件,然后添加tracker_server参数。该参数的值是tracker服务器地址。
在这里插入图片描述
第四步:在控制器类中实现文件上传。

@RestController
public class PictrueController {

	@Value("${fastdfsUrl}")
	private String fastdfsUrl;

	@PostMapping(path="/pic/upload")
	public Map<String,Object> upload(@RequestParam("pic")MultipartFile multipartFile) throws Exception {
		Map<String,Object> data = new HashMap<>();
		data.put("error", 1);
		try{
			// 加载配置文件得到文件绝对地址
			String conf_filename = this.getClass().getResource("/fastdfs_client.conf").getPath();
			// 调用客户端全局类的初始化方法加载配置文件
			ClientGlobal.init(conf_filename);
			// 创建FastDFS存储客户端对象
			StorageClient storageClient = new StorageClient();
			// 上传图片
			String[] arr = storageClient.upload_file(multipartFile.getBytes(),"jpg", null);
			// 拼接服务图片的URL地址
			StringBuilder url = new StringBuilder(fastdfsUrl);
			for (String str : arr){
				url.append("/" + str);
			}
			// 上传图片的服务器地址
			data.put("url", url.toString());
			// 上传成功后设置error为0
			data.put("error", 0);
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return data;
	}

}

第五步:测试(略)。
在这里插入图片描述

五、整合Nginx

如果要通过浏览器访问FDFS上的文件,可以借助Nginx来实现。

5.1 Nginx下载和安装

(1)下载fastdfs-nginx-module。
链接:https://pan.baidu.com/s/1bdTDVG6wTmbZdTbFKf-XYA
提取码:xdky

下载完成后直接解压缩。

$ tar zxvf fastdfs-nginx-module_v1.16.tar.gz

(2)配置nginx

# 进入nginx安装目录
$ cd ~/nginx-1.10.1/
# 运行配置
$ .configure –add-module= fastdfs-nginx-module/src
# 进入objs目录
$ cd ~/nginx-1.10.1/objs/
# 修改makefile文件
$ vim makefile

修改MakeFile文件的ALL_INCS参数如下:
在这里插入图片描述
执行编译和安装:

# 编译
$ cd ~/nginx-1.10.1/
$ make
# 安装
$ sudo make install

5.2 配置

(1)配置mod_fastdfs.conf

# 进入fastdfs-nginx-module目录下的src子目录
$ cd ~/fastdfs-nginx-module/src/
# 拷贝mod_fastdfs.conf文件
$ sudo cp ./mod_fastdfs.conf /etc/fdfs
# 修改配置文件
$ sudo vim /etc/fdfs/mod_fastdfs.conf

修改内容如下:
在这里插入图片描述在这里插入图片描述
修改完成后保存退出编辑器,然后拷贝http.conf和mime.types文件到/etc/fdfs目录下。

# 进入fastdfs-master目录下的conf子目录下
cd ~/fastdfs-master
# 拷贝http.conf和mime.types文件到/etc/fdfs目录下
sudo cp http.conf /etc/fdfs
sudo cp mime.types /etc/fdfs

(2)配置nginx.conf

# 进入/usr/local/nginx/conf目录
$ cd /usr/local/nginx/conf
# 编辑nginx.conf
$ sudo vim nginx.conf

文件配置内容如下所示:
在这里插入图片描述

5.3 测试

启动nginx,然后在浏览器上访问文件服务器上的图片。
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值