天天看点

FastDFS 的安装以及集成springboot

是什么

fastDFS是一个分布式文件存储系统,适合存储中小文件(不超过500M)的系统,有着动态扩容,数据备份等的特点。

4.05版本删去了http直接访问的内部数据的支持。所以需要加入Nginx在storage里进行区分

结构

  • 跟踪服务器(Tracker Server)

追踪服务器负责接收客户的请求,选择合适的存储位置(storage Server), 同时也会使用心跳机制确保storage Server是否存活。

tracker是连接storage和用户端(client)的部分,能将当前的磁盘使用情况反馈给用户端(client)。

tracker的内容放置于内存中,tracker地位对等,没有主从之分。因此不需要选举算法。

  • 存储服务器(storage server)

实际存储数据,分成若干组进行高可用,分布式存储的核心是通过tracker管理storage中的组。组内数据通过group记性隔离。

  • 客户端(client)

上传和下载的入口,每个客户端都要安装一个Nginx。

架构图

FastDFS 的安装以及集成springboot

写数据是通过tracker写入,tracker将数据写到某一个storage组内。

取数据的时候直接从storage里面读取。

纵向的数据是相同的复制数据,横向为所有数据。即所有的数据都在一个组上,这样在查找的时候就知道数据在哪里了 然后只要查询可用的节点就可以了。

上图中,竖着为一组,组内的信息相互复制,每组取一个数据集,就可以组成一个完整的数据集即组间实现高可用。

读写操作

写入

storage会创建2级目录文件,每一级256个,一共合计65536个。新文件会被哈希散列以后加入某一个子目录下。

FastDFS 的安装以及集成springboot

下载

下载操作是先查询storage server的ip和端口号,通过使用组名、路径、文件名三个进行唯一查找。

FastDFS 的安装以及集成springboot

单机安装

以下来自 爱编程(icodingedu.com) 航天班

1、gcc基础环境安装

#tracker,storage机器 都需要安装
yum -y install gcc automake autoconf libtool make
yum -y install gcc gcc-c++
           

2、libfastcommon安装

#tracker,storage机器 都需要安装
cd /usr/local/src
wget https://github.com/happyfish100/libfastcommon/archive/master.zip
yum -y install unzip
unzip master.zip
cd libfastcommon-master
./make.sh && ./make.sh install

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
           

3、FastDFS文件安装

#tracker,storage机器 都需要安装
cd /usr/local/src
wget https://github.com/happyfish100/fastdfs/archive/master.zip
unzip master.zip
cd fastdfs-master
./make.sh && ./make.sh install
           

4、配置跟踪器tracker

#创建tracker的数据文件/日志目录
mkdir /usr/local/mydata
cd /etc/fdfs
# 存一个副本
cp tracker.conf tracker.conf.samlpe
vi tracker.conf
#修改配置如下
disabled=false #启用配置文件
port=22122 #设置tracker的端口号
base_path=/usr/local/mydata #设置tracker的数据文件和日志目录
http.server_port=8080 #设置http端口号HTTP port on this tracker server

#启动tracker服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start #restart
#启动没有报错就为启动成功。
---
注意:对于存储负载有着以下三种规则:
# the method for selecting group to upload files
# 0: round robin
# 轮循
# 1: specify group
# 特殊store 也就是如果选择了这个 在下面需要选择放置的组
# 2: load balance, select the max free space group to upload file
# 默认是2 意味着会优先选择空间(可用)大的store进行存储
# 注意需要注意,一个组的空间大小是根据最小的容量来确定,从而要避免组内水平复制时候存不下。
store_lookup = 2

# which group to upload file
# when store_lookup set to 1, must set store_group to the group name
store_group = group2

           

5、配置存储器storage

#创建存放storage 数据/日志文件目录
mkdir /usr/local/mydata
cd /etc/fdfs
cp storage.conf.sample storage.conf
vi storage.conf
#修改配置如下
disabled=false #启用配置文件 
group_name=group1 #组名,根据实际情况修改,集群分组
port=23000 #设置storage的端口号
base_path=/usr/local/mydata #设置storage的日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配 
store_path0=/usr/local/mydata #存储路径,配置多块硬盘会用到
tracker_server=192.168.0.112:22122 #tracker服务器的IP地址和端口号 注意这里必须填本机内网ip不能填写回环地址不然会报错 这里是服务器的内网ip
http.server_port=8888 #设置http端口号the port of the web server on this storage server

#启动
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start  # restart
           
FastDFS 的安装以及集成springboot

在storage主动给tracker发送心跳进行注册。

这样可以实现动态扩容,只要和tracker建立连接就可以扩容。

下来我们对搭建的fastDFS进行测试。先上传一个文件已准备测试。

6、FastDFS本机client测试

cd /etc/fdfs
cp client.conf.samp吃的le client.conf
vi /etc/fdfs/client.conf
#修改配置文件
base_path=/usr/local/mydata
tracker_server=192.168.0.112:22122 #文件通过tracker上传
# 使用一下指令使用client客户端连接tracker上传文件
#/usr/bin/fdfs_test client.conf地址 upload 上传文件地址路径
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/fastDFS/a.jpg 
           

结果如下截图

FastDFS 的安装以及集成springboot

这里可以看到确实存在文件

FastDFS 的安装以及集成springboot
注意这里还是不能访问需要借助Nginx才行。

搭建http服务进行图片访问

以下为摘抄Nginx安装

FastDFS Version 4.05 remove embed HTTP support

如果是单机则不需要安装 fastdfs-nginx-module,直接做目录映射即可

安装Nginx提供http支持

1、安装PCRE rewrite模块需要使用到的正则表达式模块
cd /usr/local/src
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
tar -zxvf pcre-8.43.tar.gz
cd pcre-8.43
./configure
make && make install
           
2、安装zlib:用于对数据进行解压缩。网站之间通信时数据先压缩再传输,通过消耗CPU的方式来节省网络带宽
cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
           
3、安装openssl:用于网站加密通讯
cd /usr/local/src
wget http://www.openssl.org/source/old/1.0.2/openssl-1.0.2e.tar.gz
tar -zxvf openssl-1.0.2e.tar.gz
cd openssl-1.0.2e
./config
make && make install
           
4、安装Nginx
cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar -zxvf nginx-1.9.9.tar.gz
cd nginx-1.9.9
./configure --prefix=/usr/local/nginx
make && make install
           

进入Nginx的目录下修改配置文件

/usr/local/nginx/conf

下面的nginx.conf文件。

加入文件的路径

location ~/group1/M00 {
	  rewrite ^/group1/M00/(.*)$ /$1 break;
    root /usr/local/mydata/data;
}
           

然后重新加载

../sbin/nginx -s reload

我们访问刚才的地址就可以看到图片了

FastDFS 的安装以及集成springboot

集成springboot

官网

集成springboot的步骤就是导包、配置。

导包: 导入fastDFS的依赖

<dependency>
      <groupId>com.github.tobato</groupId>
      <artifactId>fastdfs-client</artifactId>
      <version>1.26.7</version>
</dependency>
           

配置:

# fastDFS的配置
#连接超时
fdfs.connect-timeout=3000
#读取超时
fdfs.so-timeout=5000
# tracker List 列表 集群的话可以写多个配置
fastdfs.tracker_servers = 10.0.11.247:22122,XX,XX,XX,XX:XXXX

           

代码:

这里为了简化测试上传了本地的图片,步骤是现加载出本地的图片然后转成流最终

@GetMapping("/dfs/upload")
    public String upload(){
        String filePath = "";

        File file = new File("D:\\BaiduNetdiskDownload\\图片\\photo\\2.jpg");
        try {
            // 
            InputStream fileInputStream = new FileInputStream(file);
            byte[] bytes = new byte[(int)file.length()];
            fileInputStream.read(bytes);

            StorePath jpg = fastFileStorageClient.uploadFile(new ByteArrayInputStream(bytes), file.length(), "jpg", null);
            String fullPath = jpg.getFullPath();
            System.out.println(fullPath);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return filePath;
    }
           

不过这个时候上传还是会报错。

FastDFS 的安装以及集成springboot
FastDFS 的安装以及集成springboot

【解释】这里的172.31.74.157:23000。这里的配置进入了tracker以后缺少代理导致这里会找本机上面的172.31.74.157:23000自然找不到。

看到storage注册tracker是通过内网。因此需要修改地址。

FastDFS 的安装以及集成springboot

为了验证我们修改地址为公网地址。

FastDFS 的安装以及集成springboot

再次运行项目

FastDFS 的安装以及集成springboot

返回了路径 我们将路径粘贴到地址栏,发现实现了上传功能。

FastDFS 的安装以及集成springboot

我们得到这里面的client - tracker - storage需要在同一个网段。余庆的公众号:fastdfs里面提到了建议将fastDFS部署在内网而且不要对外提供服务。不管是tracker的22122端口还是所有的storage的23000端口都不要对外暴露