企业级分布式存储应用与实战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实现的更多相关文章
- 项目实战9—企业级分布式存储应用与实战MogileFS、FastDFS
企业级分布式存储应用与实战-mogilefs 环境:公司已经有了大量沉淀用户,为了让这些沉淀用户长期使用公司平台,公司决定增加用户粘性,逐步发展基于社交属性的多样化业务模式,决定开展用户讨论区.卖家秀 ...
- 企业级分布式存储应用与实战MogileFS、FastDFS
项目实战9—企业级分布式存储应用与实战MogileFS.FastDFS 目录 实战一:企业级分布式存储应用与实战 mogilefs 实现 原理 1.环境准备 2.下载安装,每个机器都一样 3.数据 ...
- 实验:企业级分布式存储应用与实战-mogilefs实现
实验:企业级分布式存储应用与实战-mogilefs实现 (1)安装mogilefs 1.创建一个存放安装mogilefs所需的软件包的目录 cd /app/ mkdir mogilefs cd mog ...
- 企业级分布式存储应用与实战-mogilefs实现
Mogilefs是什么 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...
- Mysql实现企业级数据库主从复制架构实战
场景 公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司 ...
- 项目实战7—Mysql实现企业级数据库主从复制架构实战
Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公 ...
- JAVA企业级应用服务器之TOMCAT实战
JAVA企业级应用服务器之TOMCAT实战 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App ...
- 企业级NginxWeb服务优化实战(下)
企业级NginxWeb服务优化实战(下) 4. Nginx站点目录及文件URL访问控制 4.1 根据扩展名限制程序和文件访问 Web2.0时代,绝大多数网站都是以用户为中心多的,例如:bbs,blog ...
- 企业级NginxWeb服务优化实战(上)
企业级NginxWeb服务优化实战(上) 1. Nginx基本安全优化 1.1 调整参数隐藏Nginx软件版本号信息 一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题 ...
随机推荐
- 配置不同环境下启用swagger,在生产环境关闭swagger
前言 Swagger使用起来简单方便,几乎所有的API接口文档都采用swagger了.使用示例:http://www.cnblogs.com/woshimrf/p/swagger.html, 现在开发 ...
- 【倍增】洛谷P3379 倍增求LCA
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- SAP成都研究院35岁以上的开发人员都去哪儿了?
2006年成立的SAP成都研究院,位于天府软件园B区.如今,因为研究院发展的不断壮大, 已经搬迁到天府软件园E区了,因此,发生在图片building各种充满悲欢离合的故事,已经成为一部分小伙伴脑海中难 ...
- [原创]同一个Tomcat,配置多个context、多个Host
需求前提: 系统结束后,需要部署到服务器上. 目前只可以映射到一个固定IP的非80端口. 而server端和web端都要暴露到外网. 所以配置两个context,使得client应用不需要添加服务名, ...
- .Net Core建站(4):FTP发布项目及连接服务器数据库
总感觉,今天(2018-1-14)下午写不完这篇,虽然蛮简单,只是点点点,,, 主要是记录两个, 1.连接服务器的数据库 2.项目FTP发布到服务器 使用数据库:SQL Service 2017 使用 ...
- jetty和tomcat的区别
jetty:是一个开源的servlet容器,基于java的web容器,例如给jsp和servlet提供运行环境,jetty是使用java编写的,他的api是一组以jar包的形式发布,开发人员可以将je ...
- python 最基本的的单例模型的实现及应用
在我们python开发过程很多 ,在很多地方都会用到单例模式,确保数据的唯一性,最简单的单例模式,我们可以模块导入的方式实现,因为导入文件,无论import多少次 都只导入一次模块. 方法一:装饰器 ...
- main函数是主线程吗
1.线程的概念: 线程是程序最基本的运行单位,而进程不能运行,所以能运行的,是进程中的线程. 2.线程是如何创建起来的: 进程仅仅是一个容器,包含了线程运行中所需要的数据结构等信息.一个进程创建时,操 ...
- 近期热门微信小程序demo源码下载汇总
近期微信小程序demo源码下载汇总,乃小程序学习分析必备素材!点击标题即可下载: 即速应用首发!原创!电商商场Demo 优质微信小程序推荐 -秀人美女图 图片下载.滑动翻页 微信小程序 - 新词 GE ...
- BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主
4219: 跑得比谁都快 3007: 拯救小云公主 三角剖分的解释可以看这里:http://www.cnblogs.com/Enceladus/p/6706444.html 后一道是前一道的弱化版. ...