FastDFS分布式文件系统

一.介绍

 FastDFS是用C语言编写的一款开源的分布式文件系统.为互联网量身定制, 充分考虑了冗余备份, 负载均衡, 线性扩容等机制,并注重高可用,高性能等指标. 使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传,下载等服务.

二.架构

 FastDFS架构包括Tracker server和Storage server.
Tracker server : 对Storage server进行负载均衡和调度, 在文件上传时会直接请求Tracker server, 然后Tracker server可以根据一些策略找到可用的Storage server来提供文件上传服务. 所以可以将tracker称为追踪服务器或调度服务器.
Storage server : 作用是文件存储. 定时向tracker server发送状态信息, 报告自身情况(磁盘剩余,读写次数,文件同步情况等). 客户端上传的文件最终存储在Storage服务器上, Storage server没有实现自己的文件系统而是利用操作系统的文件系统来滚里文件. 可以将storage称为存储服务器.
这里写图片描述
Tracker集群 : FastDFS集群中的Tracker server可以配置多台, Tracker server之间是相互平等关系同时提供服务, Tracker server不存在单点故障. 客户端请求Tracker server采用轮询方式, 如果请求的tracker无法提供服则换另一个tracker.
Storage集群 : Storage集群采用了分组存储(group)方式. storage集群由一个或多个组构成, 一个组由一台或者多台存储服务器组成, 组内的Storage server之间是平等关系. 不同组的storage server不会互相通信, 同组内的Storage server之间会相互连接进行文件同步, 从而保证同组内的每个storage上的文件完全一致.一个组的存储容量为改组内存储服务器容量最小的那个, 集群存储总容量为集群中所有组的存储容量之和, 由此可见组内存储服务器的软硬件配置最好是一致的.
storage server采用分组存储方式的好处是灵活.,可控制性强. 一个分组的存储服务器访问压力较大时, 可以在改组增加存储服务器来扩充服务能力(纵向扩容). 当系统容量不足时, 可以增加组来扩充容量(横向扩容).

文件上传流程:

这里写图片描述
最后返回的文件信息格式: 组名+虚拟磁盘路径+二级目录+文件名
这里写图片描述
① 组名: 文件上传后所在的storage组名称, 在文件上传成功后有storage服务器返回, 需要客户端自行保存.
**② 虚拟磁盘路径:**storage配置的虚拟路径, 与磁盘选项store_path*对应. 如果配置了store_path0则是M00, 如果配置了store_path1则是M01, 以此类推.
**③ 数据两级目录:**storage服务器在每个虚拟磁盘路径下创建的两级目录, 用于存储数据文件.
④ 文件名: 与文件上传时不同. 是由存储服务器根据特定信息生成, 文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

三.FastDFS下载

下载地址:
网盘下载链接

四.FastDFS安装(Linux)

第一步:安装gcc环境
yum install -y gcc-c++
第二步:安装libevent, FastDFS依赖libevent库
yum install -y libevent
第三步:安装libfastcommon, libfastcommon是FastDFS官方提供的包, 包含了FastDFS运行所需要的一些基础库.

点击下载libfastcommonV1.0.7.tar.gz
① 上传libfastcommonV1.0.7.tar.gz, 并解压缩

tar -zxf libfastcommonV1.0.7.tar.gz

②编译安装, 进入libfastcommon-1.0.7目录

./make.sh
./make.sh install

③拷贝libfastcommon.so文件至/usr/lib目录

cp /usr/lib64/libfastcommn.so /usr/lib

注意:
libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下, 由于FastDFS程序引用usr/lib目录, 所以需要将/usr/lib64下的库文件拷贝至/usr/lib下.

第四步: 安装

①上传FastDFS_v5.05.tar.gz, 并解压缩

tar -zxf FastDFS_v5.05.tar.gz

②编译安装, 进入FastDFS目录

./make.sh
./make.sh install
第五步: 拷贝FastDFS/conf目录下的文件到/etc/fdfs目录下
cp /root/FastDFS/conf/* /etc/fdfs
第六步: FastDFS配置, 进入/etc/fdfs目录

注意: base_path和store_path0目录要存在.
①Tracker配置, 修改tracker.conf

base_path=/usr/local/fastdfs/tracker

②Storage配置, 修改storage.conf

#指定storage的组名
group_name=group1
base_path=/usr/local/fastdfs/storage
store_path0=/usr/local/fastdfs/storage
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......
#配置tracker服务器IP和端口
tracker_server=192.168.242.140:22122   
#如果有多个则配置多个tracker
#tracker_server=192.168.101.4:22122

③创建目录

mkdir /usr/local/fastdfs/tracker –p
mkdir /usr/local/fastdfs/storage –p
第六步: 启动

正常启动:
Tracker启动命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
Storage启动命令:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

设置开机启动:
 vim /etc/rc.d/rc.local
 将运行命令添加进文件:
 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

五.使用

1. 引入FastDFS依赖
<dependency>
    <groupId>fastdfs_client</groupId>
    <artifactId>fastdfs_client</artifactId>
    <version>1.25</version> 
</dependency>
2.创建测试代码

①在resourses下创建fdfs_client.conf文件

tracker_server=192.168.242.140:22122
public class TestFastdfsClient {
    //客户端配置文件
    private String conf_filename = "resourse/fdfs_client.conf";
    // 本地需要上传的文件
    private String filename = "c:\\Users\\think\\Pictures\\1.jpg";
    @Test
    public void test() throw Exception {
        // 初始化加载配置文件
        ClientGlobal.init(conf_filename);
        //获取tracker的客户端
        TrackerClient client = new TrackerClient();
        //获取tracker服务端
        TrackerServer tackerServer = client.getConnection();
        //获取storage的客户端
        StorageClient storageClient = new StorageClient(trackerServer,null);
        //通过storage的客户端完成上传
        String[] upload_file = storageClient.upload_file(filename,"jpg",null);
        for(String s: upload_file){
            System.out.println(s);
        } 
    } 
}

另附:FastDFSClient工具类
点击下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值