zoukankan      html  css  js  c++  java
  • 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 <config_file> upload <local_filename> [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
    
  • 相关阅读:
    组合数取模的题……
    对组合数取模
    n!(n的阶乘)
    八、元素绑定
    七、Application类
    RC振荡电路
    运算放大器工作原理
    No
    合并查询结果
    连接查询
  • 原文地址:https://www.cnblogs.com/shenxm/p/8459292.html
Copyright © 2011-2022 走看看