FASTDFS调研报告(V1.0)

之前的文章,现在放出来,以供参阅。

一、fastdfs简介

  • FastDFS是一个轻量级的开源分布式文件系统
  • FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡
  • FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储
  • 支持存储服务器在线扩容
  • 支持相同内容的文件只保存一份,节约磁盘空间
  • FastDFS只能通过Client API访问,不支持POSIX访问方式
  • FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)

使用场景:

特别适合以中小文件(建议范围: 4KB 到 500MB )为载体的在线服务,如相册网站、视频网站等等。

二、系统架构

FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

  • tracker server: 跟踪服务器,主要做调度工作,起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。
  • storage server: 存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。
  • client server: 客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。
  • group:组,也可称为卷。同组内服务器上的文件是完全相同的
  • 文件标识:包括两部分:组名和文件名(包含路径)
  • meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768

文件上传机制

  • client询问tracker上传到的storage,不需要附加参数;
  • tracker返回一台可用的storage;
  • client直接和storage通讯完成文件上传。

下载机制:

  • client询问tracker下载文件的storage,参数为文件标识(组名和文件名);
  • tracker返回一台可用的storage;
  • client直接和storage通讯完成文件下载。

同步机制:

  • 同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
  • 文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
  • 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
  • 上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。

远行目录结构:

tracker server 结构:

${base_path}

|__data

|         |__storage_groups.dat:存储分组信息

|         |__storage_servers.dat:存储服务器列表

|__logs

|__trackerd.log:tracker server日志文件

storage server结构:

${base_path}

|__data

|         |__.data_init_flag:当前storage server初始化信息

|         |__storage_stat.dat:当前storage server统计信息

|         |__sync:存放数据同步相关文件

|         |         |__binlog.index:当前的binlog文件索引号

|         |         |__binlog.###:存放更新操作记录(日志)

|         |         |__${ip_addr}_${port}.mark:存放同步的完成情况

|         |

|         |__一级目录:256个存放数据文件的目录,如:00, 1F

|               |__二级目录:256个存放数据文件的目录

|__logs

|__storaged.log:storage server日志文件

文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

其中:

  • 组名: 文件上传后所在的存储组名称,在文件上传成功后有存储服务器返回,需要客户端自行保存。
  • 虚拟磁盘路径: 存储服务器配置的虚拟路径,与磁盘选项store_path* 对应。
  • 数据两级目录: 存储服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  • 文件名: 与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

设计特点:

1、通过组名tracker能够很快的定位到客户端需要访问的存储服务器组,并将选择合适的存储服务器提供客户端访问;

2、存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

三、安装与使用

环境准备:

1、Linux环境,使用centos环境.

2、pdfs v5.+的版本不依赖于lib event, 需要安装libfastcommon.同时需要注意各个版本安装的时候匹配关系。不匹配的时候是有bug的。实例使用V5.08

 软件下载:

1、代码仓库

https://github.com/happyfish100/fastdfs.git

https://github.com/happyfish100/libfastcommon.git

https://github.com/happyfish100/fastdfs-nginx-module.git

安装:

新系统:

yum -y install wget vim git texinfo patch make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils pcre pcre-devel

安装libfastcommon

git clone https://github.com/happyfish100/libfastcommon.git

cd libfastcommon

sh make.sh && sh make.sh install

安装fastdfs

git clone https://github.com/happyfish100/fastdfs.git

cd fastdfs

sh make.sh && sh make.sh install

安装nginx[已有可免安装]

wget http://nginx.org/download/nginx-1.8.0.tar.gz

tar zxvf nginx-1.8.0.tar.gz

git clone https://github.com/happyfish100/fastdfs-nginx-module.git

cd nginx-1.8.0

./configure--prefix=/usr/local/nginx--add-module=/root/fastdfs-nginx-module/src

make&&make install

cd /usr/local/bin

ln-s/usr/local/nginx/sbin/nginx .

nginx-t

配置:

tracker.conf配置:

cd /etc/fdfs

cp tracker.conf.sample tracker.conf

#cp /home/centos/fastDFS/fdfs-5.08/fastdfs/conf/http.conf .

#cp /home/centos/fastDFS/fdfs-5.08/fastdfs/conf/mime.types .

sed -i ‘s:base_path=.*:base_path=/home/lijianli/fastdfs/masterdata/tracker:g‘ tracker.conf

sed -i ‘s:http.server_port=.*:http.server_port=80:g‘ tracker.conf

storage.conf配置:

cd /etc/fdfs

cp storage.conf.sample storage.conf

#cp /home/centos/fastDFS/fdfs-5.08/fastdfs/conf/http.conf .

#cp /home/centos/fastDFS/fdfs-5.08/fastdfs/conf/mime.types .

sed -i ‘s:base_path=.*:base_path=/home/lijianli/fastdfs/masterdata/storage:g‘ storage.conf

sed -i ‘s:store_path0=.*:store_path0=/home/lijianli/fastdfs/masterdata/storage:g‘ storage.conf

sed -i ‘s/tracker_server=.*/tracker_server=10.60.81.188:22122/g‘ storage.conf

sed -i ‘s:http.server_port=.*:http.server_port=80:g‘ storage.conf

client.conf配置:

cd /etc/fdfs

cp client.conf.sample client.conf

sed -i ’s:base_path=.*:base_path=/home/lijianli/fastdfs/masterdata/client:g’ client.conf

sed -i ’s/tracker_server=.*/tarcker_server=10.60.81.188:22122/g’ client.conf

nginx配置

upstream fdfs_group1{

server 10.60.81.188:80;

}

server{

location group1/M00{

proxy_pass http://fdfs_group1;

}

}

常用命令:

fdfs_delete_file: 删除文件,/opt/apps/fdfs/bin/fdfs_delete_file <config_file> <file_id>

fdfs_download_file: 下载文件,/opt/apps/fdfs/bin/fdfs_download_file <config_file> <file_id> <local_filename>

fdfs_file_info: 获取某个文件信息,/opt/apps/fdfs/bin/fdfs_file_info <config_file> <file_id>

fdfs_monitor: 监控,查看storage server的状态/opt/apps/fdfs/bin/fdfs_monitor <config_file> 也可以用这个命令来摘除无效的storage节点,/opt/apps/fdfs/bin/fdfs_monitor <config_file> delete <group_name> <storage_ip> 注意:如果被删除的storage server的状态是ACTIVE,也就是该storage server还在线上服务的情况下,是无法删除掉的。

fdfs_storaged: 用来启动或是重启或是关闭server,/opt/apps/fdfs/bin/fdfs_storaged <config_file> [start | stop | restart]

fdfs_trackerd: 用来启动或是重启或是关闭server,/opt/apps/fdfs/bin/fdfs_trackerd <config_file> [start | stop | restart]

fdfs_upload_file: 上传文件,/opt/apps/fdfs/bin/fdfs_upload_file <config_file> <local_filename>

2、监控问题。

Java:

https://github.com/canmind/fastdfs-zyc/tree/master/fastdfs-zyc/main/webapp

3、开发集成问题。

四、社区&使用商

阿里,UC网盘,优酷,搜狐等。

五、总结

  • FastDFS只有三个角色;且跟踪服务器和存储服务器均不存在单点。
  • 跟踪服务器被动的接收存储服务器汇报,对存储服务器进行分组管理;并为客户端选定适用的存储服务器。同一存储服务器可以同时向多台跟踪服务器汇报状态信息。
  • 存储服务器组内所有存储服务器是对等关系,存储的数据一一对应且相同;所有的存储服务器均是同时在线服务,极大的提高的服务器的使用率,分担了数据访问压力。

六、参考资料

  1、https://github.com/happyfish100/fastdfs 源码

  2、http://bbs.chinaunix.net/forum-240-1.html 作者维护的论坛

  3、http://tech.uc.cn/?p=221 UC团队使用维护文档

  4、https://code.google.com/archive/p/fastdfs/  作者维护的Google code上的项目。

时间: 2024-10-13 20:06:55

FASTDFS调研报告(V1.0)的相关文章

非常新能源铝电池项目的产业化展开的分析报告v1.0

非常新能源铝电池项目的产业化展开的分析报告v1.0   负责人:魏伟 合伙人:王春光 签约员工:史晓乐.史海清.陈正旺   进度看板 ü 魏伟 ü 王春光 ü 史晓乐 ü 史海清 ü 陈正旺   项目分析目标: 1.         项目目标:该公司能否提供非常具有前景的就业及风险评估,目前认为该公司非常有前景,大规模快速量产需要排除哪些障碍做哪些工作?关注技术线路竞争对手的动态优势. 2.         关键技术的详细分析:其中包括资料收集.整理和初步结论.讨论及评价等. 3.       

产品调研报告

为了更好地开发清华大学紫荆之声微信公众平台V2.0版,我们小组对一些现有的相关产品进行了调研,分析其亮点与不足,优势与劣势,以此为本小组的开发提供需求分析和实际开发的参考和借鉴.我们主要调研了紫荆之声1.0版(即现在的版本).其它一些校园APP以及其它一些微信公众号. 1 紫荆之声微信公众平台V1.0 公众平台V1.0版(即1字班学长开发的版本)是我们开发的最重要参考.目前的清华大学紫荆之声公共主页中分为三个模块,分别是资讯.团聚清华.服务.下面将分模块说明对三个部分的调研结果. 1.1 服务

Python编写 随手记v1.0贺岁版 发布(开源)

随手记是一款占用内存少,便捷的记录软件,用于记录自己的偶然灵感和发现的账号密码(搭建自己的密码库)下载链接:http://pan.baidu.com/s/1eQitQD0 开发目的: 1.我平时经常会分析别人的软件,或者浏览文章时会突然闪现自己的想法,每次都要(新建文本文档,打字,保存,重命名文档)十分麻烦 2.一直想搭建自己的密码库,但是发现新密码后总是很懒,懒着保存起来,利用本程序可以省事的保存 账号密码(默认路径 E:/password.txt) 3. 因为如上原因需要每次花费许多秒, 用

接口性能测试方案 白皮书 V1.0

一. 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间.响应时间按软件的特点再可以细分,如对于一个 C/S 软件的响应时间可以细分为网络传输时间.应用服务器处理时间.数据库服务器处理时间.另外客户端自身也存在着解析时间.界面绘制呈现时间等. 响应时间主要站在客户端角度来看的一个性能指标,它是用户最关心.并且容易感知到的一个性能指标. 2. 吞吐率 吞吐率指单位时间内系统处理用户的请求数,从业务角度看,吞吐率可以用每秒请求数.每秒事

非常新能源铝电池项目的产业化展开的分析报告v1.1

非常新能源铝电池项目的产业化展开的分析报告v1.1   负责人:魏伟 合伙人:王春光 签约员工:史晓乐.史海清.陈正旺     摘要: 本小组针对福建台州非常新能源铝电池项目的产业化展开的分析报告,并对产业进行分析研究,我们要判断此行业的前景和公司实力是否匹配,来决定我们投资就业的研究价值.   进度看板 ü  魏伟     ---   铝离子关键技术的资料收集和整理 ü  王春光   ---   太阳能储能的资料收集 ü  史晓乐   ---   铝空气电池前景分析 ü  史海清   --- 

Android编程规范V1.0

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 本文章是根据众多公司的编程规范整理而成,如果错误,还请指出. Android编程规范 编写人 赵凯强 日期 2014-8-5 审核人   日期   批准人   日期     修改记录(REVISION CHART) 版本 作者 修改描述 修改日期 1.0 赵凯强 初稿 2014-8-5     1.概述 1.1目的与概述 本文提供一整套编写高效可靠的android代码的标准.约定和指南.它们以安全可靠的软

代码之间-论文修改助手v1.0版本发布

论文查重,是每个毕业生都要面临的一个令人头疼的问题,如果写论文不认真,很可能导致查重红一大片. 之前有帮助一些朋友修改论文降低重复率,做了一些工作后发现,国内的查重机构,如知网.维普等,大多数是基于关键字检索,如果发现某一段文字中里面关键字重合过多,就认定为抄袭. 改论文降低重复率是有一定套路的,所以我开发了这样一个软件,能够自动的将文字表述进行变换,从而帮助你快速的对你的论文进行降重,避免绞尽脑汁的去思考怎么改写. 使用方法: 1. 在待修改原文中输入待修改的句子(一般是查重报告中标红的位置)

MathExam小学一二年级计算题生成器V1.0

MathExam小学一二年级计算题生成器v1.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ? Estimate ? 估计这个任务需要多少时间 880 1540 Development 开发 ? Analysis ? 需求分析 (包括学习新技术) 60 100 ? Design Spec ? 生成设计文档 20 20 ? Design Review ? 设计复审 10 20 ? Co

【资源共享】Rockchip I2C 开发指南 V1.0

2C设备的设备应用非常广泛,常见的包含重力传感器,触摸屏驱动芯片,音频解码等 这个文档是RK3399的I2C开发文档:<Rockchip I2C 开发指南 V1.0> 内容预览: 下载地址:http://developer.t-firefly.com/thread-12495-1-1.html