datanode单块盘故障导致节点失效的脚本解决方案

问题:

在hadoop的1.2.0中由于单个磁盘故障导致datanode节点失效,生产环境中datanode节点大多都有多块磁盘,我们现在需要一种方法,让datanode不会被单块磁盘的故障导致整个节点失效。

解决方法及适用场景:

1、修改hadoop源代码(介个在作者能力之外)

2、修改hdfs-site.xml中的dfs.data.dir的值,将故障盘的挂载点删除并重启(推荐在手动部署的hadoop环境中,将此方法做成脚本使用)

3、卸载故障盘,临时将数据写入根目录的挂载点,不修改配置文件(笔者的环境,使用hortonworks部署的hadoop,配置文件由ambari管理,手动修改后一旦使用ambari便会被同步回原来的配置...)

第三种解决方法的部分需求和代码实现

需求:

1、检测到故障盘的挂载点连续三次故障后再进行卸载并停止datanode以免错误判断

2、卸载故障盘后,检测到挂载点正常便启动datanode

3、在datanode启动后,依然能对故障盘进行nagios报警,以提醒管理员

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/

4、管理员修复磁盘后,仅需手动停止datanode,并挂载修复后的磁盘即可,脚本会自动检测磁盘的挂载点并启动datanode

5、假设系统盘有一定可用容量,且一直是好的,因为当系统盘故障后...没有然后了...

代码实现:

#!/bin/bash
# datanode的挂载点列表
MPT[0]=/storage/disk1/
MPT[1]=/storage/disk2/
# check_readonly 此脚本是用来检测datanode的挂载点是否可以,错误则必须输出有:ERROR DIRECTORY 关键字
CRD=/opt/nagios-bin/check_readonly
# chk_rw.sh是nagios被动监控脚本,用来向nagios发送本地磁盘信息
RWS=/opt/nagios-bin/chk_rw.sh
DPID=`cat /var/run/hadoop/hdfs/hadoop-hdfs-datanode.pid`
KD=`ps aux|grep -v grep|grep $DPID`
HOSTNAME=`uname -n`
LIP=`grep $HOSTNAME /etc/hosts|awk '{print $1}'`
CTF=/tmp/count.log
[ ! -f "$CTF" ] && echo 0 > "$CTF"
for i in ${MPT[@]};do
    CTE=`$CRD $i|grep "ERROR DIRECTORY"`
    NMP=`df $i|/usr/bin/tail -1|awk '{print $NF}'`
    # 判断datanode是否需要启动,并启动
    if [[ -z "$CTE" && -z "$KD" ]];then
        chmod 777 $i &>/dev/null
        rm -rf "$i"/* &>/dev/null
        su - hdfs -c "/usr/lib/hadoop/bin/hadoop-daemon.sh --config /etc/hadoop/conf start datanode"  &>/dev/null
    fi
    # 如果挂载点正常,判断是否需要将发送给nagios服务端的脚本信息修改为正常
    if [[ -z "$CTE" && "$NMP" != "/" ]];then
        if grep "chkrw_state=2" $RWS &>/dev/null ;then
            sed -i '/chkrw_state=2/d' $RWS
        fi
        continue
    fi
    # 当挂载点故障或挂载到根目录时,进入如下判断
    if [[ -n "$CTE" || "$NMP" == "/" ]];then
        DNP=`ps aux|grep -v grep|grep datanode|/usr/bin/wc -l`
        # 当挂载点正常,datanode进程正常,且挂载点为根时,跳出循环
        [[ -z "$CTE" && "$NMP" == "/" && -n $DNP ]] && continue
        # 计数器,走到此步骤则+1,满足三次之后便进入如下判断
        /usr/bin/expr `cat $CTF` + 1 > $CTF
        if [ `cat $CTF` -ge 3 ];then
            echo 0 > "$CTF"
            # 清零计数器,并修改想nagios发送信息的脚本
            if ! grep "chkrw_state=2" $RWS &>/dev/null ;then
                sed -i '/chkrw_state=$?/achkrw_state=2' $RWS
            fi
            # 停止可能占用故障挂载点的进程并停止datanode以及卸载
            PIDL=(`/usr/sbin/lsof $i|awk '{print $2}'|grep -v PID`)
            for p in ${PIDL[@]};do
                [ -z "$p" ] && continue
                kill -9 $p
            done
            /bin/umount $i &> /dev/null
            chmod -R 777 $i
            if [[ "$NMP" == "/" ]];then
            su - hdfs -c "/usr/lib/hadoop/bin/hadoop-daemon.sh --config /etc/hadoop/conf stop datanode"  &>/dev/null
                [ -n "$KD" ] && kill -9 $DPID &> /dev/null
            else
                echo "`/bin/date +%k:%M:%S/%Y-%m-%d` $i umount fail." >> /tmp/check_mp.log
            fi
        fi
    fi
done
# 向nagios服务器发送本地磁盘信息
$RWS $LIP ${MPT[@]}

注:

其中nagios方面的内容非本文重点,因此不再提供文中出现的对应脚本,如果需要,请联系笔者。

另需考虑使用根目录的情况一段时间后,故障盘修复或更换后,重新挂载后数据迁移量问题,笔者考虑此问题时曾尝试将此时的系统盘挂载点的数据同步到新磁盘上(点击此处查看此版本),如果此操作在很短的时间内完成时可行的,但是当数据量很多时(譬如需同步500G甚至1T时),短时间必然无法完成,而同步后启动datanode,通过日志发现datanode报错数据节点的注册位置不一致(详细见下图),但是datanode进程并不会因此挂掉(事实上,不做任何操作,仅停止datanode一会,再启动就会显示此错误),考虑对此方法产生的问题暂时无法确定其后果,因此笔者本文中和生产环境中在使用挂载点时先清空里面的内容,因此启动后通过日志可看到hdfs在进行大量的数据同步操作。

将此脚本按需要的频率,写入计划任务即可。

写文不易,不正之处,欢迎指正,若觉得还能凑合,给个赞啊亲..

本文出自 “自强不息” 博客,请务必保留此出处http://mos1989.blog.51cto.com/4226977/1284891

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索hadoop
, 脚本
, 故障
, 磁盘
, ambari hadoop
, grep
, nagios报错
, ctf
, kd树
, ambari
, ctf本地登录
datanode
百度油猴脚本失效了、百度网盘脚本失效、失效节点、阴阳师更新后脚本失效、免流节点脚本,以便于您获取更多的相关知识。

时间: 2024-09-11 04:33:25

datanode单块盘故障导致节点失效的脚本解决方案的相关文章

HP-EVA4400故障导致的oracle数据库丢失的恢复过程

一.故障描述 整个EVA存储结构是由一台EVA4400控制器,三台EVA4400扩展柜和28块FC 300G硬盘构成的.由于两块磁盘掉线导致存储某些LUN不可用,某些LUN丢失.由于EVA4400是因为某些磁盘掉线,从而导致整个存储不可用.因此接收到磁盘以后北亚工程师先对所有磁盘做物理检测,检测完后发现没有物理故障.接着使用坏道检测工具检测磁盘坏道,发现也没有坏道.磁盘坏道检测日志如下: 图一: 二.备份数据 考虑到数据的安全性以及可还原性,在做数据恢复之前需要对所有源数据做备份,以防万一操作不

LINUX REISERFS 6块盘 RAID5邮件服务器的恢复经验

新网,企业邮件服务器,存储于146G×6 RAID5中,有上百万企业用户的邮件,数据区,只分一个区,文件系统为REISERFS,正常工作中,RAID突然OFFLINE,管理员到机房检查时,发现有两块盘报警,将其中一块强制上线后发现卷无法MOUNT,于是强行FSCK 并REBULD TREE,历时4天,完成后仍无法MOUNT.无奈之下,向数据恢复公司求救,大多数公司无法提供可行的解决方案.新网在多方比较及评估后,选择让我们完成. [分析] 这种RAID的问题事实上是很常见的,通常是因为亮灯的两块盘

U盘故障的原因及解决对策

  一般U盘故障分为软故障和硬故障,其中以软故障最为常见. 软故障主要是指U盘有坏块,从而导致U盘能被计算机识别,但没有盘符出现,或者有盘符出现,但当打开U盘时却提示要进行格式化,而格式化又不能成功.前期征兆可能有:U盘读写变慢,文件丢失却仍占用空间等.这种坏U盘一般都可以通过软件低格修复,目前常用的低格修复工具有Mformat(大家可以去网上搜索下载,使用极其方便,不到一分钟即可修复),当然一些U盘厂家也会提供一些类似的软件.笔者认为既然是低格,故障类型也一样,应该硬盘的低格工具Lformat

EVA 4400存储硬盘故障导致数据丢失怎么恢复?

EVA系列存储是一款以虚拟化存储为实现目的的HP中高端存储设备,平时数据会不断的迁移,加上任务通常较为繁重,所以磁盘的负载相对是较重的,也是很容易出现故障的.EVA是依靠大量磁盘的冗余空间,以及故障后rss冗余磁盘动态迁移来实现整个存储的数据保护,但随着越来越多的磁盘掉线,这种保护会接近临界,直至崩溃.下面以EVA存储故障为例,讲解EVA 4400存储数据恢复. 一.故障描述 整个EVA存储结构是由一台EVA4400控制器.EVA扩展柜及若干FC磁盘组成.由于磁盘故障导致存储中LUN不可用,致使

raid5因两块硬盘掉线导致的数据丢失恢复过程分享

1. 故障描述 本案例是HP P2000的存储vmware exsi虚拟化平台,由RAID-5由10块lT硬盘组成,其中6号盘是热备盘,由于故障导致RAID-5磁盘阵列的两块盘掉线,表现为两块硬盘亮黄灯. 经用户方维护人员检测,故障硬盘应为物理故障,表现为:序列号无法读取,在SAS扩展卡上硬盘无法识别. 2. 数据备份与修复 故障发生后用户方工程师与我公司联系,经过详细咨询,了解到故障比较严重,必须把RAID-5磁盘阵列带到我公司进行检测,检测RAID-5的每块成员盘是物理故障(磁头损坏或者盘片

机箱风扇故障导致无法开机

一台普通配置的电脑使用升技KT7主板,最近因为天气炎热在机箱内加装了一个机箱风扇.安装后发现无法启动电脑,开机后自动断电. 分 析 (1)根据故障现象首先检查电源是否出错,结果表明正常. (2)随之怀疑安装机箱风扇时碰到某块板卡从而导致板卡接触不良,在重新插拔了各种板卡之后,故障依旧. (3)随之想到是因为新添加机箱风扇后出现的故障,仔细检查机箱风扇.结果发现机箱风扇使用的是一个假的三脚电源接头,即用来测试风扇转速的第3个脚并没有接上.由于机箱风扇电源线比较短,当时在接线时直接连在主板上的C F

显卡故障导致电脑显示器花屏

电脑故障现象有很多样式,显卡故障导致电脑显示器花屏也是电脑维修中经常遇见的故障,前一阵子朋友使用的是华硕V1326显卡,采用SiS6326芯片.刚开机时工作正常,运行时间稍长后便有花屏现象发生.亲,显卡故障导致电脑显示器花屏,伤不起~! 看来有可能是显卡PCB板与某个元器件接触不良了.对显卡可能产生大量热量的元件进行观察和测量,在检测到主芯片SiS6326时,发现芯片左下脚(正对芯片)有两根针脚与PCB板接触不良,轻轻地掰了一下PCB板,听到轻微的"啪"一声响,再观察SiS6326芯片

解决Win7刻录光盘光驱不读盘故障

  Windows7刻录光盘光驱不读盘故障解决,在Windows7中很多光盘都无法识别和打开.这个问题是由Windows中的一个功能导致的,启用将可能导致无法浏览打开光盘目录,只能加载自动运行程序或自动播放媒体文件,如果没有则无法使用,禁用此功能即可解决问题.此问题对于自己刻录的光盘尤其严重.或表现为光驱不读盘,双击盘符提示:请将一张光盘插入驱动器" 解决方法 步骤如下: 1. Win+R 打开"运行"窗口,输入Services.msc 确定,或依次点击"控制面板&

Windows7刻录光盘光驱不读盘故障解决方法

Windows7刻录光盘光驱不读盘故障解决,在Windows7中很多光盘都无法识别和打开.这个问题是由Windows中的一个功能导致的,启用将可能导致无法浏览打开光盘目录,只能加载自动运行程序或自动播放媒体文件,如果没有则无法使用,禁用此功能即可解决问题.此问题对于自己刻录的光盘尤其严重.或表现为光驱不读盘,双击盘符提示:请将一张光盘插入驱动器" 解决方法 步骤如下: 1. Win+R 打开"运行"窗口,输入Services.msc 确定,或依次点击"控制面板&qu