场景:

CentOS6.3的二次封装版本,安装hortonworks的hadoop发行版,并按照其官方文档实现高可用,但无fence设备支持,因此导致断网和断电测试时,备用HA节点无法得到资源释放的通知。

因此,笔者简单写了一个脚本,让HA的备节点在主节点断网和断电时能够通过简单测试得知并获取资源,以实现真正意义的HA。

思考:

如何判断网络的连通性?

如何判断VIP的可用性?

如何判断自身的故障?

如何尽可能防止脑裂?

实现:

1、当自身节点IP均不正常时,使本节点重启

2、当检测自身网络正常,且VIP不在线,且日志指出对方HA节点故障时获取资源

3、ganglia的VIP连接修复(不在本文主要思考范围)

代码如下:

#!/bin/bash
STD=$$
Cron_if=`ps aux|grep $0|grep -vE "grep|$STD"|/usr/bin/wc -l`
[[ "$Cron_if" -ge 2 ]] && exit 2
sleep 30
VIP=${VIP:-192.168.1.198}
RE_PRD=${RE_PRD:-10}
SAFE_TIME=${SAFE_TIME:-60}
NMK=${NMK:-8}
NUL=/dev/null
Date="/bin/date +%k:%M:%S/%Y-%m-%d"
[ ! -f /etc/sysconfig/hdp.conf ] && echo "`$Date` Error: No such config fil." >> $Mlog && exit 1
[ ! -f /etc/init.d/cman ] && echo "`$Date` War: `uname -n` Invalid HA node." >> $Mlog && exit 2
[ ! -f /etc/init.d/rgmanager ] && echo "`$Date` War: `uname -n` Invalid HA node." >> $Mlog && exit 2
[ -f /etc/sysconfig/hdp.conf ] && . /etc/sysconfig/hdp.conf
while :;doRQE1=`/etc/init.d/rgmanager status 2> $Mlog|grep "is running."`RQE2=`/etc/init.d/cman status 2> $Mlog|grep "is running."` RQE3=`/etc/init.d/ricci status 2> $Mlog|grep "is running."`RQE4=`/etc/init.d/modclusterd status 2> $Mlog|grep "is running."`[ -z "$RQE2" ] && /etc/init.d/cman start &> $NUL[ -z "$RQE1" ] && /etc/init.d/rgmanager start &> $NUL[ -z "$RQE3" ] && /etc/init.d/ricci start &> $NUL[ -z "$RQE4" ] && /etc/init.d/modclusterd start &> $NULif [[ -n "$RQE1" && -n "$RQE2" ]];thenbreakelsesleep $SAFE_TIMEcontinuefi
done
NODE=(`grep clusternode /etc/cluster/cluster.conf|grep nodeid|awk -F\" '{print $2}'`)
for i in ${NODE[@]};doNODE_IP=`grep $i /etc/hosts|awk '{print $1}'`JUDG_VAR=`/sbin/ip a|grep $NODE_IP`[ -n "$JUDG_VAR" ] && N_NAME=$i[ -z "$JUDG_VAR" ] && R_NAME=$i
done
Node_Reboot(){W_VIP=`/sbin/ip a show $Ne|grep $VIP`Nic_File=/etc/sysconfig/network-scripts/ifcfg-$NePHY_IP_FILE=`grep IPADDR $Nic_File|awk -F\= '{print $2}'`IP_FILE_IF=`/sbin/ifconfig $Ne|grep $PHY_IP_FILE`if [[ -z "$W_VIP" && -z "$IP_FILE_IF" ]];thenKILL_PID=(`ps aux|grep -E "rgmanager|fenced|dlm_controld|gfs_controld|corosync"|grep -v grep|awk '{print $2}'`)for i in ${KILL_PID[@]};dokill -9 $i  &> $NULdone/etc/init.d/rgmanager stop &> $NUL/etc/init.d/cman stop &> $NUL/sbin/reboot &> $NULfi
}
FREE_RESOURCE(){DFGW=`/sbin/route -n|grep $Ne|awk '{print $2}'|grep -v "0.0.0.0"`NFS_IP=`grep netfs /etc/cluster/cluster.conf|awk -F\" '{print $8}'|grep -v "^$"`P_CMD="/bin/ping -c 3 -W 1"if ! $P_CMD $VIP &>$NUL;thenif $P_CMD $DFGW &>$NUL || $P_CMD $R_NAME &>$NUL || $P_CMD $NFS_IP &>$NUL ;thenif ! $P_CMD $VIP &>$NUL;thenDOWN_LOG=`/usr/bin/tail -1 /var/log/cluster/rgmanager.log|grep "$R_NAME DOWN"`FENCE_LOG=`tail -1 /var/log/cluster/fenced.log|grep "$R_NAME failed"`if [[ -n "$DOWN_LOG" && -n "$FENCE_LOG" ]];thenecho absolutely|/usr/sbin/fence_ack_manual $R_NAMEfifielseecho "`$Date` Gateway:$DFGW and HA_node:$R_NAME and Nfs:$NFS_IP Offline!!" >> $Mlogfifi
}GGA(){RE=`netstat -anup|grep gmond|grep $VIP|/usr/bin/wc -l`[ "$RE" -eq 4 ] && return 0MGF=/etc/ganglia/gmond.confRE=`grep -A 2 -E "udp_send_channel|tcp_accept_channel" $MGF|grep $VIP|/usr/bin/wc -l`if [ "$RE" -ne 2 ];thensed -i "/^udp_accept_channel/a\ \ bind = $VIP" $MGFsed -i "/^tcp_accept_channel/a\ \ bind = $VIP" $MGFfiGFL=(`find /etc/ganglia/hdp -name "gmond.slave.conf"`)for g in ${GFL[@]};doif grep "bind = $VIP" $g &> $NUL;thencontinuefised -i "/\<host\>/i\ \ bind = $VIP" $gdone/etc/init.d/gmond restart &> $NUL/etc/init.d/hdp-gmond restart &> $NUL
}
while :;doGGAFREE_RESOURCENode_Rebootsleep $RE_PRD
done

转载于:https://blog.51cto.com/mos1989/1279378

rhcs做HA时的资源释放脚本实现相关推荐

  1. 为什么await()后会执行lock.unlock,await()时不就释放锁了吗

    为什么await()后会执行lock.unlock,await()时不就释放锁了吗 1 是的,释放锁是为了别的线程获得,是为了线程间的通信,是临时释放的,真正满足继续向下执行条件后,被唤醒后获得了锁, ...

  2. C#中的非托管资源释放(FinalizeDispose)

    在了解Finalize和Dispose之前,我们需要了解两个概念,一个是托管资源,一个非委托资源. a.其中托管资源一般是指被CLR控制的内存资源,这些资源的管理可以由CLR来控制,例如程序中分配的对 ...

  3. c#中的非托管资源释放 (Finalize和Dispose)

    c#中的非托管资源释放 (Finalize和Dispose) 收藏 在了解Finalize和Dispose之前,我们需要了解两个概念,一个是托管资源,一个非委托资源. a.其中托管资源一般是指被CLR ...

  4. C#内存泄露与资源释放 经验总结

    本文链接:http://blog.csdn.net/yokeqi/article/details/41083939 C#相比其他语言,拥有强大的垃圾回收机制,但并不是这样,你就可以对内存管理放任不管, ...

  5. RHCS Oracle HA for OEL5.8 KVM实践配置

    1.通过Openfiler实现iscsi共享存储 2.采用OEL6.3KVM虚拟平台下安装两个OEL5.8x64KVM虚拟机实现两RHCS5集群节点 3.通过KVM虚拟fence实现fence功能,虽 ...

  6. Linux 释放socket资源,LwIP使用select,close socket资源释放不完全问题

    这篇文章本应该在4月就写好的,但是博客评论系统一直没有搭建好,走了很多弯路,现在好了,delay这么久,终于要要补过来了.自建博客:金宝的博客 该文章完全原创,除通用.广泛的知识点外,均为个人总结,如 ...

  7. Java8 新的 try-with-resources 语句,自动资源释放

    读取文件后需要释放资源,对于占用内存比较大的,非常重要: (1)读取文件内存占用较多的优化方式: 一次读取部分处理完继续读取,可以有效的减少内存的占用: 使用RandomAccessFile可以从文件 ...

  8. 基于 Android NDK 的学习之旅-----资源释放

    基于 Android NDK 的学习之旅-----资源释放 做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概 ...

  9. C#资源释放及Dispose、Close和析构方法

    C#资源释放及Dispose.Close和析构方法   备注:此文的部分观点有误,之所以仍旧保留本文,是需要在后期给出一个勘误版.正确的版本在这里"C#中标准Dispose模式的实现&quo ...

最新文章

  1. 不支持mac os x软件虚拟化。要运行mac os x,您需要主机VMware workstation支持硬
  2. 一个handle使用更新线程的实例
  3. 【Linux入门到精通系列讲解】Linux如何创建和删除swap分区
  4. CentOS 7环境安装Docker
  5. [视频教程] docker端口映射与目录共享运行PHP
  6. 自研开源框架 Midway Serverless ,让前端提效 50% 背后的故事
  7. MySql允许被远程访问
  8. 扫地机器人开年之战:新品初现,战局微调
  9. mysql 数据库 向上取整_PHP取整,四舍五入取整、向上取整、向下取整、小数截取...
  10. 最佳海报样机模板|让作品脱颖而出
  11. Web Session和Cookie
  12. 甘肃计算机报名准考证打印,2019年9月甘肃计算机等考准考证打印入口已开通
  13. 模式识别人工神经网络BP算法
  14. 尚硅谷Java Spring注解驱动开发视频教程
  15. 空间划分的数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分)
  16. 中国社会追踪调查数据CGSS区县码
  17. 饥荒联机云服务器_WeGame饥荒联机版专用服务器多层世界搭建教程
  18. apache2.4开启GZIP压缩
  19. 红帽linux6.4安装教程,RedHat6.4图文安装教程---Minimal版(详细版)
  20. 如何正确选择视频流服务器?

热门文章

  1. python内置函数调用前_python之内置函数(一)
  2. [Dijstra] 洛谷 P2939 改造路
  3. 读《程序是怎样跑起来的》第一章有感
  4. ScrollView的基本用法丶代理方法
  5. JQueryEasyUI学习笔记(十四)tree
  6. [转]计算机读研的取向
  7. 图形界面报错“已拒绝X11转移申请”的解决方法
  8. Apache的详细安装教程和遇到的问题解决方案
  9. Zookeeper之启动常见错误及解决方法
  10. 如何在Swift中串联或合并数组?