FastDFS 分布式文件系统
同版本百度网盘链接:https://pan.baidu.com/s/1a6XgywCoAyM3CiVS-rrVAA
提取码:qq13
一、FastDFS(Fast Distribution File System)简介
FastDFS
是一款开源的分布式文件系统,功能主要包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服务,如图片、视频、文档等等。
FastDFS
服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在
访问上起负载均衡的作用。存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口。
FastDFS
同时对文件的 meta data 进行管理。所谓文件的 meta data 就是文件的相关属性,以键值对(key
value pair)方式表示,如:width=1024,其中的 key 为 width,value 为 1024。文件 meta data 是文件属
性列表,可以包含多个键值对。
FastDFS 系统结构如下图所示:
跟踪器
和存储节点
都可以由一台多台服务器构成。
跟踪器
和存储节点
中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点
(服务器)采用了分卷
(或分组
)的组织方式。
存储系统由一个或多个卷
组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。
一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS
中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
二、相关术语
Tracker Server
:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录storage server的状态,是连接Client和Storage server的枢纽。
Storage Server
:存储服务器,文件和meta data都保存到存储服务器上
group
:组,也可称为卷。同组内服务器上的文件是完全相同的
文件标识:包括两部分:组名和文件名(包含路径)
meta data
:文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768
三、同步机制
- 同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
- 文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
- 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
- 上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。
四、FastDFS上传文件交互过程
-
client 询问 tracker 上传到的 storage,不需要附加参数;
-
tracker 返回一台可用的 storage;
-
client 直接和 storage 通讯完成文件上传。
客户端 client 发起对 FastDFS 的文件传输动作,是通过连接到某一台 Tracker Server 的指定端
口来实现的,Tracker Server 根据目前已掌握的信息,来决定选择哪一台 Storage Server ,然后将这个
Storage Server 的地址等信息返回给 client,然后 client 再通过这些信息连接到这台 Storage Server,
将要上传的文件传送到给 Storage Server 上。
五、FastDFS下载文件交互过程
-
client 询问 tracker 下载文件的 storage,参数为文件标识(卷名和文件名);
-
tracker 返回一台可用的 storage;
-
client 直接和 storage 通讯完成文件下载。
六、运行时目录结构
6.1、Tracker server (跟踪服务器)
6.2 Storage server (存储服务器)
七、官网资源
FastDFS论坛: http://bbs.chinaunix.net/forum-240-1.html
八、单点安装模式
Tracker server和Storage server 执行相同的操作
8.1、编译和安装所需的依赖环境
[root@localhost ~]# yum install make cmake gcc gcc-c++
8.2、安装libfastcommon
-
github官网下载地址:https://github.com/happyfish100/libfastcommon
-
上传 libfastcommon-master.zip 到/usr/local/src 目录
-
解压
[root@localhost ~]# cd /usr/local/src [root@localhost src]# unzip libfastcommon-master.zip [root@localhost src]# cd libfastcommon-master
-
编译安装
[root@localhost libfastcommon-master]# ./make.sh [root@localhost libfastcommon-master]# ./make.sh install
libfastcommon 默认安装到了:
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
-
因为 FastDFS 主程序设置的 lib 目录是/usr/local/lib,所以需要创建软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
8.3、安装FastDFS
-
上传 FastDFS 源码包到 /usr/local/src 目录
-
解压
[root@localhost ~]# cd /usr/local/src/ [root@localhost src]# tar -zxvf FastDFS_v5.05.tar.gz [root@localhost src]# cd FastDFS
-
编译安装(编译前要确保已经成功安装了 libfastcommon)
[root@localhost FastDFS]# ./make.sh [root@localhost FastDFS]# ./make.sh install
采用默认安装的方式安装,安装后的相应文件与目录:
- 服务脚本在:
- (样例配置文件):
- 具在/usr/bin/目录下的:
-
因为 FastDFS 服务脚本设置的 bin 目录是/usr/local/bin,但实际命令安装在/usr/bin,因此需要修改 FastDFS 服务脚本中相应的命令路径,也就是把
/etc/init.d/fdfs_storaged
和/etc/init.d/fdfs_tracker
两个脚本中的/usr/local/bin
修改成/usr/bin
:[root@localhost /]# vim /etc/init.d/fdfs_trackerd [root@localhost /]# vim /etc/init.d/fdfs_storaged
使用查找替换命令进统一修改(vi/vim命令):
:%s+/usr/local/bin+/usr/bin
8.4、配置跟踪器
-
复制FastDFS跟踪器样例配置文件,并重命名
[root@localhost fdfs]# cd /etc/fdfs/ [root@localhost fdfs]# cp tracker.conf.sample tracker.conf
-
编辑跟踪器配置文件:
[root@localhost fdfs]# vim tracker.conf
修改如下内容:
disabled=false port=22122 base_path=/fastdfs/tracker
其它参数保留默认配置。
-
创建基础数据目录(参考基础目录base_path的配置)
[root@localhost fdfs]# mkdir -p /fastdfs/tracker
-
防火墙中打开跟踪器端口(设置的22122)
[root@localhost fdfs]# firewall-cmd --zone=public --add-port=22122/tcp --permanent success [root@localhost fdfs]# firewall-cmd --reload success [root@localhost fdfs]# firewall-cmd --list-ports #查看端口是否开放成功 22122/tcp
-
启动Tracker跟踪服务器
[root@localhost fdfs]# /etc/init.d/fdfs_trackerd start Reloading systemd: [ 确定 ] Starting fdfs_trackerd (via systemctl): [ 确定 ]
初次成功启动,会在/fastdfs/tracker 目录下创建 data、logs 两个目录
查看 FastDFS Tracker 是否已成功启动:
[root@localhost fdfs]# ps -ef | grep fdfs root 3484 1 0 21:12 ? 00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf root 3493 1290 0 21:13 pts/0 00:00:00 grep --color=auto fdfs
-
关闭Tracker跟踪服务器
[root@localhost fdfs]# /etc/init.d/fdfs_trackerd stop Stopping fdfs_trackerd (via systemctl): [ 确定 ]
-
设置 FastDFS 跟踪器开机启动:
[root@localhost fdfs]# vim /etc/rc.d/rc.local
添加以下内容:
/etc/init.d/fdfs_trackerd start
8.5、配置存储器
-
复制 FastDFS 存储器样例配置文件,并重命名:
[root@localhost ~]# cd /etc/fdfs/ [root@localhost fdfs]# cp storage.conf.sample storage.conf
-
编辑存储器样例配置文件
[root@localhost fdfs]# vim /etc/fdfs/storage.conf
修改如下内容:
disabled=false port=23000 base_path=/fastdfs/storage store_path0=/fastdfs/storage tracker_server=192.168.4.121:22122 #跟踪服务器地址及端口(写自己配置的) http.server_port=8888 # 一般改为80
-
创建基础数据目录(参考基础目录 base_path 配置)
[root@localhost fdfs]# mkdir -p /fastdfs/storage
-
防火墙中打开存储器端口(默认为23000)
[root@localhost fdfs]# firewall-cmd --zone=public --add-port=23000/tcp --permanent success [root@localhost fdfs]# firewall-cmd --reload success [root@localhost fdfs]# firewall-cmd --list-ports #查看端口是否开放成功 22122/tcp 23000/tcp
-
启动Storage存储服务器
[root@localhost fdfs]# /etc/init.d/fdfs_storaged start Starting fdfs_storaged (via systemctl): [ 确定 ]
初次成功启动,会在/fastdfs/tracker 目录下创建 data、logs 两个目录
查看 FastDFS Tracker 是否已成功启动:
[root@localhost fdfs]# ps -ef | grep fdfs root 1387 1 0 21:34 ? 00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf root 1389 1279 0 21:35 pts/0 00:00:00 grep --color=auto fdfs
-
关闭Storage存储服务器
[root@localhost fdfs]# /etc/init.d/fdfs_storaged stop Stopping fdfs_storaged (via systemctl): [ 确定 ]
-
设置FastDFS存储服务器开机启动
[root@localhost fdfs]# vim /etc/rc.d/rc.local
添加如下行:
/etc/init.d/fdfs_storaged start
九、文件上传测试
-
修改 Tracker 服务器中的客户端配置文件
[root@localhost fdfs]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf [root@localhost fdfs]# vim /etc/fdfs/client.conf
base_path=/fastdfs/tracker tracker_server=192.168.4.121:22122 # 修改为自己IP
-
执行文件上传命令:
[root@localhost fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz
返回 ID 号:group1/M00/00/00/wKgEfVUYNYeAb7XFAAVFOL7FJU4.tar.gz
能返回以上文件 ID,说明文件上传成功。