写在后面
说来也怪,早不崩晚不崩,偏偏在下班第一天的时候,生产环境分布式文件系统崩了。我才刚来到我的工位坐下,“叮铃铃”电话响了,是经营打来的,“喂,冰河,快点看看,生产环境的图片和视频都无奈上传了,零碎解体了,快点看看啊!”。你说我一个不是做运维的,间接打来电话让我看生产环境的事变?原来是运维那哥们还没下班,额,好吧,我承受了,于是我迅速整顿好工位,摆出电脑,登录服务器,一顿操作猛如虎,10分钟搞定了,剩下的就是异步复制图片和视频了。
明天,就和小伙伴们分享下,这次生产环境分布式文件系统呈现的问题,以及我是如何10分钟排查问题和解决问题的。另外,本文不是基于生产环境事变写的,而是预先,我在我本机虚拟机上模仿的环境。解决问题的思路和办法都是一样的。
额,预计运维要被3.25了!!
文章已收录到:
https://github.com/sunshinelyz/technology-binghe
https://gitee.com/binghe001/technology-binghe
问题定位
通过登录服务器查看零碎的拜访日志,发现日志文件中输入了如下异样信息。
org.csource.common.MyException: getStoreStorage fail, errno code: 28 at org.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1629) at org.csource.fastdfs.StorageClient.do_upload_file(StorageClient.java:639) at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:162) at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:180)
很显著,是零碎无奈上传文件导致的问题,这个日志信息很重要,对问题的排查起到了至关重要的作用。
剖析起因
既然是上传文件呈现了问题,那我先试试能不能拜访以前上传的文件呢?通过验证,以前上传的文件是能够拜访的,再次验证了是上传文件的问题。
既然生产环境是应用的分布式文件系统,个别状况下是没哈问题的,上传文件呈现了问题,大概率的事件是服务器磁盘空间有余了。那我就来顺着这个思路排查下问题。
于是乎,我应用df -h
查看服务器的存储空间使用率,曾经达到91%了。
嗯,磁盘空间有可能是引起问题的起因。接下来,再来进一步确认下是否是磁盘空间造成的问题。
于是,我再关上/etc/fdfs/
目录下的tracker.conf的配置,看到预留的存储空间为10%(注:这里的分布式文件系统应用的是FastDFS)。
看到这里,能够确定就是磁盘空间有余造成的无奈上传文件的问题。
总体起因就是:服务器磁盘空间已应用91%,而在分布式文件系统的配置中预留的磁盘空间为10%,理论在上传文件的时候,零碎曾经检测到以后服务器残余的磁盘空间有余10%,抛出异样,回绝上传文件。
到此,问题呈现的起因曾经确定了,接下来就是要解决问题了。
解决问题
首先,有两种形式能够解决这个问题,一种就是删除不须要的文件;另一种就是扩容磁盘空间。
删除不须要的文件
这种形式慎用,这里,我也简略的介绍下这种形式。我给小伙伴们提供了几种递归删除的形式。
递归删除.pyc格局的文件。
find . -name '*.pyc' -exec rm -rf {} \;
打印以后文件夹下指定大小的文件
find . -name "*" -size 145800c -print
递归删除指定大小的文件(145800)
find . -name "*" -size 145800c -exec rm -rf {} \;
递归删除指定大小的文件,并打印进去
find . -name "*" -size 145800c -print -exec rm -rf {} \;
上面是对上述命令的一些简要阐明。
"."
示意从当前目录开始递归查找“ -name '*.exe' "
依据名称来查找,要查找所有以.exe结尾的文件夹或者文件" -type f "
查找的类型为文件"-print"
输入查找的文件目录名-size 145800c
指定文件的大小-exec rm -rf {} \;
递归删除(后面查问进去的后果)
扩容磁盘空间
这里,冰河举荐应用这种形式,我修复生产环境的故障也是应用的这种形式。
通过查看服务器的磁盘空间发现,/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.conf
store_path0=/data/fastdfs_storage_database_path=/data/fastdfs_storage
- /etc/fdfs/mod_fastdfs.conf
store_path0=/data/fastdfs_storage_data (有两处)base_path=/data/fastdfs_storage
- /etc/fdfs/client.conf
base_path=/data/fastdfs_tracker
- /etc/fdfs/tracker.conf
base_path=/data/fastdfs_tracker
从新建设 M00 至存储目录的符号连贯:
ln -s /data/fastdfs_storage_data/data /data/fastdfs_storage_data/data/M00
(3)杀掉过程, 重启存储服务 (追踪器和存储器)
顺次执行以下命令
pkill -9 fdfs service fdfs_trackerd start service fdfs_storaged start
(4)批改文件的读取门路 nginx配置
location ~/group1/M00{ root /data/fastdfs_storage_data/data;}
(5)重启nginx
cd /opt/nginx/sbin./nginx -s reload
好了,问题搞定,经营能够失常上传图片和视频了。
好了,明天就到这儿吧,我是冰河,大家有啥问题能够在下方留言,也能够加我微信:sun_shine_lyz,我拉你进群,一起交换技术,一起进阶,一起牛逼~~