学习FastDfs(三)
FASTDFS是什么
FastDFS是由国人余庆所开发,其项目地址:https://github.com/happyfish100
FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。
FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过 专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、 HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
FastDFS的特性
1、分组存储,灵活简洁、对等结构,不存在单点
2、 文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server
3、和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块
4、大、中、小文件均可以很好支持,支持海量小文件存储
5、 支持多块磁盘,支持单盘数据恢复
6、 支持相同文件内容只保存一份,节省存储空间
7、 存储服务器上可以保存文件附加属性
8、 下载文件支持多线程方式,支持断点续传
指标 |
FastDFS |
mogileFS |
系统简洁性 |
简洁,只有两个角色:tracker和storage |
一般,有三个角色:tracker,storage和存储文件信息的mysql db |
系统性能 |
很高(没有数据库,文件同步直接点对点,不经过tracker中转) |
高(使用mysql来存储文件索引等信息文件同步通过tracker调度和中转) |
系统稳定性 |
高(c语言开发,可以支持高并发和高负载) |
一般(Perl语言开发,高并发和高负载支持一般) |
RAID方式 |
分组(组内冗余),灵活性大 |
动态冗余,灵活性一般 |
通信协议 |
专有协议 下载文件支持http |
http |
技术文档 |
较详细 |
较少 |
文件附加属性(meta data) |
支持 |
不支持 |
相同内容文件只保存一分 |
支持 |
不支持 |
下载文件时支持文件偏移量 |
支持 |
不支持 |
FastDFS和集中存储方式对比
指标 |
FastDFS |
NFS |
集中存储设备如:NetApp,NAS |
线性扩容性 |
高 |
差 |
差 |
文件高并发访问性能 |
高 |
差 |
一般 |
文件访问方式 |
专有API |
POSIX |
支持POSIX |
硬件成本 |
较低 |
中等 |
高 |
相同文件内容只保存一份 |
支持 |
不支持 |
不支持 |
工作方式:客户端向tracker发出请求,然后tracker从storage节点拿到源数据,返还给客户端,然后客户端根据源数据再去请求storage节点。
FastDFS架构解读
1.只有两个角色,tracker server和storage server,不需要存储文件索引信息
2.所有服务器都是对等的,不存在Master-Slave关系
3.存储服务器采用分组方式,同组内存储服务器上的文件完全相同(RAID 1)
4.不同组的storage server之间不会相互通信
5.由storage server主动向tracker server报告状态信息,tracker server之间通常不会相互通信
系统架构-上传文件流程图
1. client询问tracker上传到的storage;
2. tracker返回一台可用的storage;
3. client直接和storage通信完成文件上传,storage返回文件ID。
•系统架构-下载文件流程图
1. client询问tracker下载文件的storage,参数为文件ID(组名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通信完成文件下载。
FastDFS同步机制
1.采用binlog文件记录更新操作,根据binlog进行文件同步同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
2.文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
3.上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。
FastDFS用户请求过程
FastDFS核心组件
Tracker:调度器,负责维持集群的信息,例如各group及其内部的storage node,这些信息也是storage node报告所生成;每个storage node会周期性向tracker发心跳信息;
storage server:以group为单位进行组织,任何一个storage server都应该属于某个group,一个group应该包含多个storage server;在同一个group内部,各storage server的数据互相冗余;
FastDFS运行机制
如何在组中挑选storage server:
1、rr;
2、以ip为次序,找第一个,即IP地址较小者;
3、以优先级为序,找第一个;
如何选择磁盘(存储路径):
1、rr;
2、剩余可用空间大者优先;
生成FID:
由源头storage server ip、创建时的时间戳、大小、文件的校验码和一个随机数进行hash计算后生成;最后基于base64
进行文本编码,转换为可打印字符;
groupID/MID/H1ID/H2ID/file_name
groupID:组编号
MID:存储路径(存储设备)编号
H1ID/H2ID:目录分层
file_name:文件名,不同于用户上传时使用文件名,而是由服务器生成hash文件名;
服务器IP、文件创建时的时间戳、文件大小、文件名和扩展名;
文件同步:
每个storage server在文件存储完成后,会将其信息存于binlog, binlog不包含数据,仅包含文件名等元数据信息;
binlog可用于同步;
FastDFS配置修改
tracker:
编辑tracker server配置文件tracker.conf,需要修改内容如下:
disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker
storage server:
disabled=false(默认为false,表示是否无效)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默认为8888,nginx中配置的监听端口那之一致)
实验:企业级分布式存储应用与实战fastdfs实现
实验环境:3台机器,一台tracker调度器,两台storage节点服务器
(1)安装fastdfs
1.创建一个安装fastdfs所需软件包的目录
cd /app
mkdir fastdfs
2.用lftp将安装fastdfs所需软件包下载到该目录里
lftp 172.17.0.1
lftp 172.17.0.1:/pub/Sources/7.x86_64/fastdfs> mget *
3.安装fastdfs
yum localinstall fastdfs* lib* -y 因为有依赖关系,所以和依赖的库文件包一起安装
4.另外两台机器也是如此
(2)配置tracker调度器
cd /etc/fdfs
cp tracker.conf.sample tracker.conf 在/etc/fdfs目录下有一个tracker配置文件模板,将其复制并改名为tracker.conf作为tarcker的配置文件
vim tracker.conf
disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker
mdkir /data/fastdfs/tracker -p
/etc/init.d/fdfs_trackerd start 启动tracker服务
注意:路径和创建的目录要一致,不要写错,否则tracker服务就会起不来
ss -ntl 查看是否有22122端口
ps -ef|grep fdfs 查看tracker进程
(3)配置storage节点服务器
cd /etc/fdfs
cp storage.conf.sample storage.conf 在/etc/fdfs目录下有一个storage配置文件模板,将其复制并改名为storage.conf作为storage的配置文件
vim storage.conf
disabled=false(默认为false,表示是否无效)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默认为8888,nginx中配置的监听端口那之一致)
mkdir /data/fastdfs/storage -p
/etc/init.d/fdfs_storaged start 启动storage服务
注意:路径和创建的目录要一致,不要写错,否则storage服务就会起不来
ss -ntl 查看是否有23000端口
ps -ef|grep fdfs
(4)查看存储节点状态,需要配置客户端配置文件
cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf
base_path=/data/fastdfs/tracker
tracker_server=192.168.10.190:22122
fdfs_monitor /etc/fdfs/client.conf 查看存储节点状态
(5)文件上传
fdfs_upload_file /etc/fdfs/client.conf /root/solo-2.2.0.war
在storage节点服务器上查看
我们可以在tracker调度器上做md5校验
6.上传文件查看(在调度器上查看)
fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKgKu1ocsWGADh40AABakQQUHpk839.log
7.文件下载
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgKu1ocsWGADh40AABakQQUHpk839.log
8.FastDFS实现nginx代理(在storage节点)
1、安装nginx以及对应模块
cd /app/fastdfs
yum localinstall nginx* -y
2、修改nginx的location配置,映射路径和启动模块
location /group1/M00 {
root /data/fastdfs/storage/data;
ngx_fastdfs_module;
}
3、修改对应fastdfs模块
vim /etc/fdfs/mod_fastdfs.conf
url_have_group_name = true
tracker_server=192.168.10.190:22122
store_path0=/data/fastdfs/storage
4.启动nginx服务
5.然后我上传一个图片文件
6.在浏览器上去访问,访问成功
学习FastDfs(三)的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- 从零开始学习jQuery (三) 管理jQuery包装集
本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...
- 前端学习 第三弹: JavaScript语言的特性与发展
前端学习 第三弹: JavaScript语言的特性与发展 javascript的缺点 1.没有命名空间,没有多文件的规范,同名函数相互覆盖 导致js的模块化很差 2.标准库很小 3.null和unde ...
- Android Animation学习(三) ApiDemos解析:XML动画文件的使用
Android Animation学习(三) ApiDemos解析:XML动画文件的使用 可以用XML文件来定义Animation. 文件必须有一个唯一的根节点: <set>, <o ...
- 三、Android学习第三天——Activity的布局初步介绍(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 三.Android学习第三天——Activity的布局初步介绍 今天总结下 ...
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB
JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...
- MyEclipse Spring 学习总结三 SpringMVC
MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...
- Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar
web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- MyBatis学习 之 三、动态SQL语句
目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...
随机推荐
- windev的弹窗详情页滚动条实现方法以及弹窗尺寸规划
按照企业信息系统的设计习惯,我们一般将信息以列表的方式在主窗口展现,同时设置需要展现的字段,一些系统会将这个窗口称为总表页.列表页等.而信息的编辑或完整信息的查询,一般通过一个弹窗来实现,一些系统会将 ...
- .Net Core之JWT授权
一.什么是JWT 文章参考:https://www.leo96.com/article/detail/55 JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义 了一种紧凑且自包含 ...
- c# 编程学习(三)
方法是具名的语句序列 returnType methodName ( parameterList ) { // 这里添加方法主体语句 } returnType(返回类型)是类型名称,指定方法返回的数 ...
- yapi安装 - windows
yapi官网https://hellosean1025.github.io/yapi/devops/index.html 简介 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产 ...
- js求质数(1-100)
//求质数,首先要明白质数的概念:除了本身和1外,其他数都是除不尽的. var zhiShuArr = [1, 2, 3]; //可以很容易的确定了.这三个质数 for (var i = 4; i & ...
- SQL Server的Linked Servers
文章搬运自:SQL Server的Linked Servers(链接) 参考引用一下,感谢作者~ 我们在使用SQL Server时,有时会有这种需求,需要从一个SQL Server服务器A中,查询另一 ...
- Dubbo是什么?核心总结
Dubbo --是SOA架构的具体的实现框架! 2.1 Dubbo简介 Apache Dubbo是一款高性能的Java RPC框架.官网地址:[http://dubbo.apache.org] dub ...
- 矩池云上安装yolov5并测试教程
官方仓库:https://github.com/ultralytics/yolov5 官方文档:https://docs.ultralytics.com/quick-start/ 此案例我是租用了k8 ...
- Yaconf-配置管理扩展
1.下载yaconf安装包git clone https://github.com/laruence/yaconf.git2.目录切换至yaconf,编译生成so 文件(找到你的phpize位置) / ...
- composer.json和composer.lock到底是什么以及区别?
composer方文档:https://docs.phpcomposer.com/04-schema.html我们在做项目的时候,总是要安装一些依赖.composer给我们提供了很多方便.直接运行co ...