FastDFS的使用

FastDFS的介绍

架构图

 

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

所需要的文件,上传到/usr/upload目录下

 FastDFS的安装

1.安装c语言环境

yum -y install gcc

2.安装c函数库

libfastcommon-master.zip(是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库)

#进入上传目录

cd /usr/upload

#解压上传的libfastcommon-master.zip
unzip libfastcommon-master.zip

#进入解压完成的目录
cd libfastcommon-master

#编译并且安装:
./make.sh 
./make.sh install

3.安装FastDFS

#解压FastDFS

tar -zxvf FastDFS_v5.08.tar.gz

#进入fastDFS

cd FastDFS

#编译并安装

./make.sh
./make.sh install

如果安装成功,会看到/etc/init.d/下看到提供的脚本文件:

  • fdfs_trackerd 是tracker启动脚本

  • fdfs_storaged 是storage启动脚本

ll /etc/fdfs/

4.配置并启动tracker服务

1.将模板文件复制

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

2.修改复制后的配置文件

vim /etc/fdfs/tracker.conf

3.修改的内容

base_path=/powershop/tracker 

 

4.修改完成,创建目录

mkdir -p /powershop/tracker

5.启动与停止

启动tracker服务:service fdfs_trackerd start

停止tracker服务:service fdfs_trackerd stop

6.查看是否启动:

ps -ef | grep fdfs.trackerd

7.设置tracker服务的开机自启:

chkconfig fdfs_trackerd on

 5.配置并启动storage服务

1.将模板文件复制

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

2.修改复制后的文件

vim /etc/fdfs/storage.conf

3.修改的内容

base_path=/powershop/storage                 # 日志文件存储根目录 

store_path0=/powershop/storage               # 文件存储目录 

tracker_server=192.168.204.131:22122     #  tracker服务器IP和端口

 

4.创建目录

mkdir -p /powershop/storage

5.启动与停止

启动storage服务:service fdfs_storage start

停止storage服务:service fdfs_storage stop

6.查看是否启动:

ps -ef | grep fdfs_storaged

7.设置storage服务开机启动:

chkconfig fdfs_storaged on

FastDFS和nginx的结合使用

为了承载更高的并发量,tracker可以做成集群。需要使用nginx做负载均衡。

fastdfs-nginx-module插件的作用

FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。

假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到.同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。

而fastdfs-nginx-module可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误

安装fastdfs-nginx-module插件

1.解压

 cd /usr/upload

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

#进入src目录

cd fastdfs-nginx-module/src/

#修改config

vim config

#使用以下底行命令

:%s+/usr/local/+/usr/+g

将所有的/usr/local替换为 /usr,这个才是正确的目录:

2.配置fastdfs-nginx-module与FastDFS关联

1.复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改

cp /usr/upload/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

vim /etc/fdfs/mod_fastdfs.conf

修改以下配置:

connect_timeout=10                       # 客户端访问文件连接超时时长(单位:秒)

tracker_server=192.168.204.131:22122    # tracker服务IP和端口

url_have_group_name=true                # 访问链接前缀加上组名

store_path0=/powershop/storage            # 文件存储路径

2.开启nginx支持

 cd /usr/upload/FastDFS/conf/
cp http.conf mime.types /etc/fdfs/

3.安装nginx

1.安装nginx的依赖库

yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

2.解压

cd /usr/upload

tar -zxvf nginx-1.10.0.tar.gz

3.配置nginx安装包,并指定fastdfs-nginx-model

cd nginx-1.10.0

./configure --prefix=/usr/local/nginx --add-module=/usr/upload/fastdfs-nginx-module/src

#编译并安装

make && make install

​   ​​​​​​nginx的开机自启 icon-default.png?t=M85Bhttp://t.csdn.cn/rFVHY

4.配置nginx动静分离

修改nginx的nginx.conf

 

基于上面的配置来使用

FastDFS改造power_shop_item工程 :

1.引入依赖

在父工程中,添加管理依赖,版本为:

<fastDFS-client-version>1.26.2</fastDFS-client-version>

<!--fastdfs-->
<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>${fastDFS-client-version}</version>
</dependency>

 子工程pom.xml中引入坐标

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

 2.引入配置类

3.application.yml 

 

4.配置hosts

C:\Windows\System32\drivers\etc目录下的hosts

#测试环境
192.168.204.158 image.powershop.com

5.测试:

创建测试类:

import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.domain.ThumbImageConfig;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={PowerShopItemApp.class})
public class FastDFSTest {

    @Autowired
    private FastFileStorageClient storageClient;

    @Autowired
    private ThumbImageConfig thumbImageConfig;

    
    3.Test
    public void testUpload() throws FileNotFoundException {
        // 要上传的文件
        File file = new File("D:/images/1.jpg");
        // 上传并保存图片,参数:1-上传的文件流 2-文件的大小 3-文件的后缀 4-可以不管他
        StorePath storePath = this.storageClient.uploadFile(
                new FileInputStream(file), file.length(), "jpg", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
    }

    @Test
    public void testUploadAndCreateThumb() throws FileNotFoundException {
        File file = new File("D:/images/1.jpg");
        // 上传并且生成缩略图
        StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
                new FileInputStream(file), file.length(), "png", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
        // 获取缩略图路径
        String path = thumbImageConfig.getThumbImagePath(storePath.getFullPath());
        System.out.println(path);
    }
}

结果:

group1:卷名

/M00:store_path0 目录

00/00:两层256个文件夹

访问第一组的第一个路径

访问第一组的第最后路径 

 访问第二组的第一个路径

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值