FastDFS使用中的几个常见问题

Stella981
• 阅读 1215

1. FastDFS适用的场景以及不适用的场景

    FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储图片、音频、视频、文档等文件。对于互联网应用,简洁高效的FastDFS和其他分布式文件系统相比,优势非常明显。具体情况大家可以查阅相关介绍文档,如:FastDFS架构设计文档等等。

    出于简洁考虑,FastDFS没有对文件做分块存储,因此不太适合分布式计算场景。

2. 服务器时间必须保持一致

因为FastDFS的精巧设计不需要存储文件索引,FastDFS通过比较时间戳来判断文件是否同步完成。因此集群内的服务器时间要保持一致,各台服务器的时间差值不要超过1秒。建议采用NTP对时服务。

3. too many open files错误解决方法

   日志中报打开文件过多的错误,是因为系统允许一个进程打开的文件数设置太小了。Linux环境下的解决办法,修改文件/etc/security/limits.conf,在文件尾部添加如下代码(如果已经存在则修改相应数值):

root soft nofile 65535

root hard nofile 65535

 * soft nofile 65535

 * hard nofile 65535

注:只配置最后两行不就可以了吗,为啥还要单独为root用户配置呢?查了网上资料,说是*这样的通配符对root用户无效,所以root需要单独配置(嗯,阿里云ECS就配置了上面这4行)。

4. FastDFS服务启停

    FastDFS server程序自带start、stop和restart指令,命令行示例如下:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf  [start | stop | restart]

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf  [start | stop | restart]

    可以使用kill或者killall正常杀掉 fdfs_trackerd 和 fdfs_storaged 进程,但

千万不要加上-9参数强杀,否则可能会导致binlog数据丢失等问题。

5. FastDFS支持断点续传吗?

    上传和下载文件均可支持。

对于文件上传,需要先上传appender类型的文件,然后使用apend方法。

    如果要上传超过1GB的大文件,建议采用append方式分多次上传,比如每次上传64MB。需要先创建appender类型的文件,可以创建空的appender文件。

     对于超大文件,如果想支持多线程上传以加快上传速度,可以采用如下3个步骤实现:

      1)上传appender类型的文件;

      2)  调用truncate方法将该appender文件设置为最终文件大小;

      3)调用modify方法并发上传文件分片。

    对于文件下载,FastDFS可以指定文件偏移量和获取的文件内容大小。利用这个特性,文件下载可以实现断点续传以及多线程下载。

6. Java SDK非线程安全

   FastDFS提供的Java SDK是非线程安全的,有人已经踩过这个坑了。包括负责与tracker server交互的TrackerClient、与storage server直接通信的StorageClient 和 StorageClient1 这三个类均是非线程安全的。

为啥会出现两个StorageClient字样的类名呢?二者实现功能完全一样,StorageClient是group和filename分离的用法,StorageClient1是group和filename合体用法(文件ID)。通常使用StorageClient1就好。

    大家在部署和使用FastDFS的过程中有任何疑问,欢迎在FastDFS QQ群或微信公众号交流。我可以根据大家的反馈和交流结果,继续整理FastDFS常见问题。

本文分享自微信公众号 - FastDFS分享与交流(fastdfs100)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
FastDFS和HDFS性能对比测试
 FastDFS以架构简洁和性能良好著称。 今天无意中在网上看到一篇文章:《HDFS和FastDFS的上传、下载效率对比测试》,文章链接:https://blog.csdn.net/a519781181/article/details/79125379/ 我觉得这个性能对比测试结果基本符合大家的认知及预期。FastDFS适合为中
Stella981 Stella981
3年前
FastDFS+Nginx
FastDFS安装和配置它是什么FastDFS介绍:http://www.oschina.net/p/fastdfs(http://www.oschina.net/p/fastdfs)官网下载1:https://github.com/happyfish100/fastdfs/rele
Easter79 Easter79
3年前
SpringBoot2.0集成FastDFS
SpringBoot2.0集成FastDFS前两篇整体上介绍了通过Nginx和FastDFS的整合来实现文件服务器。但是,在实际开发中对图片或文件的操作都是通过应用程序来完成的,因此,本篇将介绍SpringBoot整合FastDFS客户端来实现对图片/文件服务器的访问。如果有
Easter79 Easter79
3年前
Tus和go
前言现如今,分布式文件系统可谓是琳琅满目,多种多样,有hdfs,gfs,zfs,fastdfs,gofastdfs等,怎么选择合适自己的分布式文件系统呢?在这篇文章中,我们不讲……额,我只想表达一下我在研究gofastdfs过程中踩的坑。gofastdfs首先,什么是gofastdfs?是fastdfs的弟弟吗
Stella981 Stella981
3年前
SpringBoot2.0集成FastDFS
SpringBoot2.0集成FastDFS前两篇整体上介绍了通过Nginx和FastDFS的整合来实现文件服务器。但是,在实际开发中对图片或文件的操作都是通过应用程序来完成的,因此,本篇将介绍SpringBoot整合FastDFS客户端来实现对图片/文件服务器的访问。如果有
Stella981 Stella981
3年前
FastDFS安全注意事项
  对于互联网应用,FastDFS的标准使用姿势:通过FastDFSAPI进行文件上传等更新操作,storageserver上通过FastDFSnginx扩展模块使用HTTP方式下载文件。FastDFS的文件名由storageserver通过算法生成,生成的文件名中包含时间戳、文件大小、文件内容CRC32校验码、随机数等,因此FastDFS生成的
Stella981 Stella981
3年前
FastDFS
1.FastDFS是什么?FastDFS是分布式文件系统。使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。2.工作原理FastDFS架构包括Trackerserver和Storageserver。客户端请求Trackerserver进行文件上传、下载,通过Trackerser
Stella981 Stella981
3年前
FastDFS加Redis实现自定义文件名存储海量文件
FastDFS(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fcode.google.com%2Fp%2Ffastdfs%2F)非常适合存储大量的小文件,遗憾的是本身不支持自定义文件名,文件名是存储成功以后根据存储位置生成的一个file\_id。很多应用场景不得不使用自定义文件名,在不