赞
踩
FastDFS简介
FastDFS是一款开源的轻量级分布式文件系统,使用C实现,支持Linux、BSD等unix-like操作系统。值得注意的是,fastdfs并不是通用的文件系统,只能通过专用的API访问。
fastdfs为互联网应用量身定做,解决了大容量文件存储的问题,fastdfs追求高性能和高扩展性。fastdfs的主要概念:
tracker-server:跟踪服务器。用于跟踪文件,主要起调度作用。在内存中记录了所有存储组和存储服务器的状态信息,是客户端和数据存储的主要枢纽。相比GFS更为精简,因为不记录文件索引。
storage-server: 存储服务器。用于存储文件。直接使用操作系统的文件系统来管理和组织文件。
group: 组,卷。多个服务器存在一个组中,在一个组中的服务器存储的文件是完全相同的,并且同一个组的服务器地位是对等的。对于文件的操作可以在任意一个组中的服务器上进行。
metadata: 元数据。以键值对的方式存储,用于存储文件的相关信息。
各大存储系统的对比
话说没有对比就没有伤害,fastdfs也不是万能的,需要根据业务来选择适合的存储系统。
存储系统 | 适合存储的文件类型 | 文件分布情况 | 系统性能 | 复杂度 | FUSE(用户文件系统) | POSIX() | 备份机制 | 通讯协议接口 | 社区情况 | 实现语言 |
---|---|---|---|---|---|---|---|---|---|---|
FastDFS | 4KB至500MB | 将小文件合并存储 | 很高 | 简单 | 不支持 | 不支持 | 组内冗余备份 | HTTP API | 国内用户 | C |
TFS | 所有文件 | 小文件合并以块组织分片 | - | 复杂 | 不支持 | 不支持 | 块存储多份,主辅灾备 | HTTP API | 少 | C++ |
MFS | 大于64K | 分片存储 | Master节点占用内存较高 | - | 支持 | 支持 | 多点备份,动态冗余 | 使用FUSE挂载 | 较多 | Perl |
HDFS | 大文件 | 大文件分片块存储 | - | 简单 | 支持 | 支持 | 多副本 | 原生API | 较多 | Java |
Ceph | 对象大文件 | OSD一主多从 | - | 复杂 | 支持 | 支持 | 多副本 | 原生API | 较少 | C++ |
MogileFS | 海量小图片 | - | 高 | 复杂 | 支持 | 不支持 | 动态冗余 | 原生API | 文档少 | Perl |
ClusterFS | 大文件 | - | - | 简单 | 支持 | 支持 | - | - | 多 | C |
GitHub项目主页: https://github.com/happyfish100/fastdfs
FastDFS客户端与服务器端交互原理
FastDFS+Nginx整合
架构图
安装FastDFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
修改配置文件
修改跟踪器配置文件:
1 |
|
修改存储器配置文件:
1 2 3 |
|
修改客户端配置文件:
1 2 |
|
启动
1 2 |
|
1 2 3 4 |
|
启动后要查看状态, 出现 active (exited)
字样可以尝试重启服务。
测试
1 2 |
|
文件存储在:
1 |
|
安装Nginx并配置模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
修改配置文件 /etc/fdfs/mod_fastdfs.conf
:
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
修改配置文件 /applications/nginx/conf/nginx.conf
, 在http区块添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
测试配置文件正确性并启动:
1 2 |
|
删除临时文件:
1 2 3 4 |
|
测试Nginx文件下载功能, 在浏览器输入: http://192.168.80.3:8000/group1/M00/00/00/wKhQA1ysjSGAPjXbAAVFOL7FJU4.tar.gz
一个nginx只能访问一个storage服务器的数据,所以多个storage服务器要配置多个nginx,然后将nginx按照请求路径中的组id(groupid)进行路由。
简单的启动停止服务的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
基于Token的防盗链实现
FastDFS内置使用Token的方式实现防盗链,Token是带有时效性的,Token中包含了文件id、时间戳ts和token。在FastDFS中使用URL带上ts和token的方式请求资源。在FastDFS中提供了生成Token的算法,扩展模块会对Token进行验证。由于Token的生成和校验都在服务器端,因此不会存在安全性问题。链接示例:
在 /etc/fdfs/http.conf
中修改:
1 2 3 4 5 6 7 8 |
|
使用Java客户端验证:
将客户端安装到本地仓库:
1 2 3 |
|
使用Maven创建一个普通的项目,在POM文件中添加依赖:
1 2 3 4 5 6 7 |
|
在resources目录下创建FastDFS配置文件 fastdfs-client.properties
:
1 2 3 4 5 6 7 |
|
创建 com.bluemiaomiao.Demo.java
类文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
如果访问时显示防盗链图片,可能是测试客户端与服务器之间的之间有一定差距,两个主机之间不能有分钟级别的差距,可以使用如下方法同步服务器:
1 2 3 4 |
|
整合FastDHT实现数据去重
FastDHT是分布式哈希系统(DHT),使用BerkeleyDB做数据存储,使用libevent做网络IO处理。依赖于libfastcommon组件。
下载
去Oracle官方网站下载 Berkeley DB 数据库,去Fastdfs的GitHub主页下载FastDHT的源码包。由于之前已经安装过linevent和libfastcommon,因此只需要安装数据库和FastDHT即可。
安装配置数据库与FastDHT
1 2 3 4 5 6 7 8 |
|
修改第27行代码:
1 |
|
-I
: 指定数据库提供的头文件目录
-L
: 指定数据库提供的库文件目录
1 2 3 4 |
|
配置
1 |
|
修改 /etc/fdht/fdht_client.conf
内容:
1 2 |
|
修改 /etc/fdht/fdht_servers.conf
内容:
1 |
|
修改 /etc/fdht/fdhtd.conf
内容:
1 2 |
|
修改 /etc/fdfs/storage.conf
内容:
1 2 3 4 |
|
主要需要包含服务器端配置文件。
1 2 |
|
启动并测试
1 |
|
重启使用:
1 |
|
查看结果:
1 2 |
|
由于安装FastDHT的时候关闭了FastDFS,因此需要启动FastDFS
1 |
|
修改之前的 start-service
脚本, 在启动tracker和storage服务之前添加:
1 |
|
在查看tracker和ngixn网络状态之前添加:
1 |
|
测试:
1 2 3 4 5 6 7 8 9 |
|
自定义 fastdfs-spring-boot-starter
为了快速构建SpringBoot项目,我们可以自定义一个场景启动器来解决。详细信息: https://github.com/bluemiaomiao/fastdfs-spring-boot-starter .
下面使用SpringBoot构建一个示例项目:
添加依赖:
1 2 3 4 5 |
|
在主配置类中添加注解:
1 2 3 4 5 6 7 8 9 10 11 |
|
此时将会自动初始化好全局客户端。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。