当前位置:   article > 正文

FastDFS的安装配置及其使用

fastdfs

一、fastDFS是什么
       fastDFS是c语言编写的一款开源分布式文件系统,使用fastDFS可以很方便搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
二、fastDFS工作原理
       fastDFS包括Tracker server和Storage server,客户端请求Tracker server进行文件上传和下载,Tracker server通过调度Storage server完成上传和下载。如下图所示:
在这里插入图片描述
详细解释:
(1)Tracker Server
       其作用是负载均衡和调度,通过Tracker可以在文件上传时根据一些策略找到Storage提供文件上传服务,Tracker也就是追踪/调度服务器。
(2)Storage
       其作用是文件存储,客户端上传的文件实质上都是保存在Storage服务器上,Storage也就是存储服务器。Storage会连接集群中的所有Tracker,定时向他们报告自己的磁盘剩余空间、文件同步状态、文件上传下载次数等统计信息,Tracker可以根据每组Storage的状态来进行调度。
       Storage集群采用分组存储方式,Storage集群由一个或者多个组构成,其存储总量为集群中所有组的存储容量之和。一个组由一台或多台存储器构成,同组内的Storage之间会相互连接进行文件同步,从而保证同组内的每个storage文件完全一样,不同组的storage之间不会相互通信的。一个组的存储容量为该组内存容量最小的那个。

上传文件流程
在这里插入图片描述
说明:
       客户端上传文件之后,服务器会返回文件id,该id用于之后访问该文件。内容包括:组名、虚拟磁盘路径、数据两级目录、文件名。如下所示:
在这里插入图片描述
组名:文件上传之后文件所在的storage组名称,需要客户端自行保存。

虚拟磁盘路径:与配置的store_path*对应。例如配置store_path0则对应M00,配置store_path1则对应M01…

数据两级目录:storage在每个虚拟磁盘路径下创建两级目录,用于存储数据文件。

文件名:不是上传时的文件名,而是存储服务器根据特定信息生成的,文件名包含:原存储服务器ip、文件创建时间戳、文件大小、随机数和文件拓展名等。

下载文件流程:
在这里插入图片描述
说明:
       tracker根据客户端提供的文件id来快速定义文件,通过组名定位到客户端需要访问的存储器服务器是哪个组,并选择合适的存储服务器提供给客户端访问;虚拟路径可以找到对应文件的存储路径,再根据文件的两级目录和文件名,就可以很快的找到需要下载的文件。

三、fastDFS安装与配置
1、下载地址:https://github.com/happyfish100/fastdfs/releases
选择自己所需要的版本下载,如下所示:
在这里插入图片描述2、安装libfastcommon依赖
由于要从gitbub上clone依赖libfastcommon,所以先安装git

apt install git
  • 1

克隆

git clone https://github.com/happyfish100/libfastcommon.git
  • 1

完成之后libfastcommon中包含如下文件:
在这里插入图片描述
进入libfastcommon文件夹执行如下命令:

./make.sh
  • 1
./make.sh install
  • 1

注:在32位ubuntu中,libfastcommon会安装在/usr/lib 中,64位系统则安装在 /usr/lib64 中,如下图:
在这里插入图片描述
根据系统执行如下命令:

export LD_LIBRARY_PATH=/usr/lib64/
或
export LD_LIBRARY_PATH=/usr/lib/
  • 1
  • 2
  • 3
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
或
ln -s /usr/lib/libfastcommon.so /usr/local/lib/libfastcommon.so
  • 1
  • 2
  • 3

3、解压并安装fastDFS

tar -zxvf fastdfs-5.11.tar.gz
  • 1

进入解压目录:

cd fastdfs-5.11
  • 1

执行以下:

./make.sh
  • 1
./make.sh install
  • 1

执行完成之后,进入"/etc/fdfs"目录下,可以看到如下配置示例文件:

在这里插入图片描述
       接下来,我们将使用storage.conf.sample,tracker.conf.sample两个进行配置。首先将文件的".sample"去掉,也就是重命名一下。

(1)修改tracker.conf 文件
注:以下凡是出现配置目录的地方,必须是存在的目录。
tracker的数据log文件目录(路径必须存在),如下:
在这里插入图片描述
服务端口设置:
在这里插入图片描述
(2)修改storage.conf文件
组名设置:
在这里插入图片描述
虚拟路径映射的路径(路径必须存在):
在这里插入图片描述
stroage的数据log文件目录(路径必须存在),如下:
在这里插入图片描述
tracker服务器ip和端口:
在这里插入图片描述
storage的服务端口:
在这里插入图片描述
4、启动tracker和storage

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
  • 1
  • 2

在这里插入图片描述

5、使用java测试
FastDFS java client SDK:
https://github.com/happyfish100/fastdfs-client-java

放置在java工程resource目录下:
conf/fastdfs-client.properties

## fastdfs-client.properties

fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30

fastdfs.charset = UTF-8

fastdfs.http_anti_steal_token = false
fastdfs.http_secret_key = FastDFS1234567890
fastdfs.http_tracker_http_port = 80

fastdfs.tracker_servers = ip:22122

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

上传:

 //要上传的文件地址
    public static String local_filename = "E:\\test.txt";
    public static void testUpload() {
        try { 
        	//加载fastDFS客户端的配置文件
            ClientGlobal.initByProperties("conf/fastdfs-client.properties");
            
            //创建tracker的客户端
            TrackerClient tracker = new TrackerClient(); 
            TrackerServer trackerServer = tracker.getConnection(); 
            StorageServer storageServer = null;
            //定义storage客户端
            StorageClient storageClient = new StorageClient(trackerServer, storageServer); 
            NameValuePair nvp [] = new NameValuePair[]{ 
                    new NameValuePair("fileName", "test.txt"), 
            }; 
            //执行上传
            String fileIds[] = storageClient.upload_file(local_filename, "txt", nvp);

            System.out.println("上传组名:" + fileIds[0]); 
            System.out.println("上传路径: " + fileIds[1]);
            trackerServer.close();
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

下载:

public static void testDownload() {
        try {
        	ClientGlobal.initByProperties("conf/fastdfs-client.properties");

            TrackerClient tracker = new TrackerClient(); 
            TrackerServer trackerServer = tracker.getConnection(); 
            StorageServer storageServer = null;

            StorageClient storageClient = new StorageClient(trackerServer, storageServer); 
            byte[] b = storageClient.download_file("group1", "M00/00/00/wKgAA1zWw0eAbML5AAAAFtpUszA462.txt"); 
            String downFile = new String(b, "UTF-8");
            System.out.println(downFile);
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

删除:

public static void testDelete() {
		try {
			ClientGlobal.initByProperties("conf/fastdfs-client.properties");

			TrackerClient tracker = new TrackerClient();
			TrackerServer trackerServer = tracker.getConnection();
			StorageServer storageServer = null;

			StorageClient storageClient = new StorageClient(trackerServer, storageServer);
			int i = storageClient.delete_file("group1", "M00/00/00/wKgAA1zWw0eAbML5AAAAFtpUszA462.txt");
			System.out.println(i == 0 ? "文件删除成功" : "文件删除失败:" + i);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/891073
推荐阅读
相关标签
  

闽ICP备14008679号