博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FastDFS 的安装、使用、踩坑过程
阅读量:3948 次
发布时间:2019-05-24

本文共 6746 字,大约阅读时间需要 22 分钟。

FastDFS 的一系列踩坑

1. 什么是 FastDFS

  • FastDFS 由淘宝的余庆大佬开源的一款轻量级分布式文件管理系统

2. 为什么要使用 FastDFS

  • 传统的企业级开发对于高并发要求不是很高,而且数据量也不会很大,在这样的环境下文件管理可能很简单,但是互联网应用访问量大、数据量大,在互联网就需要考虑解决文件大容量存储和高性能访问的问题,而 FastDFS 就适合干这件事情,常见的图片存储、视频存储、文档存储等等都可以采用 FastDFS 来做。

3. FastDFS 安装【CentOS】

  • 图片上传功能使用 FastDFS,图片上传成功之后,接下来的图片访问我们一般采用 Nginx,所以需要安装三个软件包。
    • Tracker 安装
    • Storage 安装
    • Nginx 安装

3.1 Tracker 安装

安装,首先准备一个环境两个库以及一个安装包。

【1. 一个环境】
因为 FastDFS 采用 C 语言开发,安装前,需要先安装 gcc 环境。命令如下:

yum install gcc-c++

【2. 两个库】

由于 FastDFS 依赖 libevent 库,安装命令如下:

yum -y install libevent

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

libfastcommon 下载地址,本人已经下载好,并不算很大,分享到了百度网盘,可以方便大家下载:
里面提供的三个软件都是必备的哦!
将下载好的 libfastcommon 拷贝至 /usr/local/ 目录下,然后依次执行以下命令:
由于我们下到了本地,我们可以通过 Xftp 这个工具来将我们的安装包【libfastcommon-1.0.43.tar.gz】拉到 CentOS 上面去。【当大家拉取完成后】

// 进入目录中cd /usr/local// 对其解压tar -zxvf libfastcommon-1.0.43.tar.gz // 解压完进入文件夹中cd libfastcommon-1.0.43// 剩下的就是编译安装了./make.sh./make.sh install

【3. 一个安装包】

网盘中已经分享,下载到本地后,通过 Xftp 将文件 【fastdfs-6.06.tar.gz】拷贝到 /usr/local 目录下,然后依次执行以下命令安装:

cd /usr/localtar -zxvf fastdfs-6.06.tar.gz cd fastdfs-6.06./make.sh./make.sh install

安装成功后,执行如下命令,将安装目录内 conf 目录下的配置文件拷贝到 /etc/fdfs目录下:【目录不用创建,cp 命令会帮你创建的】

cd conf/cp ./* /etc/fdfs/

【4. 配置】

接下来进入 /etc/fdfs/ 目录下进行配置:
打开 tracker.conf 文件:

cd /etc/fdfs/vim tracker.conf

修改如下配置:

在这里插入图片描述

默认端口是 22122,可以跟据实际需求修改,然后再配置以下元数据的保存目录(注意目录要存在)。

【5. 启动】
接下来执行如下命令启动 Tracker:

/usr/bin/fdfs_trackerd  /etc/fdfs/tracker.conf start

3.2 Storage 安装

Storage 本身的安装和 Tracker 一致,执行命令都一样,因为这里我将 Tracker 和 Storage 安装再同一台服务器上,所以不用再执行安装命令了(相当于安装了 Tracker 时已经安装了 Storage 了)。

唯一要做的,就是进入到 /etc/fdfs 目录下,配置 Storage:

cd /etc/fdfs/vim storage.conf

在这里插入图片描述

在这里插入图片描述
这里一共配置了三个地方,分别是 base_path、store_path0、tracker_server,tracker_server 模板有两个地址,我们注释一个,另一个修改成自己的虚拟机Ip。
配置完成后,再次启动 Storage:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
  • 目前为止,我们已经配置号 Tracker 和 Storage 了,并且二者都已经启动了。这两个启动完成后,现在就可以做文件的上传了,但是一般如果是图片文件,我们还需要提供一个图片的访问功能,目前来说最佳方案是 Nginx。
  • 我们先来测试看看 Tracker 和 Storage 配置的有没有问题,看看文件上传功能是否能够跑通,当测试完全没问题了,我们再去安装 Nginx,再去实现访问图片的功能。

4. Java 客户端测试

首先我们创建一个普通的 Mavne 工程,添加如下依赖:

net.oschina.zcx7878
fastdfs-client-java
1.27.0.0

然后,在项目的 resources 目录下添加 FastDFS 的配置文件 fastdfs-client.properties,内容如下:

fastdfs.connect_timeout_in_seconds = 5fastdfs.network_timeout_in_seconds = 30fastdfs.charset = UTF-8fastdfs.http_anti_steal_token = falsefastdfs.http_secret_key = FastDFS1234567890fastdfs.http_tracker_http_port = 80fastdfs.tracker_servers = 192.168.91.128:22122fastdfs.connection_pool.enabled = truefastdfs.connection_pool.max_count_per_entry = 500fastdfs.connection_pool.max_idle_time = 3600fastdfs.connection_pool.max_wait_time_in_ms = 1000

其中 fastdfs.tracker_servers 是 Tracker 的地址,大家跟据自己的虚拟机Ip配置即可。

4.1 文件上传功能测试

代码如下:

@Test    void contextLoads() throws IOException, MyException {
ClientGlobal.initByProperties("fastdfs-client.properties"); TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; StorageClient1 client1 = new StorageClient1(trackerServer, storageServer); NameValuePair pairs[] = null; String fileId = client1.upload_file1("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\javaboy.jpg", "jpg", pairs); System.out.println(fileId); }
  • 首先这里加载配置文件,然后构造一个 TrackerClient 对象,接着再跟据这个对象获取到一个 TrackerServer,然后再创建一个 StorageClient1 实例。NameValuePair 中保存的就是文件的元数据信息,如果有的话,就以 key/value 的方式来设置,如果没有直接给一个 null 即可。

  • 最后调用 client 的 upload_file1 方法上传文件,第一个参数是文件路径,第二个参数是文件的扩展名,第三个参数是文件的元数据信息,这个方法的返回值,就是上传文件的访问路径,执行该方法,打印日志如下:

    在这里插入图片描述

  • group1/M00/00/00/wKj9gF6dngqASrBQAAAT8J10-TU753.jpg 就是文件的路径,如果你的测试结果也是这样就证明上传文件的功能没有问题。

5. Nginx 安装

  • 这时我们就可以通过安装 Nginx 来完成访问图片的功能:
  • Nginx 的安装分为两个步骤:
    • 安装 Nginx
    • 在 Storage 下安装 fastdfs-nginx-module

5.1 安装 Nginx【CentOS】

  1. 首先下载 Nginx
wget http://nginx.org/download/nginx-1.17.0.tar.gz
  1. 然后解压下载的目录,进入解压目录中,在编译安装之前,需要安装两个依赖:
yum -y install pcre-develyum -y install openssl openssl-devel
  1. 然后开始编译安装
./configuremakemake install
  1. 装好之后,默认安装位置在:
/usr/local/nginx/sbin/nginx
  1. 进入到该目录的 sbin 目录下,执行 nginx 即可启动 nginx【我们这里先不要启动nginx】

5.2 安装 fastdfs-nginx-module

【百度网盘已经下载好的】,将下载好的文件拷贝到 /usr/local 目录下,进入 /usr/local 目录,分别执行如下命令:

cd /usr/localtar -zxvf fastdfs-nginx-module-1.22.tar.gz

然后将 /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf 文件拷贝到 /etc/fdfs 目录下,并修改文件的内容:

cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/vim /etc/fdfs/mod_fastdfs.conf

在这里插入图片描述

  • 接下来,回到第一步下载的 nginx 安装文件的解压目录中,执行如下命令,重新配置编译安装:
./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/srcmakemake install
  • 安装完成后,修改 nginx 的配置文件,如下:
vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

  • 在这里配置 nginx 请求转发。
  • 配置完成后,启动 nginx ,看到如下日志,表示 nginx 启动成功:
// 首先进入 nginx 的目录中去cd /usr/local/nginx/sbin/// 启动 nginx ./nginx// 启动成功后的打印日志ngx_http_fastdfs_set pid=20932

全部安装成功了。

6. Java 客户端访问图片测试

  • 由于上面我们已经完成了文件上传的功能,并且拿到了文件Id,也就是如下图所示:
    在这里插入图片描述
  • 此时在浏览器中输入http://192.168.91.128/group1/M00/00/00/wKj9gF6dkA-AeHQ1AAAT8J10-TU507.jpg 就可以看到上传的图片了。

7. 文件下载

@Test    void download() throws IOException, MyException {        ClientGlobal.initByProperties("fastdfs-client.properties");        TrackerClient trackerClient = new TrackerClient();        TrackerServer trackerServer = trackerClient.getConnection();        StorageServer storageServer = null;        StorageClient1 client1 = new StorageClient1(trackerServer, storageServer);        byte[] bytes = client1.download_file1("group1/M00/00/00/wKj9gF6da6yAU-EMAAAT8J10-TU390.jpg");        FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\javaboy2.jpg"));        fos.write(bytes);        fos.close();    }

-代码解释:直接调用 download_file1 方法获取到一个 byte 数组,然后通过 IO 流写出到本地文件即可。

8. 安全问题

  • 现在任何人都能访问我们服务器上的文件,这肯定不安全,在上传的时候加上令牌即可。
  • 首先我们在服务端开启令牌校验:
vim /etc/fdfs/http.conf

在这里插入图片描述

  • 配置完成后,重启服务器:
./nginx -s stop./nginx
  • 接下来,准备一个获取令牌的方法,如下:
@Test    void getToken() throws UnsupportedEncodingException, NoSuchAlgorithmException, MyException {        int ts = (int) Instant.now().getEpochSecond();        String token = ProtoCommon.getToken("M00/00/00/wKj9gF6dkA-AeHQ1AAAT8J10-TU507.jpg", ts, "FastDFS1234567890");        StringBuilder sb = new StringBuilder();        sb.append("http://192.168.253.128")                .append("/group1/M00/00/00/wKj9gF6dkA-AeHQ1AAAT8J10-TU507.jpg")                .append("?token=")                .append(token)                .append("&ts=")                .append(ts);        System.out.println(sb.toString());    }
  • 这里我们主要是跟据 ProtoCommon.getToken 方法来获取令牌,注意这个方法的第一个参数就是你要访问的文件 id,注意,这个地址里边不要包含 group,千万别搞错了,第二个参数是时间戳,第三个参数是密钥,密钥要和服务端的配置一致。
  • 此时我们运行此方法,然后控制台打印一个路径,我们就可以点击去访问了【如果此时将路径中的 token去掉,就会访问失败,默认展示的就是 nginx 的错误页面】。

9. 踩坑过程【22122端口没有开放】

如果你的配置文件没有问题,但是发生连接不上 22122 这个端口的话,原因就是你的 防火墙没有开发 22122 着端口号,只要你开启了 22122 端口号就能避免这个错误了。

转载地址:http://jpqwi.baihongyu.com/

你可能感兴趣的文章
Algorithms: Kruskal's algorithm and Prim's algorithm for Minimum-spanning-tree
查看>>
Algorithm : Dijkstra's algorithm and Bellmon-Ford Paths algorithm
查看>>
Algorithm: k-nearest neighbors and decison boundary(Cross Validation)
查看>>
Algorithm: Principle Component Analysis for High Dimension Reduction Data
查看>>
Naive Bayesian for Text Classification (MLE, Gaussian Naive Bayesian)
查看>>
Algorithm: Decision Tree, Entropy, Information Gain and Continues features
查看>>
FastDFS 架构分析
查看>>
Windows 应用生成MiniDump文件的方法笔记
查看>>
安装FastDFS单机版环境
查看>>
动态规划-背包问题
查看>>
Windows10 + Nodejs调用C++语言Dll
查看>>
CSAPP - 一个简单的Shell
查看>>
《算法4》 Windows/Mac环境下使用Visual Studio Code和Orcale JDK1.8开发环境搭建
查看>>
精心整理很实用的前端笔记,看完你就在css上有很深的造诣了!!!
查看>>
前端开发在工作中用到的工具、软件、库.......------Sesiid
查看>>
正则表达式~~~很全的------Sestid
查看>>
在HTML中嵌入百度地图------Sestid
查看>>
Js或jQuery图片层叠轮播------Sestid
查看>>
js或jQuery实现返回顶部功能------Sestid
查看>>
JS实现拖拽效果------Sestid
查看>>