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 upload [FILE | BUFF | CALLBACK]

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