FastDFS问题分析和总结
故障现象 描述:
1、应用方面:Java客户端,上传身份证图片和视频失败,有几次,报错时间大概是从 2018 09-27 22:27:34.815。
客户端错误信息:
2、服务器方面:查看日志,发现上传的 那个storage节点 报错了,报错信息为 :
|
查看data目录,发现有8万多个临时文件,恰好等于报错的日志条数。
全程只有两个文件:
最开始是 21:25:56 是 CgEK9Vus2luAWvGOAATtxisTGPM212.mp4 这个文件,
后面21:32:07 又增加了CgEK9lus29aAUwe5AAciwZj2VXY814.jpg
另外两个storage日志如下:
|
临时解决方案:
一共有3个storage,关闭报错的那个storage,应用上传文件恢复正常。
故障排查分析:
关键点如下
1、为何无法 rename ?
答案:经过检查发现,是因为 /data/10 这个目录不存在。
启动FastDFS服务器时,正常情况下, /data/目录会有 包括00、10、11、12等在内的255 个目录。
其他254个目录都有,为何 /data/10/ 这个目录没有? 刚好文件同步到这个目录,肯定会报错。
2、查看 storage_service.c 源代码(这个文件有8000多行而且没有注释),找到506行:
|
在同步文件时,会执行这个rename的操作,看上去同步失败,发起方会再次发起同步请求,直到同步成功为止。
3、这个文件同步失败的问题,影响到文件的上传了,导致文件上传只要是到这个storage的请求都会失败。
按道理说,同步文件失败,和新上传的文件没有联系的。会不会是因为服务器忙着同步文件,而无法响应其他请求?(根据客户端的报错来看,是getStoreStorage fail,errno code: 28,确实是连不上这个storage了。但是根据报错的频率来看,基本上是1秒钟一次,速度很快,而且服务器整体CPU、内存、磁盘空间都是正常的)
原因分析和初步结论:
此次事故,系 有两个文件 同步失败,失败后无限循环重试,引起某个 storage 无法再收到上传请求。
1、同步失败引起的原因是 因为 /data/10/ 这个目录不存在。为什么这个目录不存在,有两种可能性:
最开始有这个目录,但是由于某种故障或者bug,程序将这个目录删除了。
有人动过fastdfs服务器,不小心把这个目录删除了。(据悉,之前有用过unison去同步过文件,会不会是同步文件时把这个目录清除了?)
2、fastdfs自身程序不完善,体现在两个方面:
同步文件失败时,不应该无限循环且无间隔的去重试。
某两个文件同步失败,不应该整个storage都无法继续接受新的上传请求。
初步解决方案和应对策略:
分析:正常情况下,/data/下面的目录,不会无缘无故消失,生产系统已经运行几个月了,之前都很稳定。
但是如果真的再出现这种情况,无论是意外删除,还是程序bug导致,都需要避免。
这个问题的特征很清楚,只要有 同步失败,都很可能会引起此次的问题。监控fastdfs的日志,一旦有文件多次同步失败,就告警。恢复方式比较简单,手工同步一下,再重启一般就OK了。
关于fastdfs的bug,只能尝试联系作者,等等看能否修复,但是这个作者最近几年很不活跃,这个项目几乎没人维护。
找对c语言很熟悉的人,研究一下fastdfs源码,自己改一下,但是难度也比较大,fastdfs的源码还是比较复杂,而且没有代码注释,要看懂还是得花很大功夫。
题外话
其实,我并不推荐使用FastDFS,因为它并不满足我对中间件的选型要求,
我推荐使用:SeaweedFS【https://github.com/chrislusf/seaweedfs】
两者简单对比:比如Contributors(贡献者)数量,FastDFS为4,而SeaweedFS为61,发布版本数量,前者为6,后者为54,最重要的,FastDFS有250多个open的issues没人解决,近5年多,就没人再维护了,想想多可怕……再有,以我多年代码推敲和评审的眼光来看,FastDFS的源码很糟糕,谁愿意去参与维护?
FastDFS问题分析和总结相关推荐
- 2022年4月9日记:Linux服务器开发,Darren,fastdfs架构分析和配置
──────────────────────────────────── ┌------------┐ │▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦. └--------- ...
- 2023程序员秋招准备 c/c++Linux后端开发岗(简历/技术面)技能体系总结
前言 23年秋招已经打响了:同学们都有准备好了吗?现在就业环境怎么样就不用我说了吧:之前很多的贴说哀鸿遍野删了又写,写了又删.各个互联网大厂招聘情况都不堪入目:百度提前批基本只给了实习生,字节也缩招将 ...
- c++架构师需要掌握哪些知识
目录 本文技术梳理主要针对于三类人群的技术需求 c/c++Linux服务器端开发岗位分析 经常被问到的问题: 技术体系建立的好处 c/c++Linux服务器开发技术学习路径 一.精进基石 二.高性能网 ...
- C/C++Linux服务器开发高级架构师/Linux后台开发架构师丨高级进阶学习
01 课程介绍 [录播]课程介绍(66分钟) 免费试学 [录播]磁盘存储链式的B树与B+树(131分钟) 免费试学 免费学习视频链接点击:C/C++Linux服务器开发高级架构师/Linux后台架构师 ...
- 【零声教育】C/C++Linux服务器开发/高级架构师 课程
随着去年年底的疫情,很多线下的学习都变成了网课的形式,各种付费学习也萌生出来,很多决定要报名付费网课例如零声学院C/C++linux后台服务器高级架构师的程序员,报名之前总会问我这样一个问题,除了视频 ...
- FastDFS文件同步机制分析
FastDFS文件同步机制 一.tracker server目录及文件结构 二.storage server目录及文件结构 三.FastDFS文件同步 3.1.同步日志所在目录 3.2.binlog格 ...
- FastDFS合并存储原理分析
FastDFS合并存储原理分析 基于FastDFS 5.03/5.04 2014-12-03 一.合并存储简介 在处理海量小文件问题上,文件系统处理性能会受到显著的影响,在读写次数与吞吐量这两个指标上 ...
- TFS,FastDFS性能对比与分析
TFS,FastDFS对比 统一称存储元数据的为master server,存储文件的为slave server. 1)Master单点:TFS,FastDFS都不存在master单点问题. 2)Sl ...
- FastDFS之Linux下搭建
1.软件环境 CentOS6.5 FastDFS v5.05 libfastcommon- - master.zip(是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库) fast ...
最新文章
- 广州富力再引强援 95后潜力中锋桂宏加盟球队
- 【leetcode】Balanced Binary Tree(middle)
- tcp连接探测Keepalive和心跳包
- python 3d绘图 拖动_使用python-matplotlib连续3D绘图(即图形更新)?
- python gui编程框架_工程师必知的几个Python GUI框架
- 横屏展示 fragment 监听面积并非全屏,部分面积监听失效
- MySQL dayofweek()函数
- 数据库日志路径--数据库清理垃圾日志路径
- 楼板计算塑形弹性_柴油发电机机房设计标准及原则:机房接地选址、柴发容量计算书...
- 寒武纪讯飞京东等合搞AI芯片评测标准,作者包括陈云霁陈天石
- 阅读理解常规解题思路
- Java基础编程题——水仙花数
- Redis 列表(List) Redis Lpush 命令
- 《羊了个羊》谁还在玩我笑他两年半
- 计算机视觉不规则roi原理,C++ 中利用 Opencv 得到不规则的ROI 区域(已知不规则区域)...
- 小程序typescript_16天:从概念到实现的TypeScript应用程序
- 白夜追凶 :手 Q 图片的显示和发送逻辑
- Android 高仿豌豆荚 一键安装app 功能 实现
- java零钱换整程序_Leetcode 322. 零钱兑换
- 数据挖掘课程笔记--关联分析
热门文章
- python 读取配置文件,报错configparser.NoSectionError: No section 解决方案
- LeetCode 127. 单词接龙(C++)*
- 中科院院士:几乎没有任何研究课题会完全按照预期发展;如果有,这种研究不会有任何突破、不会给人带来任何惊喜...
- Win7注册表写入失败怎么办?Win7写入注册表失败的解决方法
- Eclipse 3.5.2配置J2ME环境和 WTK2.5.2下载(转)
- ColorImpact v2.8.1.378 汉化注册版
- 要么干、要么滚,别在这里混!
- 事件抽取与事件图谱构建
- js实现文字无限滚动轮播
- Android蓝牙技术+Demo