「FastDFS」- 开源、轻量、分布式文件系统

认识

官网:https://github.com/happyfish100/fastdfs
文档:https://github.com/happyfish100/fastdfs/wiki
仓库:https://github.com/happyfish100/fastdfs

FastDFS,使用 C 语言开发的一项开源轻量级分布式文件系统,其解决大容量存储和负载均衡的问题。

组成

服务的组成部分

客户端(Client),跟踪器(Tracker),存储节点(Storage)

客户端(Client)

Client 访问 Tracker,进行文件管理操作。

跟踪器(Tracker)

主要做调度工作,负责管理 Storage 与 Group,可以由单台或多台服务器构成,在访问上起负载均衡的作用。可随时增加或减少,并且不会影响业务。有服务器都是对等的,可以根据服务器的负载情况随时增加或减少。

每个 storage 在启动后会连接 Tracker,告知自己所属的 group 等信息,并保持周期性的心跳,tracker 根据 storage 的心跳信息,建立 group==>[storage server list]的映射表,Tracker 需要管理的元信息很少,会全部存储在内存中;另外 tracker 上的元信息都是由 storage 汇报的信息生成的,本身不需要持久化任何数据,这样使得 tracker 非常容易扩展,直接增加 tracker 机器即可扩展为 tracker cluster 来服务,Tracker cluster 里每个 tracker 之间是完全对等的,所有的 tracker 都接受 stroage 的心跳信息,生成元数据信息来提供读写服务。

存储节点(Storage)

存储节点都可以由单台或多台服务器构成。存储节点均可动态增加或减少,并且不会影响业务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

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

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

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

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

Storage 采用了分卷[Volume](或分组[group])的组织方式,存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。一个卷[Volume](组[group])可以由一台或多台存储服务器组成,一个组中的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用,数据互为备份,存储空间以 group 内容量最小的 storage 为准,所以建议 group 内的多个 storage 尽量配置相同,以免造成存储空间的浪费。

性质

  • 文件存储、文件同步、文件访问(文件上传、文件下载)
  • 冗余备份、负载均衡、线性扩容、高可用、高性能

构建

安装及部署(单机)

happyfish100/fastdfs/V6.06/INSTALL

属性 参数
操作系统 Kali GNU/Linux Rolling
软件版本 FastDFS V6.06

第一步、安装服务

### 安装 libfastcommon 类库

git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon; git checkout V1.0.43
./make.sh clean && ./make.sh && ./make.sh install

### 安装 fastdfs 服务

git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs; git checkout V6.06
./make.sh clean && ./make.sh && ./make.sh install

### 安装配置文件

./setup.sh /etc/fdfs

第二步、修改配置

修改数据存储目录 | 配置文件使用 /home/yuqing/ 目录,可以根据需要调整:

mkdir -pv /srv/fastdfs/

sed -i 's%/home/yuqing/%/srv/%g' /etc/fdfs/*

修改 tracker 地址 | 修改 /etc/fdfs/storage.conf 的 tracker_server 配置,根据需要设置正确地址:

tracker_server = host:port

第三步、启动服务

由于系统使用 systemd 管理服务,但是源码包里提供启动脚本不适用。执行如下命令启动服务:

/etc/init.d/fdfs_trackerd start
/etc/init.d/fdfs_storaged start

# 或者

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

(可选)运行监控程序

/usr/bin/fdfs_monitor /etc/fdfs/client.conf

第四步、测试服务可用

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/include/stdlib.h

应用

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

改进

tracker_query_storage fail, error no: 2, error info: No such file or directory

问题描述:

执行/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/include/stdlib.h命令,产生如下错误:

This is FastDFS client test program v6.06

Copyright (C) 2008, Happy Fish / YuQing

FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.fastken.com/
for more detail.

[2020-03-04 10:52:32] DEBUG - base_path=/srv/fastdfs, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max
_idle_time=3600s, use_storage_id=0, storage server id count: 0

[2020-03-04 10:52:32] ERROR - file: tracker_proto.c, line: 50, server: 127.0.0.1:22122, response status 2 != 0
[2020-03-04 10:52:32] ERROR - file: ../client/tracker_client.c, line: 1077, fdfs_recv_response fail, result: 2
[2020-03-04 10:52:32] ERROR - file: tracker_proto.c, line: 50, server: 127.0.0.1:22122, response status 2 != 0
[2020-03-04 10:52:32] ERROR - file: ../client/tracker_client.c, line: 899, fdfs_recv_response fail, result: 2
tracker_query_storage fail, error no: 2, error info: No such file or directory

原因分析:

查看 /srv/fastdfs/logs/storaged.log 与 /srv/fastdfs/logs/trackerd.log 日志,日志信息提示 /etc/fdfs/storage.conf 的 tracker_server 配置错误;

解决方案:

调整 etc/fdfs/storage.conf 的 tracker_server 配置,并且不能配置 127.0.0.1 地址;

参考

CSDN/FastDFS 简介
分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置
分布式文件系统 FastDFS 设计原理
FastDFS 一个高效的分布式文件系统
CentOS 7.2 搭建 FastDFS 分布式文件系统,实现高可用集群