简述
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
架构
Tracker Server:
- 主节点,跟踪服务器,主要做调度工作,再访问上起负载均衡的作用
- 记录Storage Server的状态,是连接Client和Storage Server的枢纽
- FastDFS集群中的Tracker Server可以有多台,Tracker Server之间是以相互平等关系同时提供服务
- Tracker Sever不存在单点故障。Client请求TrackerServer采用轮询方式。如果请求的Tracker Server无法提供服务则更换另一个Tracker Server
Storage Server:
存储服务器,文件和Meta Data都保存到这里
Storage Server集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和
一个组(Group)由一台或多台存储服务器组成,组内的Storage Server之间是平等关系
不同组的Storage Server之间不会互相通信,同组内的Storage S erver之间会相互连接进行文件同步,从而保证组内每个Storage Server上的文件保持一致性
一个组的存储容量为该组内存储服务器容量最小的那个,所以组内存储服务器的软硬件配置最好保持一致
Storage Server会连接集群中所有的Tracker Server,定时Tracker Server报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息
group:组,也称为卷。同组内服务器上的文件是完全相同的
文件标识:包括两部分:组名和文件名(包含路径)
meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768
单机安装
Tracker和Storage在同一台服务器上
离线安装准备:
FastDFS_V5.08.tar.gz
libfastcommon-master.zip
安装版本
FastDFS v5.08
v4+已经不支持HTTP访问
安装FastDFS的依赖
FastDFS是C语言开发的应用。安装必须使用make、cmake和gcc编译器。
安装FastDFS核心库
libfastcommon是从FastDFS 和FastDHT 中提取出来的公共C函数库
解压
unzip libfastcommon-master.zip -d /usr/local/fastdfs
编译安装
./make.sh.
./make.sh install
有固定的默认安装位置。在/usr/lib64和/usr/include/fastcommon两个目录中
创建软连接
因为 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
FastDFS主程序安装
解压
tar -zxf FastDFS_v5.08.tar.gz -C /usr/local/fastdfs
编译安装
./make.sh
./make.sh install
安装后,FastDFS主程序所在位置:
/usr/bin - 可执行文件所在位置。
/etc/fdfs - 配置文件所在位置。
/usr/lib64 - 主程序代码所在位置
/usr/include/fastdfs - 包含的一些插件组所在位置
服务配置
程序脚本位置
在/etc/init.d/目录中,脚本文件是 fdfs-storaged和fdfs-trackerd
修改程序脚本
/etc/rc.d/init.d/functions -> /lib/lsb/init-functions
如果不修改的话在ubuntu下找不到function
centOS:/etc/rc.d/init.d/functions有效
ubuntu:/lib/lsb/init-functions有效
配置文件位置
在/etc/fdfs/目录中:
- tracker.conf.sample - 跟踪器服务配置文件模板
- storage.conf.sample - 存储服务器配置文件模板
- client.conf.sample - FastDFS提供的命令行客户端配置文件模板。可以通过命令行测试FastDFS有效性。
配置Tracker
拷贝配置文件
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
修改配置文件
base_path:FastDFS Tracker启动后使用的根目录,用来存放Tracker data和logs。
base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-tracker(自定义目录)
首次安装FastDFS,修改路径后如果路径中没有自定义目录,需要手动创建目录
mkdir -p /var/data/fastdfs-tracker
启动
systemctl start fdfs_tracker
停止
systemctl stop fdfs_tracker
状态
systemctl status fdfs_tracker
配置Storage
拷贝配置文件
cd /etc/fdfs
cp storage.conf.sample storage.conf
修改配置文件
base_path:FastDF Storage启动后使用的根目录,用来存放Storage data和logs。
base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-storage/base
store_path0:存储路径。是用于保存FastDFS中存储文件的目录,就是要创建256*256个子目录的位置。base_path和store_path0可以使用同一个目录。
store_path0=/home/yuqing/fastdfs -> store_path0=/var/data/fastdfs-storage/store
tracker_server :跟踪服务器位置。就是跟踪服务器的ip和端口。
tracker_server=192.168.150.11:22122 -> tracker_server=tracker服务IP:22122
首次安装FastDFS,修改路径后如果路径中没有自定义目录,需要手动创建目录
mkdir -p /var/data/fastdfs-storage
启动
启动前确认Tracker是否已经启动
systemctl start fdfs_storage
停止
systemctl stop fdfs_storage
状态
systemctl status fdfs_storage
配置Client
拷贝配置文件
cd /etc/fdfs
cp client.conf.sample client.conf
修改配置文件
base_path:the base path to store log files
客户端命令行执行过程时临时数据存储位置。
base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-client
tracker_server :跟踪服务器位置。就是跟踪服务器的ip和端口。
tracker_server=192.168.150.11:22122 -> tracker_server=tracker服务IP:22122
首次安装FastDFS,修改路径后如果路径中没有自定义目录,需要手动创建目录
mkdir -p /var/data/fastdfs-client
上传文件
/usr/bin/fdfs_upload_file [storage_ip:port] [store_path_index]
示例:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /var/data/xxx.png
命令参数:
上传成功将会返回信息,
file_id:为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名拼接而成,再生成base64编码
$store_path0/虚拟磁盘路径/数据两级目录/file_id.文件类型
删除文件
/usr/bin/fdfs_delete_file
示例:
/usr/bin/fdfs_delete_file /etc/fdfs/client.conf $store_path0/虚拟磁盘路径/数据两级目录/file_id.文件类型