FastDFS的介绍
- 格式:pdf
- 大小:126.57 KB
- 文档页数:2
FastDFS的介绍
FastDFS的介绍
FastDFS
FastDFS是由国⼈余庆所开发,其项⽬地址:
https://github.com/happyfish100
FastDFS是⼀个轻量级的开源分布式⽂件系统,主要解决了⼤容量的⽂件存储和⾼并发访问的问题,⽂件存取时实现了负载均衡。
FastDFS是⼀款类Google FS的开源分布式⽂件系统,它⽤纯C语⾔实现,⽀持Linux、FreeBSD、AIX等UNIX系统。
FastDFS只能通过专有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架构图
FastDFS架构解读
只有两个⾓⾊,tracker server和storage server,不需要存储⽂件索引信息
所有服务器都是对等的,不存在Master-Slave关系
存储服务器采⽤分组⽅式,同组内存储服务器上的⽂件完全相同(RAID 1)
不同组的storage server之间不会相互通信
由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通信完成⽂件下载。
Fast同步机制
采⽤binlog⽂件记录更新操作,根据binlog进⾏⽂件同步
同⼀组内的storage server之间是对等的,⽂件上传、删除等操作可以在任意⼀台storage server上进⾏;
⽂件同步只在同组内的storage server之间进⾏,采⽤push⽅式,即源服务器同步给⽬标服务器;
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
上述第⼆条规则有个例外,就是新增加⼀台storage server时,由已有的⼀台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。
FastDFS⽤户请求过程
FastDFS核⼼组件
Tracker:
调度器,负责维持集群的信息,例如各group及其内部的storage node,这些信息也是storage node报告所⽣成,每个storagenode会周期性向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常⽤命令
1》查看存储节点状态
# fdfs_monitor /etc/fdfs/client.conf
2》上传测试
fdfs_test
3》⽂件上传
fdfs_upload_file /etc/fdfs/client.conf /root/solo-2.2.0.war
4》⽂件查看
fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war
5》⽂件下载
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war
FastDFS实现nginx代理
1》安装nginx以及对应模块
2》修改nginx的location配置,映射路径和启动模块
location /group1/M00 {
root /data/fdfs/store/data;
ngx_fastdfs_module;
}
3》修改对应fastdfs模块
url_have_group_name = true
tracker_server=172.17.252.234:22122