写在前面

说来也怪,早不崩晚不崩,偏偏在上班第一天的时候,生产环境分布式文件系统崩了。我才刚来到我的工位坐下,“叮铃铃”电话响了,是运营打来的,“喂,冰河,快点看看,生产环境的图片和视频都无法上传了,系统崩溃了,快点看看啊!”。你说我一个不是做运维的,直接打来电话让我看生产环境的事故?原来是运维那哥们还没上班,额,好吧,我接受了,于是我迅速整理好工位,摆出电脑,登录服务器,一顿操作猛如虎,10分钟搞定了,剩下的就是异步复制图片和视频了。

今天,就和小伙伴们分享下,这次生产环境分布式文件系统出现的问题,以及我是如何10分钟排查问题和解决问题的。另外,本文不是基于生产环境事故写的,而是事后,我在我本机虚拟机上模拟的环境。解决问题的思路和方法都是一样的。

额,估计运维要被3.25了!!

文章已收录到:

https://github.com/sunshinelyz/technology-binghe

https://gitee.com/binghe001/technology-binghe

问题定位

通过登录服务器查看系统的访问日志,发现日志文件中输出了如下异常信息。

org.csource.common.MyException: getStoreStorage fail, errno code: 28at 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 fdfsservice fdfs_trackerd startservice 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,我拉你进群,一起交流技术,一起进阶,一起牛逼~~

新年上班第一天生产环境分布式文件系统崩了!!相关推荐

  1. 前端上班第一天-开发环境配置

    环境配置 1.chrome下载 https://www.google.cn/chrome/index.html 下载完后默认是google搜索,会导致不能访问网站,修改为bing搜索 点击 浏览器右上 ...

  2. 分布式文件系统选型小记

    分布式文件系统选型小记 Q&A 分布式文件系统是什么? 分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,是通过 ...

  3. 漫画 | 上班第一天,前端把后端告上县衙,还列了 5 宗罪!

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 今天这篇漫画是「 互联网人吐槽大会系列 #1 」讲述的是前端 ...

  4. java基础巩固-宇宙第一AiYWM:为了维持生计,大数据Hadoop之HDFS分布式文件系统(HDFS读写流程、主从集群两种问题“单点故障”及“压力过大内存受限”、HDFS的架构设计)~整起

    Hadoop之HDFS 目录 一.大数据 二.HADOOP 三.HDFS 1.HDFS基本概念 2.HDFS的架构设计 3.HDFS自己对于上面两种数据持久化技术的实现: 4.HDFS读写流程 5.H ...

  5. 更换分布式文件系统副本组成员的硬件或操作系统——第一步:计划

    更换分布式文件系统副本组成员的硬件或操作系统 第一步:计划 大家好,Ned在这里又要开始一个新的关于分布式文件系统副本的系列介绍,该系统包含5个部分.随着Windows Server 2008 R2的 ...

  6. Dapper--Google生产环境下的分布式跟踪系统

    Dapper--Google生产环境下的分布式跟踪系统 概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发 ...

  7. Docker 文件存储驱动:AUFS 文件系统原理及生产环境的最佳配置

    我们知道,Docker 主要是基于 Namespace.cgroups 和联合文件系统这三大核心技术实现的.那么你知道联合文件系统是什么吗?它的原理又是什么呢?首先我们来了解一下什么是联合文件系统. ...

  8. Spark环境搭建(一)-----------HDFS分布式文件系统搭建

    下载的压缩文件放在~/software/    解压安装在~/app/ 一:分布式文件系统搭建HDFS 1,下载Hadoop HDFS环境搭建    使用版本:hadoop-2.6.0-cdh5.7. ...

  9. 生产环境实战spark (5)分布式集群 5台设备之间hosts文件配置 ssh免密码登录

    生产环境实战spark (5)分布式集群 5台设备之间 ssh免密码登录 之前已经在master节点单台设备上配置ssh免密码的登录工作,现在要做的事情是在5台设备之间实现ssh免密码操作.我在整个大 ...

最新文章

  1. Oozie 配合 sqoop hive 实现数据分析输出到 mysql
  2. 分库分表的4个面试连环炮问题!不会就惨了!
  3. OpenGL 位图字体渲染的实例
  4. [BZOJ5303] [HAOI2018] 反色游戏
  5. ffmpeg builds by zeranoe_FFmpeg
  6. 关于C#中实现两个应用程序消息通讯的问题
  7. jQuery BreakingNews 间歇滚动
  8. 红橙Darren视频笔记 Handler源码简析与handler框架模拟 ThreadLocal
  9. ITIL4考试练习题
  10. mysql utf8 bom_UTF8的BOM
  11. 翻译记忆软件-塔多思TRADO经典教程_2
  12. 万字详解 GoF 23 种设计模式(多图、思维导图、模式对比),让你一文全面理解
  13. 老人信息管理系统c语言,基于STM32的老人吃药提醒器——智能电子药盒设计(原理图、PCB源文件、源码、APP源码等)...
  14. 偶像生于1964:马云、张朝阳、求伯君的激荡人生
  15. 关于耦合度以及低耦合度的必要性
  16. namespace is terminated
  17. 饥荒中的聊天表情(Emoticons In Don‘t Starve Together)
  18. Isabelle定理证明器
  19. 微信支付宝多商户解决方案
  20. 读《中国通史》(1)

热门文章

  1. “华数杯”建模学习思考(MatlabPython代码实现)
  2. Modbus协议的数据模型和地址模型,Modbus寄存器40001,30001是什么意思?
  3. Cmap和Carray以及Cstring的使用以及MFC中的文件读写
  4. Spring-boot通过redisTemplate使用redis(无须手动序列化)
  5. 内存屏障(Memory Barrier)(二)什么是读屏障?
  6. TensorFlow系列专题(一):机器学习基础
  7. 数字图像处理第六章——彩色图像处理(上)
  8. 经济基础知识(初级)【9】
  9. 用python读取身份证信息的功能分析与实现,兼述python调用dll的方法
  10. kali2020.1中文字体乱码/kali乱码/汉化