FastDFS应用故障及解决方案

fastdfs应用于线上环境已经有一段时间,但在使用过程中出现一个问题,通过程序在上传图片时,有时图片无法正常回显,通过后台日志查看,发现图片确实已经传到服务器;把图片地址复制出来通过浏览器访问也能正常访问到。猜测是网络延迟的问题,但不确定这个延迟发生在哪个过程中。

重新过了一遍线上的结构及fastdfs的原理,终于确定了问题所在。也修改了线上的方案。结合下面两图详细说明下。

图1中是线上原来的结构,一个tracker,两个storage;其中一个storage结合nginx提供图片访问服务,一个storage作为在线热备使用,两个Storage都注册到了tracker下。

故障发生2这个过程中,客户端联系tracker,tracker返回s2(备份storage)的地址,于是图片被上传到了s2上,然后WEB程序返回给客户端一个S1的地址作为回显地址;但因为网络等其他问题,导致S2在把刚上传的图片同步到S1时产生延迟,刚上传的图片在S1上还不存在;此时客户端去访问这个地址,就会返回404的错误,于是回显失败。当上传的图片完成,再去手动访问这个图片地址的时候,这时图片又可以正常显示了。

图2是在考虑到上述问题后做的一个改进,但这里依赖nginx的一个功能proxy_next_upstream http_404。因为在图2的结构下延迟依然会导致图片的回显失败。比如,图片上传到了S2,但前端负载nginx却将访问转发到了S1这个nginx上,在延迟发生的情况下依然会发生404错误。proxy_next_upstream在这时的功能就是避免这种情况的,proxy_next_upstream会在被代理服务器返回404时将请求转发到下一个被代理服务器也是S2上,而不会把404这个错误直接返回客户端。从而避免了回显失败的问题。

当然如果图片的访问功能通过tracker本身的功能来提供的话是可以直接避免这个问题的,因为tracker中是有相应配置控制这部分功能。

还有一个解决办法就是,在客户端回显的时候增加一个等待时间,上传图片成功后,等待2S再显示传回的图片地址基本上可以避免这个问题。但这需要修改代码,目前最简单的就是把图1中的备份storage去掉,但较好的方案还是图2中的,线上的生产数据是必须要备份的。

在使用过程中也发生了一点,就是fastdfs还是比较依赖nginx这类的WEB服务器的,当然这也可能是轻量化带来的必然的情况。

时间: 2024-10-10 10:24:31

FastDFS应用故障及解决方案的相关文章

记一则Hadoop DataNode OOM故障,以及解决方案

一.故障症状 最近公司一个集群跑大任务时,datanode日志报DataXceiveServer: Exiting due to:java.lang.OutOfMemoryError: unable to create new native thread异常,然后计算节点上的DataNode直接挂掉.DataNode异常日志截图如下: 2014-03-06 03:41:05,881 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Da

linux常见故障及解决方案

分析和排查系统故障 要求: 日志文件分析 将/etc/Bluetooth文件夹改名:然后启动Bluetooth服务,观察故障现象:通过分析/var/log/messages文件中的相关记录,判断故障原因,并修复该故障. 步骤: 1.     将/etc/bluetooth目录改名为/etc/bluetooth.bak,执行"service Bluetooth start"命令尝试启动服务,将出现错误提示信息"Can't open RFCOMM config file:No s

Oracle ASM数据库故障数据恢复解决方案

[故障描述] ASM磁盘组掉线 ,ASM实例不能mount.ASM磁盘组有4个500G的磁盘组成,数据库和ASM软件为10.2.0.1,急需恢复oracle数据库. [故障分析] 分析组成ASM磁盘组的磁盘,取出ASM元数据,对元数据进行分析:ASM存储元数据损坏,导致diskgroup无法mount.重组ASM存储空间,从ASM磁盘组中导出数据库文件,然后对数据库文件进行检测,修复.如果数据库文件完好,可以利用从ASM磁盘组中导出的数据库文件启动数据库.如果数据库文件损坏,这底层解析这些数据库

服务器数据恢复的正确方法/服务器硬盘故障的解决方案

[服务器数据恢复原因推断] 服务器数据丢失情况很多,通常无法明确服务器数据丢失的原因,常见的丢失原因有:服务器硬盘出现故障,管理员或者服务器自动进行fsck操作,这一操作可能造成更加严重数据丢失或者导致服务器数据恢复的难度增加.服务器数据丢失后执行mkfs操作,若操作未完成则容易导致部分块组全部为0.或者管理员在服务器数据丢失后自行尝试恢复数据.数据恢复公司操作不当等都有可能对服务器内的数据进一步造成破坏,增大数据恢复难度. [服务器数据恢复正确方法] 首先需要对故障服务器的所有数据进行完整镜像

Oracle ASM故障数据恢复解决方案

一.故障描述ASM磁盘组掉线 ,ASM实例不能mount.ASM磁盘组有4个500G的磁盘组成,数据库和ASM软件为10.2.0.1,急需恢复oracle数据库.二.故障分析分析组成ASM磁盘组的磁盘,取出ASM元数据,对元数据进行分析:ASM存储元数据损坏,导致diskgroup无法mount.重组ASM存储空间,从ASM磁盘组中导出数据库文件,然后对数据库文件进行检测,修复.如果数据库文件完好,可以利用从ASM磁盘组中导出的数据库文件启动数据库.如果数据库文件损坏,这底层解析这些数据库文件,

模拟Linux开机故障与解决方案

Linux启动流程图 (一)模拟第一个阶段失效与修复我们利用一条命令来把MBR的前446字节覆盖的方法来模拟第一阶段dd if=/dev/zero of=/dev/sda bs=446 count=1然后我们重启linux系统,此时只会这个界面,而进不去系统了 接下来我们就要想办法来使系统恢复正常了,首先我们要把光盘加入光驱,然后重新启动,以光盘进行引导.此时会出现这样的界面: 然后,我们要进入救援模式进行修复系统.在boot:后面输入一条命令就进入了救援模式:Linux rescue 此时会进

SQL Server数据库镜像基于可用性组故障转移

SQL Server数据库镜像基于可用性组故障转移 微软从SQL Server 2005开始引入数据库镜像,很快成为一个流行的故障转移解决方案.数据库镜像的一个大的问题是故障转移是基于数据库级别的,因此,如果某个数据库故障,镜像只会针对这个数据库切换,但是,其他数据库都仍然在主服务器上.缺点是越来越多的应用程序是基于多个数据库来构建,所以,如果某一个数据库故障转移而其他数据库仍然在主服务器上,那应用程序将无法工作.当这种情况发生的时候,我如何知晓?并执行该应用程序调用的所有数据库一起故障转移呢?

SQL Server 备份故障

故障信息如下: 标题: Microsoft SQL Server Management Studio------------------------------备份 对于 服务器“*******”失败.  (Microsoft.SqlServer.SmoExtended)有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.4000.0+((KJ_PCU_Main).12062

第7章 性能和可靠性模式 Failover Cluster(故障转移群集)

上下文 您已经决定在设计或修改基础结构层时使用群集以提供高度可用的服务. 问题 您应该如何设计一个高度可用的基础结构层,来防止因单台服务器或它所运行的软件出现故障而导致的服务丢失? 影响因素 在设计高度可用的基础结构层时,请考虑下列影响因素: 硬件组件.应用程序或服务出现故障可以使应用程序无法使用或不可用. 例如,设想一台正在提供应用程序的服务器出现了电源故障. 如果这是唯一的服务器或服务器中的唯一电源,则存在故障单点,并且应用程序将不可用. 计划内的服务器停机时间可以影响应用程序的可用性. 例