FastDFS文档整理与研究

来源:互联网 发布:安卓商城源码 编辑:程序博客网 时间:2024/06/14 12:26

 

FastDFS文档整理与研究


目录

1.      简介.... 4

1.1系统概述.... 4

1.2适用场合.... 4

1.3组成部分及其作用.... 4

2. 系统安装配置步骤.... 4

2.1环境预约.... 4

2.2安装libevent. 5

2.2.1卸载原有的linevent. 5

2.2.2安装现有的linevent. 5

2.3安装tracker_server. 5

2.3.1创建安装目录.... 5

2.3.2配置文件.... 5

2.3.3配置tracker_server. 5

2.3.4启动tracker_server. 6

2.4安装storage_server. 6

2.4.1创建安装目录.... 6

2.4.2 配置storage. 6

2.5测试文件上传下载.... 7

2.5.1配置客户端程序.... 7

2.5.2测试文件上传.... 7

2.5.3测试文件下载.... 8

2.6常用命令.... 8

2.6.1.重启tracker_server. 8

2.6.2.停止tracker_server. 8

2.6.3.server进程退出运行.... 8

2.6.4.重启server进程.... 8

2.7安装过程中可能出现的问题及解决办法.... 8

2.7.1无法找到libevent-1.4.so.2.... 8

2.7.2启动Storaged 的时候不成功.... 9

3.系统设计.... 9

3.1系统模块.... 9

3.2系统架构图.... 9

3.3系统的特点.... 10

3.3.1支持服务器的动态增减.... 10

3.3.2跟踪器内部完全对等.... 10

3.3.3采用分卷方式支持大容量.... 10

3.3.4支持冗余备份和负载均衡.... 11

3.3.5自动完成文件同步.... 11

4.功能详细说明.... 11

4.1功能定义.... 11

4.1.1 文件存储.... 11

4.1.2 文件同步.... 11

4.1.3文件上传.... 11

4.1.4文件下载.... 12

4.1.5文件查看.... 12

4.1.6文件删除.... 12

4.1.7文件附加.... 12

4.1.8存储服务器信息查看.... 12

4.1.9存储服务器踢出集群.... 13

4.1.10存储服务器在线扩容.... 13

4.2功能具体使用的操作步骤.... 13

4.2.1 文件上传.... 13

4.2.2 文件下载.... 13

4.2.3 文件查看.... 13

4.2.4 文件删除.... 13

4.2.5 文件附加.... 14

4.2.6 存储服务器信息查看.... 14

4.2.7 存储服务器踢出集群.... 14

4.3程序流程走向分析.... 14

5.与其它分布式文件系统的比较.... 16

附录.... 17

 


1.      简介

1.1系统概述

FastDFS是一个开源的分布式文件系统,对文件进行管理,它的主要功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。

1.2适用场合

特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

1.3组成部分及其作用

FastDFS客户端,其作用是完成客户与服务端之间的交互。

FastDFS服务端,有两个角色:

a.跟踪器(tracker),其作用是完成调度工作,在访问上起负载均衡的作用。

b.存储节点(storage),其作用是完成文件的存储,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。

2. 系统安装配置步骤

2.1环境预约

服务器

IP

端口

作用

Tracker1

10.192.64.103

22122

Tracker

Storage1

10.192.64.104

Group1

23000

Storage

两台均为cent OS 64bit操作系统。

两个源码压缩包:

libevent-1.4.12-stable.tar.gz

FastDFS_v3.06.tar.gz

2.2安装libevent

2.2.1卸载原有的linevent

FastDFS内部使用libevent作为http服务器,建议还是使用apache或Nginx,使用libevent路径因为/usr,如果系统已安装,需要卸载掉,命令:

#yum –y remove libevent

2.2.2安装现有的linevent

#Tar xvf libevent1.4.12-stable.tar.gz

#cd libevent

#./configure–prefix=/usr

#make

#make install

2.3安装tracker_server

2.3.1创建安装目录

#mkdir/home/yuqing

#tarzxvf FastDFS_v3.06.tar.gz /home/yuqing

开启http支持,需要先修改make.sh文件,修改"#WITH_HTTPD=1"为"WITH_HTTPD=1"

#./make.sh               //开始编译

#./make.shinstall           //安装

2.3.2配置文件

配置文件在/home/yuqing/FastDFS/conf里面,

Client.conf         //客户端上传配置文件

Storage.conf        //文件存储服务器配置文件

Tracker.conf        //调度服务器配置文件

http.conf            //http服务器配置文件

2.3.3配置tracker_server

修改tracker.conf文件,修改log、group等文件存放的目录

bast_path=/home/yuqing/fastdfs -> bast_path=/home/yuqing/FastDFS

修改http端口

http.server_port=8080 -> http.server.port=80

开启http支持

##include http.conf -> #include http.conf

2.3.4启动tracker_server

/usr/local/bin/fdfs_tracked     /home/yuqing/FastDFS/conf/tracker.conf

进入/home/yuqing/FastDFS/logs/tracker.log查看tracker的日志,打印如下:

则表示启动tracker_server成功。

2.4安装storage_server

2.4.1创建安装目录

#mkdir     /home/yuqing

#tar   zxvf FastDFS_v3.06.tar.gz      /home/yuqing

开启http支持,需要先修改make.sh文件,修改”#WITH_HTTPD=1“为”WITH_HTTPD=1”。

#./make.sh               //开始编译

#./make.sh install          //安装

2.4.2 配置storage

修改storage.conf配置文件,定义log、group等存储目录

Base_path=/home/yuqing/fastdfs-> bast_path=/home/yuqing/FastDFS

修改文件存位置,一台storage可以指定多个目录

Store_path0=/home/yuqing/fastdfs-> store_path0=/home/yuqing/FastDFS

定义组

Group_name=group1

修改tracker_server的地址和端口,可以指定多个

Tracker_server192.168.209.121:22122 -> tracker_server 10.192.64.103:22122

开启http支持

##include http.conf –>#include http.conf

启动storage 服务器

#/usr/local/bin/fdfs_storaged  /home/yuqing/FastDFS/conf/storage.conf

执行时会在data文件夹下生产256个文件夹,

打开storage.log日志,查看是否执行成功

2.5测试文件上传下载

2.5.1配置客户端程序

FastDFS有自带的客户端程序,经过配置后,可进行文件上传。

修改/home/yuqing/FastDFS/conf/client文件。

Base_path=/home/yuqing/fastdfs-> bast_path=/home/yuqing/FastDFS

修改tracker_server, 可以不是唯一

Tracker_server192.168.209.121:22122 -> tracker_server 10.192.64.103:22122

开启http支持

##include http.conf –>#include http.conf

2.5.2测试文件上传

在/usr/local/bin创建一个test.txt文件

#mkdir test.txt

执行上传命令

#/usr/local/bin/fdfs_test/home/yuqing/FastDFS/conf/client.conf upload test.txt

如果执行成功可以看到如下信息

 

2.5.3测试文件下载

fdfs_download_file  <configfile>  <file id>    <local file name>

fdfs_download_file   /home/yuqing/FastDFS/conf/client.conf          group1/M00/00/00/CsBAaE_tXv6txIgKAAAAEDYmZBM100_big.txt                  test2.txt

2.6常用命令

2.6.1.重启tracker_server

/usr/local/bin/restart.sh              /usr/local/bin/fdfs_tracked/home/yuqing/FastDFS/conf/tracker.conf

2.6.2.停止tracker_server

/usr/local/bin/stop.sh            /usr/local/bin/fdfs_tracked/home/yuqing/FastDFS/conf/tracker.conf

2.6.3.让server进程退出运行

直接kill即可让server进程正常退出,可以使用killall命令,例如:

killall fdfs_trackerd

killall fdfs_storaged

也可以使用FastDFS自带的stop.sh脚本,如:

/usr/local/bin/stop.sh             /usr/local/bin/fdfs_storaged/etc/fdfs/storage.conf

stop.sh只会停止命令行(包括参数)完全相同的进程。

千万不要使用-9参数强杀,否则可能会导致binlog数据丢失的问题。

2.6.4.重启server进程

可以kill掉server进程后,执行启动命令行。如:

 killallfdfs_trackerd

/usr/local/bin/fdfs_trackerd/etc/fdfs/tracker.conf
或者直接使用FastDFS自带的restart.sh脚本,如:
/usr/local/bin/restart.sh          /usr/local/bin/fdfs_trackerd/etc/fdfs/tracker.conf

2.7安装过程中可能出现的问题及解决办法

2.7.1无法找到libevent-1.4.so.2

[root@localhost   conf]#/usr/local/bin/fdfs_trackerd/home/yuqing/FastDFS/conf/tracker.conf

/usr/local/bin/fdfs_trackerd: errorwhile loading shared libraries: libevent-1.4.so.2: cannot open shared objectfile: No such file or directory

原因是系统debug的路径中没有我们实际的动态库的路径

解决步骤:

a.确定已经安装了libevent

find / -name libevent-1.4.so.2

b.找到库文件实际存在的路径:/usr/lib/libevent-1.4.so.2

c.在DEBUG日志中查看系统到底是到哪里去找库文件而没有找到

LD_DEBUG=libs/usr/local/bin/fdfs_trackerd –v

查出来是 trying file=/usr/lib64/libevent-1.4.so.2

d.做一个软链接

ln  –s  /usr/lib/libevent-1.4.so.2   /usr/lib64/libevent-1.4.so.2

搞定。

 

2.7.2启动Storaged的时候不成功

查看storage日志

cd  /home/yuqing/FastDFS/logs/

tail –f storaged.log

日志报:No route to host

解决方法是分别关闭tracker和storage两端的防火墙。

 

3.系统设计

3.1系统模块

客户端:Client

跟踪器集群:Tracker Cluster

存储器集群:Storage Cluster

3.2系统架构图

                             图2-1 FastDFS系统架构图

3.3系统的特点

3.3.1支持服务器的动态增减

跟踪器和存储节点都可以由一台或者多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或者下线而不会影响线上服务。

3.3.2跟踪器内部完全对等

    跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或者减少。

   

3.3.3采用分卷方式支持大容量

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加起来就是整个存储系统总的文件容量。

当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

3.3.4支持冗余备份和负载均衡

    一个卷可以由一台或者多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

3.3.5自动完成文件同步

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

4.功能详细说明

4.1功能定义

4.1.1 文件存储

支持文本,视频,音乐等各种格式的文件的存储。

4.1.2 文件同步

       为了防止因为某些存储服务器的故障,而导致数据丢失或者不可用的情况的发生,需要对文件进行同步,实现文件的冗余备份。

4.1.3 文件上传

将文件从客户端快速、准确、无丢失的上传到存储服务器中。

a.Client向Tracker询问可供上传的Storage,不需要附加任何参数。

b.Tracker返回给Client一台可用的Storage。

c.Client直接和该Storage进行交互完成文件的上传。

整个文件上传过程如图4-1所示

图4-1 文件上传过程图

4.1.4 文件下载

从存储服务器中下载指定的文件到客户端。

a.Client向Tracker询问下载文件所在的Storage,文件的唯一标识为卷名和文件名。

b.Tracker返回一台可用的Storage给Client。

c.Client直接和Storage通讯完成文件的下载。

需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。

FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

整个下载过程如图4-2所示:

图4-2 文件下载过程图

4.1.5 文件查看

在客户端显示存储服务器中的指定文件的相关信息。

4.1.6 文件删除

删除存储服务器中的指定文件。

4.1.7 文件附加

在某些需要附加写入信息的文件后面增加其它文件的内容。

4.1.8 存储服务器信息查看

显示存储服务器的相关信息。

4.1.9 存储服务器踢出集群

将指定的存储服务器踢出集群。

4.1.10 存储服务器在线扩容

在不影响其它存储服务器的情况下,增加存储服务器,整个存储系统扩容。

4.2功能具体使用的操作步骤

4.2.1 文件上传

Usage:  fdfs_upload_file     <config_filename>    <local_filename>

[root@localhost bin]# fdfs_upload_file    /home/yuqing/FastDFS/conf/client.conf test.txt

group1/M00/00/00/CsBAaE_0BXTGMgxCAAAAEDYmZBM482.txt

注:<file id>格式说明:组id/存储路径/文件名

4.2.2 文件下载

Usage: fdfs_download_file   <config_file>    <remote file id>        [local filename]

[root@localhost  bin]#fdfs_download_file/home/yuqing/FastDFS/conf/client.confgroup1/M00/00/00/CsBAaE_0BXTGMgxCAAAAEDYmZBM482.txt test.txt

4.2.3 文件查看

Usage: fdfs_file_info      <config_file>    <remote file id>

[root@localhost bin]# fdfs_file_info/home/yuqing/FastDFS/conf/client.confgroup1/M00/00/00/CsBAaE_xWMLi9rF1D9l9NHQOVT4656.mp4

source ip address: 10.192.64.104

file create timestamp: 2012-07-02 01:16:02

file size: 265911604

file crc32:1947096382 (0x740E553E)

4.2.4 文件删除

Usage: fdfs_delete_file   <config_file>    <file id>

[root@localhost  bin]#fdfs_delete_file        /home/yuqing/FastDFS/conf/client.confgroup1/M00/00/00/CsBAaE_tXv6txIgKAAAAEDYmZBM100_big.txt

4.2.5 文件附加

Usage: fdfs_upload_appender              <config_filename>          <local_filename>

[root@localhostbin]# fdfs_upload_appender /home/yuqing/FastDFS/conf/client.confappend_source.txt

group1/M00/00/00/CsBAaE_z64wEAAAAAAAAAJ1fkTE141.txt

Usage:fdfs_append_file        <config_filename>          <appender_file_id> <local_filename>

[root@localhost  bin]#fdfs_append_file      /home/yuqing/FastDFS/conf/client.confgroup1/M00/00/00/CsBAaE_z64wEAAAAAAAAAJ1fkTE141.txt    append_more.txt

4.2.6 存储服务器信息查看

Usage: fdfs_monitor       <config_file>    [-h <tracker_server>]                                          [list|delete       <group_name>    [storage_ip]]

[root@localhost bin]#fdfs_monitor/home/yuqing/FastDFS/conf/client.conf -h 10.192.64.103   list

4.2.7 存储服务器踢出集群

Usage: fdfs_monitor       <config_file>    [-h <tracker_server>]                                          [list|delete       <group_name>    [storage_ip]]

[root@localhost bin]#fdfs_monitor/home/yuqing/FastDFS/conf/client.conf -h 10.192.64.103    delete               group1         10.192.64.104

注意:如果被删除的storage server的状态是ACTIVE,也就是该storage server还在线上服务的情况下,是无法删除掉的。

4.3程序流程走向分析

(仅以文件上传为例)如图4-3所示:

图4-3 文件上传时序图

文件上传时序图解析:

a. 客户端自身加载配置文件进行初始化;

b. 客户端尝试连接tracker;

c. 如果客户端连接tracker成功,那么tracker会返回给客户端连接已上的tracker信息;

d. 客户端向tracker发出:“询问是否有storage可供存储文件的命令。”;

e. tracker询问storage可供存储文件的存储器;

f. tracker将可供存储文件的storage的端口号和存储路径返回给客户端;

g. 客户端与该storage进行交互将文件上传到该storage。

5.与其它分布式文件系统的比较

指标

FastDFS

mogileFS

系统简洁性

简洁

只有两个角色:trackerstorage

一般

有三个角色:trackerstorage和存储文件信息的mysql db

系统性能

很高(没有使用数据库,文件同步直接点对点,不经过tracker中转)

高(使用mysql来存储文件索引等信息,文件同步通过tracker调度和中转)

系统稳定性

高(C语言开发,可以支持高并发和高负载)

一般(Perl语言开发,高并发和高负载支持一般)

RAID方式

分组(组内冗余),灵活性较大

动态冗余,灵活性一般

通信协议

专有协议

下载文件支持HTTP

HTTP

技术文档

较详细

较少

文件附加属性(meta data

支持

不支持

相同内容文件只保存一份

支持

不支持

下载文件时支持文件偏移量

支持

不支持

附录

扩展到多台tracker和storage的配置方法

按照2.3.3的步骤配置所需数量的tracker,只需要ip地址不重复就可以。

按照2.4.2的步骤配置所需数量的storage,注意Group_name项,如果是同一组,那么group_name相同,端口号也相同,如果group_name不同,那么端口号也不同。

在storage的配置文件中修改tracker_server的地址和端口,可以指定多个,将新增的tracker也加进去就可以了。

 

原创粉丝点击