rhcs做HA时的资源释放脚本实现
场景:
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时的资源释放脚本实现相关推荐
- 为什么await()后会执行lock.unlock,await()时不就释放锁了吗
为什么await()后会执行lock.unlock,await()时不就释放锁了吗 1 是的,释放锁是为了别的线程获得,是为了线程间的通信,是临时释放的,真正满足继续向下执行条件后,被唤醒后获得了锁, ...
- C#中的非托管资源释放(FinalizeDispose)
在了解Finalize和Dispose之前,我们需要了解两个概念,一个是托管资源,一个非委托资源. a.其中托管资源一般是指被CLR控制的内存资源,这些资源的管理可以由CLR来控制,例如程序中分配的对 ...
- c#中的非托管资源释放 (Finalize和Dispose)
c#中的非托管资源释放 (Finalize和Dispose) 收藏 在了解Finalize和Dispose之前,我们需要了解两个概念,一个是托管资源,一个非委托资源. a.其中托管资源一般是指被CLR ...
- C#内存泄露与资源释放 经验总结
本文链接:http://blog.csdn.net/yokeqi/article/details/41083939 C#相比其他语言,拥有强大的垃圾回收机制,但并不是这样,你就可以对内存管理放任不管, ...
- RHCS Oracle HA for OEL5.8 KVM实践配置
1.通过Openfiler实现iscsi共享存储 2.采用OEL6.3KVM虚拟平台下安装两个OEL5.8x64KVM虚拟机实现两RHCS5集群节点 3.通过KVM虚拟fence实现fence功能,虽 ...
- Linux 释放socket资源,LwIP使用select,close socket资源释放不完全问题
这篇文章本应该在4月就写好的,但是博客评论系统一直没有搭建好,走了很多弯路,现在好了,delay这么久,终于要要补过来了.自建博客:金宝的博客 该文章完全原创,除通用.广泛的知识点外,均为个人总结,如 ...
- Java8 新的 try-with-resources 语句,自动资源释放
读取文件后需要释放资源,对于占用内存比较大的,非常重要: (1)读取文件内存占用较多的优化方式: 一次读取部分处理完继续读取,可以有效的减少内存的占用: 使用RandomAccessFile可以从文件 ...
- 基于 Android NDK 的学习之旅-----资源释放
基于 Android NDK 的学习之旅-----资源释放 做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概 ...
- C#资源释放及Dispose、Close和析构方法
C#资源释放及Dispose.Close和析构方法 备注:此文的部分观点有误,之所以仍旧保留本文,是需要在后期给出一个勘误版.正确的版本在这里"C#中标准Dispose模式的实现&quo ...
最新文章
- 不支持mac os x软件虚拟化。要运行mac os x,您需要主机VMware workstation支持硬
- 一个handle使用更新线程的实例
- 【Linux入门到精通系列讲解】Linux如何创建和删除swap分区
- CentOS 7环境安装Docker
- [视频教程] docker端口映射与目录共享运行PHP
- 自研开源框架 Midway Serverless ,让前端提效 50% 背后的故事
- MySql允许被远程访问
- 扫地机器人开年之战:新品初现,战局微调
- mysql 数据库 向上取整_PHP取整,四舍五入取整、向上取整、向下取整、小数截取...
- 最佳海报样机模板|让作品脱颖而出
- Web Session和Cookie
- 甘肃计算机报名准考证打印,2019年9月甘肃计算机等考准考证打印入口已开通
- 模式识别人工神经网络BP算法
- 尚硅谷Java Spring注解驱动开发视频教程
- 空间划分的数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分)
- 中国社会追踪调查数据CGSS区县码
- 饥荒联机云服务器_WeGame饥荒联机版专用服务器多层世界搭建教程
- apache2.4开启GZIP压缩
- 红帽linux6.4安装教程,RedHat6.4图文安装教程---Minimal版(详细版)
- 如何正确选择视频流服务器?