分布式文件存储系统【Fastdfs】环境搭建,使用java客户端调用FastDFS

在这里插入图片描述
文档里有详细介绍,每一步都很详细

链接如下:
链接:https://pan.baidu.com/s/1TOqQJwLmcRvKKONTVN54hA
提取码:26p5

FastDfs安装文档

在这里插入图片描述

安装顺序

  1. libfastcommon
  2. fdfs_tracker
    依赖:gcc、libevent、perl
  3. fdfs_storage
  4. FastDFS-nginx-module
  5. nginx
    依赖:pcre-devel、zlib-devel

功能文件目录
opt/fastdfs 数据存储目录
usr/local/fdfs 启动文件目录
etc/fdfs 配置文件目录
usr/bin/fdfs_trackerd 启动配置
etc/init.d/fdfs_trackerd 启动服务脚本

FastDFS–tracker安装
本教程使用Centos7.4作为安装环境。

  1. 安装gcc 依赖环境 yum install gcc -y
  2. yum -y install libevent
  3. 如果没有perl库,需要使用yum install perl* 命令安装一下
  4. 安装libfastcommon
  5. 上传压缩包文件libfastcommonV1.0.7.tar.gz 到 /usr/local目录下,并解压。
  6. tar -zxvf libfastcommonV1.0.7.tar.gz
  7. 进入到解压后的文件夹中
  8. 进行编译 ./make.sh
  9. 如果出现编译perl 不识别 运行下面这段命令
  10. yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
  11. /make.sh install
  12. 注意:libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
  13. cp /usr/lib64/libfastcommon.so /usr/lib/

安装tracker

  1. 上传FastDFS_v5.05.tar.gz到 /usr/local 目录下
  2. 解压编译安装
  3. tar -zxvf FastDFS_v5.05.tar.gz
  4. cd FastDFS
  5. ./make.sh
  6. ./make.sh install
  7. 安装成功之后,将安装目录下的conf下的文件拷贝到/etc/fdfs/下。
  8. cd conf
  9. cp * /etc/fdfs/
  10. 修改配置文件
  11. vim /etc/fdfs/tracker.conf
    在这里插入图片描述
  12. 创建fastdfs文件夹
    mkdir /opt/fastdfs

设置启动项

  1. mkdir /usr/local/fdfs

  2. 拷贝安装目录下stop.sh 和restart.sh 到/usr/local/fdfs/
    cp restart.sh /usr/local/fdfs/
    cp stop.sh /usr/local/fdfs/

  3. 修改启动脚本
    vim /etc/init.d/fdfs_trackerd
    在这里插入图片描述
    在这里插入图片描述

把启动脚本中的路径按照上图修改
修改完毕后
4. 注册服务
chkconfig --add fdfs_trackerd
然后可以用service fdfs_trackerd start 启动测试 如下图
在这里插入图片描述

FastDFS—storage配置

  1. 修改配置文件
    vim /etc/fdfs/storage.conf
    在这里插入图片描述
    在这里插入图片描述

  2. 创建 fdfs_storage文件夹
    mkdir /opt/fastdfs/fdfs_storage

  3. 设置服务
    vim /etc/init.d/fdfs_storaged
    在这里插入图片描述
    在这里插入图片描述

  4. chkconfig - -add fdfs_storaged

  5. 启动服务
    service fdfs_storaged start
    在这里插入图片描述

上传图片测试

  1. 修改 /etc/fdfs/client.conf文件
    vim /etc/fdfs/client.conf
base_path=/opt/fastdfs
tracker_server=192.168.67.163:22122

测试上传:
执行命令:/usr/bin/fdfs_test /etc/fdfs/client.conf upload 图片路径/文件名
在这里插入图片描述

FastDFS整合nginx

  1. 安装nginx整合插件fastdfs-nginx-module
    上传fastdfs-nginx-module_v1.16.tar.gz上传到 /usr/local
    tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
  2. 编辑配置文件:修改config文件将/usr/local/路径改为/usr/
    (这里只修改两个路径,第二行不用改,图是错的)
    vim fastdfs-nginx-module/src/config
    在这里插入图片描述
  3. 将FastDFS-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
    cp mod_fastdfs.conf /etc/fdfs/
    并修改mod_fastdfs.conf的内容:
    vim /etc/fdfs/mod_fastdfs.conf
    在这里插入图片描述
    在这里插入图片描述
    继续修改
    在这里插入图片描述
  4. 将libfdfsclient.so拷贝至/usr/lib下
    cp /usr/lib64/libfdfsclient.so /usr/lib/

安装nginx

  1. 创建nginx/client目录
    mkdir -p /var/temp/nginx/client
  2. 安装环境:
    安装pcre库
    yum -y install pcre-devel
    安装zlib库
    yum install -y zlib-devel
  3. 上传nginx
    上传nginx压缩包到/usr/local目录下,解压
    tar -zxvf nginx-1.12.2.tar.gz
  4. 添加fastdfs-nginx-module模块
    cd nginx-1.12.2到nginx目录下,执行如下命令
    ./configure
    –prefix=/usr/local/nginx
    –pid-path=/var/run/nginx/nginx.pid
    –lock-path=/var/lock/nginx.lock
    –error-log-path=/var/log/nginx/error.log
    –http-log-path=/var/log/nginx/access.log
    –with-http_gzip_static_module
    –http-client-body-temp-path=/var/temp/nginx/client
    –http-proxy-temp-path=/var/temp/nginx/proxy
    –http-fastcgi-temp-path=/var/temp/nginx/fastcgi
    –http-uwsgi-temp-path=/var/temp/nginx/uwsgi
    –http-scgi-temp-path=/var/temp/nginx/scgi
    –add-module=/usr/local/fastdfs-nginx-module/src

注意:特别注意最后一行,请按照自己的实际目录填写

执行结果如下,就说明成功了
在这里插入图片描述
5. 编译
[root@localhost nginx-1.12.2]# make
6. 安装
[root@localhost nginx-1.12.2]# make install
7.编辑 nginx.conf
vim /usr/local/nginx/conf/nginx.conf
在这里插入图片描述
注意:是location / 不是/group1/M00/
图片内容有错误

启动nginx

  1. /usr/local/nginx/sbin/nginx

  2. 设置开机启动
    vim /etc/rc.d/rc.local

  3. 需要关闭防火墙
    systemctl disable firewalld

  4. 测试

  5. /usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/ty.jpg

在这里插入图片描述
6. 这时候可以直接访问了
在这里插入图片描述

关于集群,就是在不同机器上配置多个storage,或者配置多个tracker
在这里插入图片描述
在这里插入图片描述

利用Java客户端调用FastDFS

服务器安装完毕后,咱们通过Java调用fastdfs
加载Maven依赖
fastdfs 没有在中心仓库中提供获取的依赖坐标。
只能自己通过源码方式编译,打好jar 包,安装到本地仓库。
官方仓库地址:
https://github.com/happyfish100/fastdfs-client-java
它其实就是一个maven工程,下载完成后
直接用idea 直接把这个源码作为模块导入工程
在这里插入图片描述
别的不用改,只把pom.xml中的版本改成1.27。
在这里插入图片描述
然后右边 执行install 就好了
在这里插入图片描述
安装好了 ,别的模块就可以直接使用这个坐标了

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

而这个fastdfs-client-java模块可以从idea 中删除。
加入tracker.conf文件
在这里插入图片描述

tracker_server=172.16.31.67:22122

# 连接超时时间,针对socket套接字函数connect,默认为30秒
connect_timeout=30000

# 网络通讯超时时间,默认是60秒
network_timeout=60000
然后可以进行一下上传的测试
@RunWith(SpringRunner.class)
@SpringBootTest

@Test
public void textFileUpload() throws IOException, MyException {
    String file = this.getClass().getResource("/tracker.conf").getFile();
    ClientGlobal.init(file);
    TrackerClient trackerClient=new TrackerClient();
    TrackerServer trackerServer=trackerClient.getConnection();
    StorageClient storageClient=new StorageClient(trackerServer,null);
    String orginalFilename="e://victor.jpg";
    String[] upload_file = storageClient.upload_file(orginalFilename, "jpg", null);
    for (int i = 0; i < upload_file.length; i++) {
        String s = upload_file[i];
        System.out.println("s = " + s);
    }

}

打印结果
在这里插入图片描述
这个打印结果实际上就是我们访问的路径,加上服务器地址我们可以拼接成一个字符串
可以在浏览器直接访问

http://172.16.31.67/group1/M00/00/00/wKhDo1qjU2qAWKQmAAATla901AQ534.jpg

在这里插入图片描述
上传成功!

对接到业务模块中
在修改Controller的方法
利用@Value 标签可以引用application.properties中的值
fileServer.url=http://172.16.31.67

@Value("${fileServer.url}")
String fileUrl;

@RequestMapping(value = "fileUpload",method = RequestMethod.POST)
public String fileUpload(@RequestParam("file") MultipartFile file) throws IOException, MyException {
    String imgUrl=fileUrl;
    if(file!=null){
        System.out.println("multipartFile = " + file.getName()+"|"+file.getSize());
        String configFile = this.getClass().getResource("/tracker.conf").getFile();
        ClientGlobal.init(configFile);
        TrackerClient trackerClient=new TrackerClient();
        TrackerServer trackerServer=trackerClient.getConnection();
        StorageClient storageClient=new StorageClient(trackerServer,null);
        String filename=    file.getOriginalFilename();
        String extName = StringUtils.substringAfterLast(filename, ".");

        String[] upload_file = storageClient.upload_file(file.getBytes(), extName, null);
        imgUrl=fileUrl ;
        for (int i = 0; i < upload_file.length; i++) {
            String path = upload_file[i];
            imgUrl+="/"+path;
        }
    }
    return imgUrl;
}

至此我们解决了文件上传的功能。
建议:初级开发和高级开发的差别就是在环境搭建和功能设计和代码设计,架构设计的差别(个人认为),所以应该把上传文件的功能直接写成一个工具类,controller层直接进行注入,调用

发布了21 篇原创文章 · 获赞 1 · 访问量 379

猜你喜欢

转载自blog.csdn.net/qq_44909430/article/details/103901672