一.介绍
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工具类
点击下载