目录
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库
[iyunv@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>
[iyunv@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]
[iyunv@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>
[iyunv@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>
[iyunv@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>
[iyunv@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>
[iyunv@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]]
[iyunv@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]]
[iyunv@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
| 系统简洁性
| 简洁
只有两个角色:tracker和storage
| 一般
有三个角色:tracker、storage和存储文件信息的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也加进去就可以了。 |