作者个人研发在高并发场景下提供了一个简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多的童鞋,这里给出开源框架的地址:https://github.com/sunshinelyz/mykit-delay说来也怪,写在前面,不会早点崩溃还是后来,可是第一天上班就发生了,生产环境分布式文件系统崩溃了。刚来到自己的工位坐下,“叮铃铃”电话响了,是运营的,“喂,冰河,你看一下,生产环境的图片和视频无法上传,系统崩溃了,快看!”。你说我不是做运维的,直接打电话让我看看生产环境的事故?走出电脑,登录服务器,操作猛如虎。10分钟搞定,剩下的就是异步复制图片和视频了。今天和小伙伴们分享一下生产环境分布式文件系统出现的问题,以及我是如何在10分钟内排查和解决的。另外,这篇文章并不是基于生产环境意外而写的,而是后来在自己本地虚拟机上模拟的环境。解决问题的思路和方法都是一样的。嗯,运维估计要3.25了!!文章已收录:https://github.com/sunshinelyz/technology-binghehttps://gitee.com/binghe001/technology-binghe问题定位通过登录服务器日志查看系统访问,发现如下日志文件中输出了异常信息。org.csource.common.MyException:getStoreStoragefail,errnocode:28atorg.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1629)atorg.csource.fastdfs.StorageClient.do_upload_file(StorageClient.java:639)atorg.csource.fastdfs.StorageClient.upload_file(StorageClient.java:162)atorg.csource.fastdfs.StorageClient.upload_file(StorageClient.java:180)显然是系统无法上传文件导致的。这个日志信息非常重要,对故障排除起着至关重要的作用。原因分析既然上传的文件有问题,那我先试试看能不能访问之前上传的文件?经验证,之前上传的文件是可以访问的,再次验证是上传的文件有问题。由于生产环境使用的是分布式文件系统,一般情况下一般不会出现问题。如果上传文件出现问题,大概率是服务器磁盘空间不足。那我就沿着这个思路排查问题。于是乎,我用df-h查看服务器的存储空间使用情况,已经达到了91%。好吧,可能是磁盘空间导致了问题。接下来,我们进一步确认问题是否是磁盘空间引起的。于是,我打开/etc/fdfs/目录下tracker.conf的配置,看到预留的存储空间是10%(注:这里的分布式文件系统使用的是FastDFS)。看到这里,可以确定是磁盘空间不足导致文件无法上传。总体原因是:服务器91%的磁盘空间已经被使用,而分布式文件系统配置中预留的磁盘空间为10%。事实上,在上传文件时,系统已经检测到当前服务器剩余磁盘空间不足10%,抛出异常,拒绝上传文件。至此,问题的原因已经确定,下一步就是解决问题了。解决问题首先,解决这个问题有两种方法,一种是删除不需要的文件;另一种是扩大磁盘空间。通过删除不需要的文件谨慎使用此方法。在此,我也简单介绍一下这种方法。我给小伙伴们提供了几种递归删除的方法。递归删除.pyc格式的文件。find.-name'*.pyc'-execrm-rf{}\;打印当前文件夹中指定大小的文件find.-name"*"-size145800c-print递归删除指定大小的文件(145800)find.-name"*"-size145800c-execrm-rf{}\;递归删除指定大小的文件并打印出来find.-name"*"-size145800c-print-execrm-rf{}\;下面对上面的命令进行一些简单的说明说明。“。”表示从当前目录开始递归搜索"-name'*.exe'"根据名称搜索,查找所有以.exe结尾的文件夹或文件"-typef"搜索类型为文件"-print"输出搜索到的文件目录名-size145800c指定文件的大小-execrm-rf{}\;递归删除(前面查询的结果)扩大磁盘空间这里Glacier推荐这种方式,我也修复了生产环境使用这种方式的故障。通过查看服务器的磁盘空间,发现/data目录下有整整5TB的空间。呵呵,运维小伙伴怎么不把文件系统的数据存放目录指向/data目录呢。于是,我开始将文件系统的数据存放目录迁移到/data目录下。整个过程如下。注:这里我简单模拟将/opt/fastdfs_storage_data下的数据迁移到/data下。(1)拷贝文件,迁移数据cp-r/opt/fastdfs_storage_data/datacp-r/opt/fastdfs_storage/datacp-r/opt/fastdfs_tracker/data(2)修改路径这里需要修改/etc/fdfs/storage文件系统.conf、mod_fastdfs.conf、client.conf、tracker.conf文件。/etc/fdfs/storage.confstore_path0=/data/fastdfs_storage_database_path=/data/fastdfs_storage/etc/fdfs/mod_fastdfs.confstore_path0=/data/fastdfs_storage_data(有两个)base_path=/data/fastdfs_storage/etc/fdfs/baseclient=/data/fastdfs_tracker/etc/fdfs/tracker.confbase_path=/data/fastdfs_tracker重新建立M00到存储目录的符号链接:ln-s/data/fastdfs_storage_data/data/data/fastdfs_storage_data/data/M00(3)kill进程,重启存储服务(tracker和storage)依次执行以下命令pkill-9fdfsservicefdfs_trackerdstartservicefdfs_storagedstart(4)修改文件读取路径nginx配置location~/group1/M00{root/data/fastdfs_storage_data/data;}(5)重启nginxcd/opt/nginx/sbin./nginx-sreloadOK,问题解决,运行可以正常上传图片和视频。本文转载自微信公众号“银禾科技”,可通过以下二维码关注。转载本文请联系冰川科技公众号。
