推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 木木人大数据 > HDFS主从切换预警

HDFS主从切换预警

木木人大数据 2021-06-11
木木人大数据
主要分享大数据框架,如flink,spark,kafka,hbase,hive原理源码,也会分享数据仓库,图计算等。
31篇原创内容
Official Account

HDFS主从切换预警

  1. 自定义shell脚本

 1#!/bin/bash
2#定义空变量
3NN1_HOSTNAME=""
4NN2_HOSTNAME=""
5NN1_SERVICEID=""
6NN2_SERVICEID=""
7NN1_SERVICESTATE=""
8NN2_SERVICESTATE=""
9
10#设置需要发送邮件的邮箱
11EMAIL=1124009143@qq.com     
12
13#配置hadoop命令的目录
14CDH_BIN_HOME=/home/hadoop/app/hadoop/bin
15
16#查看集群的nameservices及namenode_serviceids
17ha_name=$(${CDH_BIN_HOME}/hdfs getconf -confKey dfs.nameservices)
18namenode_serviceids=$(${CDH_BIN_HOME}/hdfs getconf -confKey dfs.ha.namenodes.${ha_name})
19
20#通过for循环,将节点名称赋值到对应的变量中
21for node in $(echo ${namenode_serviceids//,/ }); do
22    state=$(${CDH_BIN_HOME}/hdfs haadmin -getServiceState $node)
23
24#如果节点状态为active,就将节点名称赋值到NN1_SERVICEID,节点状态赋值到NN1_SERVICESTATE,以及对应active节点的主机名NN1_HOSTNAME
25    if [ "$state" == "active" ]; then
26        NN1_SERVICEID="${node}"  
27        NN1_SERVICESTATE="${state}" 
28        NN1_HOSTNAME=`echo $(${CDH_BIN_HOME}/hdfs getconf -confKey dfs.namenode.rpc-address.${ha_name}.${node}) | awk -F ':' '{print $1}'`
29
30    elif [ "$state" == "standby" ]; then
31        NN2_SERVICEID="${node}"
32        NN2_SERVICESTATE="${state}"
33        NN2_HOSTNAME=`echo $(${CDH_BIN_HOME}/hdfs getconf -confKey dfs.namenode.rpc-address.${ha_name}.${node}) | awk -F ':' '{print $1}'`
34        #echo "${NN2_HOSTNAME} : ${NN2_SERVICEID} : ${NN2_SERVICESTATE}"
35    else
36        echo "hdfs haadmin -getServiceState $node: unkown"
37    fi
38
39done
40
41
42echo "                                                                "
43echo "Hostname        Namenode_Serviceid      Namenode_State"
44echo "${NN1_HOSTNAME}        ${NN1_SERVICEID}       ${NN1_SERVICESTATE}"
45echo "${NN2_HOSTNAME}        ${NN2_SERVICEID}       ${NN2_SERVICESTATE}"
46
47#将节点信息保存到HDFS_HA.log
48#save current NN1/2_HOSTNAME state
49echo "${NN1_HOSTNAME}           ${NN1_SERVICEID}    ${NN1_SERVICESTATE}" > HDFS_HA.log
50echo "${NN2_HOSTNAME}           ${NN2_SERVICEID}        ${NN2_SERVICESTATE}" >> HDFS_HA.log
51
52#如果不存在HDFS_HA_LAST.log文件,就会跳过if判断,直接执行最后一步。
53#如果文件存在,会将当前active节点的namenode_serviceids跟HDFS_HA_LAST.log文件中的active进行比较。
54if [ -f HDFS_HA_LAST.log ];then
55            HISTORYHOSTNAME=`cat HDFS_HA_LAST.log| awk '{print $1}' | head -n 1`
56              #如果名称不一致,则会发送邮件到我们的邮箱
57            if [ "$HISTORYHOSTNAME" != "${NN1_HOSTNAME}"  ];then
58                echo "send a mail"
59                echo -e "`date "+%Y-%m-%d %H:%M:%S"` : Please to check namenode log." | mail \
60                -r "From: alertAdmin <1124009143@qq.com>" \
61                -s "Warn: CDH HDFS HA Failover!." ${EMAIL}
62
63        fi
64
65fi
66
67cat HDFS_HA.log > HDFS_HA_LAST.log
  1. 执行get_hdfs_ha_state.sh脚本,可以看到保存的日志文件

1[hadoop@ruozedata001 shell]$ cat HDFS_HA_LAST.log 
2ruozedata001           nn1    active
3ruozedata002           nn2        standby
  1. 当我们通过手工模拟节点切换的效果

1[hadoop@ruozedata001 shell]$ hdfs haadmin -failover nn1 nn2
2Failover to NameNode at ruozedata002/172.16.69.174:8020 successful
  1. 再执行脚本,会发现系统已经发送邮件到我们邮箱

 1[hadoop@ruozedata001 shell]$ sh get_hdfs_ha_state.sh 
2
3Hostname        Namenode_Serviceid      Namenode_State
4ruozedata002        nn2     active
5ruozedata001        nn1     standby
6send a mail
7[hadoop@ruozedata001 shell]$ cat HDFS_HA.log 
8ruozedata002           nn2    active
9ruozedata001           nn1        standby
10[hadoop@ruozedata001 shell]$ cat HDFS_HA_LAST.log 
11ruozedata002           nn2    active
12ruozedata001           nn1        standby
HDFS主从切换预警 识别 下方二 维码 ,即可关注公众号获取最新大厂技术


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《HDFS主从切换预警》的版权归原作者「木木人大数据」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注木木人大数据微信公众号

木木人大数据微信公众号:bigdata_mr

木木人大数据

手机扫描上方二维码即可关注木木人大数据微信公众号

木木人大数据最新文章

精品公众号随机推荐