同福

【Linux】FastDFS学习笔记

介绍

介绍

FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1320942-20180906230937437-634922511.png

Storage server

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的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

Tracker server

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的心跳信息,生成元数据信息来提供读写服务。

安装

准备

准备packages目录

mkdir /packages
cd /packages

安装gcc

yum -y install gcc gcc-c++ make

安装依赖库

yum -y install perl-devel unzip

下载

从github下载

https://github.com/happyfish100/fastdfs

https://github.com/happyfish100/libfastcommon

安装tracker

安装libfastcommon

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

安装fastdfs

cd fastdfs-master/
sh make.sh
sh make.sh install
cp -r conf /etc/fastdfs
cd ..

配置tracker

进入/etc/fastdfs目录

cd /etc/fdfs/
cp tracker.conf.sample tracker.conf

编辑tracker.conf,设置base_path为存储根目录

base_path=/data/my_fdfs

安装storage

安装storage的方法和tracker一样,这里就不再阐述了

配置storage

进入/etc/fastdfs目录

cd /etc/fdfs/
cp storage.conf.sample storage.conf

编辑storage.conf

设置base_path为存储根目录

base_path=/data/my_fdfs

设置store_path,如果有多个就写多个,将最后的数字+1即可

store_path0=/data/my_storage

设置store_path_count,前面设置了多少store_path就写多少

store_path_count=1

设置tracker_server,如果有多个就写多个

tracker_server=10.16.1.161:22122

使用