投资菜地

屋后的一亩三分绿色菜园地

2018-04-18

Fast dfs

FastDFS相关概念

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

tracker server

跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。

Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。

Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

storage server

存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。

group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。

storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

client

客户端 作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

另外两个概念:

group :组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

meta data :文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768

Others

指标 适合类型 文件分布 系统性能 复杂度 FUSE POSIX 备份机制 通讯协议接口 社区支持 开发语言
FastDFS 4KB~500MB 小文件合并存储不分片处理 很高 简单 不支持 不支持 组内冗余备份 Api HTTP 国内用户群 C语言
HDFS 大文件 大文件分片分块存储   简单 支持 支持 多副本 原生api 较多 Java
MogileFS 海量小图片   复杂 可以支持 不支持 动态冗余 原生api 文档少 Perl
ClusterFS 大文件     简单 支持 支持     C

安装

主程序

wget https://github.com/happyfish100 libfastcommon fastdfs

cd libfastcommon-master
./make.sh
./make.sh install



cd fastdfs-master
./make.sh
./make.sh install

cd /etc/fdfs
mkdir -p /data/fastdfs/tracker
cp tracker.conf.sample tracker.conf
vim tracker.conf
# the base path to store data and log files
base_path=/data/fastdfs/tracker


# to start or stop service
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_trackerd /etc/fdfs/tracker.conf stop

# check network Listen 监听
netstat -unltp | grep fdfs
# check file data and log
ls /data/fastdfs/tracker


cd /etc/fdfs
mkdir -p /data/fastdfs/storage
cp storage.conf.sample storage.conf
vim storage.conf


# the base path to store data and log files
base_path=/data/fastdfs/storage
#配置tracker跟踪器ip端口
tracker_server=192.168.7.73:22122


# to start or stop service
fdfs_storaged /etc/fdfs/storage.conf start
fdfs_storaged /etc/fdfs/storage.conf stop

# check network Listen 监听
netstat -unltp | grep fdfs
# check file data and log
ls /data/fastdfs/storage

# do test
cd /etc/fdfs
mkdir -p /data/fastdfs/client
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vim /etc/fdfs/client.conf

# the base path to store log files
base_path=/data/fastdfs/client

#配置tracker跟踪器ip端口
tracker_server=192.168.7.73:22122

# 上传一张图片
fdfs_test /etc/fdfs/client.conf upload 1.jpg

Nginx 服务

安装nginx, 增加http下载支持 wget https://github.com/happyfish100/fastdfs-nginx-module

cd nginx-1.8.1 ./configure –add-module=fastdfs-nginx-module/src make; make install

config nginx

location /M00 {
        root /home/yuqing/fastdfs/data;
        ngx_fastdfs_module;
    }

java client

Javaclient的jar包不在maven的中央仓库中,需要下载源码包手工安装到私服中。

下载地址:https://github.com/happyfish100/fastdfs-client-java

我们主要关注storageclient这个类,这个类提供了文件上传下载查询文件信息等主要功能,与系统的集成也主要使用这个api。

fastDFS.conf配置文件 connect_timeout = 2 network_timeout = 20 #tracker服务器地址,如果有多个tracker可以配置多个tracker_server tracker_server=192.168.1.177:22122

开源项目(更多)