FastDFS 是一个开源的轻量级分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用,不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
FastDFS用途
- FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。
- FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储 ,支持存储服务器在线扩容。
- FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)
FastDFS原理
存储节点采用了分组(group)的方式。存储系统由一个或多个group组成,group与group之间的文件是相互独立的,所有group的文件容量累加就是整个存储系统中的文件容量。一个group可以由一台或多台存储服务器组成,一个group下的存储服务器中的文件都是相同的,group中的多台存储服务器起到了冗余备份和负载均衡的作用(一个组的存储容量为该组内存储服务器容量最小的那个,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步)。 在group中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。 当存储空间不足或即将耗尽时,可以动态添加group。只需要增加一台或多台服务器,并将它们配置为一个新的group,这样就扩大了存储系统的容量。 FastDFS只有两个角色:Tracker server和Storage server。Tracker server作为中心结点,其主要作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存量很少。另外,客户端(应用)和Storage server访问Tracker server时,Tracker server扫描内存中的分组和Storage server信息,然后给出应答。由此可以看出Tracker server非常轻量化,不会成为系统瓶颈。 FastDFS中的Storage server在其他文件系统中通常称作Trunk server或Data server。Storage server直接利用OS的文件系统存储文件。FastDFS不会对文件进行分块存储,客户端上传的文件和Storage server上的文件一一对应(FastDFS中的文件标识分为两个部分:组名和文件名,二者缺一不可)。
安装
参考:
fastdfs的最新版本是5.05,区别于以往版本,这个版本将公共的一些函数等单独封装成了libfastcommon这个jar包,所以在安装fastdfs之前,我们必须先安装libfastcommon 安装libfastcomm,下载地址:https://github.com/happyfish100/libfastcommon/ 如果是从5.0.2升级,安装前要先清除/usr/local/lib/和/usr/lib64的libfast组件,清除/usr/local/bin下的fastdfs程序
unzip libfastcommon-master.zip
cd libfastcommon-master
./make.sh
./make.sh install
注意,上述安装的路径在/usr/lib64/,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软连接如下:
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.soln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
安装fastdfs
tar -zxvf fastdfs-5.05.tar.gzcd fastdfs-5.05修改make.shTARGET_PREFIX=$DESTDIR/usr/local/fastdfs5.05TARGET_CONF_PATH=$DESTDIR/home/faier/etc/fdfs./make.sh./make.sh installln -s /usr/local/fastdfs5.05 /usr/local/fastdfs
创建软link,为了fastdfs nginx模块找到依赖库
rm /usr/lib64/libfdfsclient.soln -s /usr/local/lib64/libfdfsclient.so /usr/local/lib/ln -s /usr/local/lib64/libfdfsclient.so /usr/lib64/
修改安装路径,修改make.sh里面的TARGET_PREFIX=$DESTDIR/usr/local,程序将会安装在/usr/local/bin目录下 修改配置文件路径,修改make.sh里面的TARGET_CONF_PATH=$DESTDIR/home/qun/etc/fdfs,配置文件将会安装在/home/qun/etc/fdfs下 FastDFS-5.05默认安装在:/usr/bin,之前版本默认安装在/usr/local/bin/ 配置文件默认安装在:/etc/fdfs,可通过编辑make.sh里面的TARGET_CONF_PATH更改配置文件安装路径
启动tracker进程
/usr/local/fastdfs/bin/fdfs_trackerd /etc/fdfs/tracker.conf
检查状态
netstat -apn | grep tracker
启动storage进程
/usr/local/fastdfs/bin/fdfs_storaged /home/faier/etc/fdfs/storage.conf
检查状态
netstat -apn | grep storage
重启/关闭storage
./restart.sh /usr/local/bin/fdfs_storaged ~/etc/fdfs/storage.conf
./stop.sh /usr/local/bin/fdfs_storaged ~/etc/fdfs/storage.conf
查看服务器状态
/usr/local/fastdfs/bin/fdfs_monitor ~/etc/fdfs/storage.conf
测试:
上传文件
/usr/local/fastdfs/bin/fdfs_upload_file ~/etc/fdfs/storage.conf ~/tmp/wayken/test.log
上传文件到某个storage的path1
/usr/local/bin/fdfs_upload_file ~/etc/fdfs/storage.conf ~/tmp/wayken/test.log 127.0.0.1:23000 0
下载文件
/usr/local/fastdfs/bin/fdfs_download_file ~/etc/fdfs/storage.conf group1/M01/00/00/wKgBZVRcZ5iAFCaAAAAAAAAAAAA472.log
查看文件
/usr/local/fastdfs/bin/fdfs_file_info ~/etc/fdfs/storage.conf group1/M01/00/00/wKgBZVRcZ5iAFCaAAAAAAAAAAAA472.log
删除文件
/usr/local/fastdfs/bin/fdfs_delete_file ~/etc/fdfs/storage.conf group1/M01/00/00/wKgBZVRcZ5iAFCaAAAAAAAAAAAA472.log
删除无效的storage server
/usr/local/fastdfs/bin/fdfs_monitor ~/etc/fdfs/storage.conf delete group1 192.168.1.101
注意:如果被删除的storage server的状态是ACTIVE,也就是该storage server还在线上服务的情况下,是无法删除掉的,需要先停止该storage进程再删除
常见问题:
启动storage server时,一直处于僵死状态。
A:启动storage server,storage将连接tracker server,如果连不上,将一直重试。直到连接成功,启动才算真正完成。 出现这样情况,请检查连接不上tracker server的原因。
友情提示:从V2.03以后,多tracker server在启动时会做时间上的检测,判断是否需要从别的tracker server同步4个系统文件。 触发时机是第一个storage server连接上tracker server后,并发起join请求。 如果集群中有2台tracker server,而其中一台tracker没有启动,可能会导致storage server一直处于僵死状态。
注意事项:
- 同组的storage的端口要一致才能同步数据 ,所以同一台机器无法部署在同一个group的storage
STORAGE SERVER的状态通常有七种:
- FDFS_STORAGE_STATUS:INIT :初始化,尚未得到同步已有数据的源服务器
- FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器
- FDFS_STORAGE_STATUS:SYNCING :同步中
- FDFS_STORAGE_STATUS:DELETED :已删除,该服务器从本组中摘除
- FDFS_STORAGE_STATUS:OFFLINE :离线
- FDFS_STORAGE_STATUS:ONLINE :在线,尚不能提供服务
- FDFS_STORAGE_STATUS:ACTIVE :在线,可以提供服务