这篇文章主要讲解了“如何解决生产环境分布式文件系统崩了问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决生产环境分布式文件系统崩了问题”吧!
问题定位
通过登录服务器查看系统的访问日志,发现日志文件中输出了如下异常信息。
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 /data cp -r /opt/fastdfs_storage /data cp -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_data base_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
感谢各位的阅读,以上就是“如何解决生产环境分布式文件系统崩了问题”的内容了,经过本文的学习后,相信大家对如何解决生产环境分布式文件系统崩了问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!