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 :;do
    RQE1=`/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 &> $NUL
    if [[ -n "$RQE1" && -n "$RQE2" ]];then
        break
    else
        sleep $SAFE_TIME
        continue
    fi
done
NODE=(`grep clusternode /etc/cluster/cluster.conf|grep nodeid|awk -F\" '{print $2}'`)
for i in ${NODE[@]};do
    NODE_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-$Ne
    PHY_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" ]];then
        KILL_PID=(`ps aux|grep -E "rgmanager|fenced|dlm_controld|gfs_controld|corosync"|grep -v grep|awk '{print $2}'`)
        for i in ${KILL_PID[@]};do
            kill -9 $i  &> $NUL
        done
        /etc/init.d/rgmanager stop &> $NUL
        /etc/init.d/cman stop &> $NUL
        /sbin/reboot &> $NUL
    fi
}
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;then
        if $P_CMD $DFGW &>$NUL || $P_CMD $R_NAME &>$NUL || $P_CMD $NFS_IP &>$NUL ;then
            if ! $P_CMD $VIP &>$NUL;then
                DOWN_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" ]];then
                    echo absolutely|/usr/sbin/fence_ack_manual $R_NAME
                fi
            fi
        else
            echo "`$Date` Gateway:$DFGW and HA_node:$R_NAME and Nfs:$NFS_IP Offline!!" >> $Mlog
        fi
    fi
}

GGA(){
    RE=`netstat -anup|grep gmond|grep $VIP|/usr/bin/wc -l`
    [ "$RE" -eq 4 ] && return 0
    MGF=/etc/ganglia/gmond.conf
    RE=`grep -A 2 -E "udp_send_channel|tcp_accept_channel" $MGF|grep $VIP|/usr/bin/wc -l`
    if [ "$RE" -ne 2 ];then
        sed -i "/^udp_accept_channel/a\  \bind = $VIP" $MGF
        sed -i "/^tcp_accept_channel/a\  \bind = $VIP" $MGF
    fi
    GFL=(`find /etc/ganglia/hdp -name "gmond.slave.conf"`)
    for g in ${GFL[@]};do
        if grep "bind = $VIP" $g &> $NUL;then
            continue
        fi
        sed -i "/\<host\>/i\ \ bind = $VIP" $g
    done
    /etc/init.d/gmond restart &> $NUL
    /etc/init.d/hdp-gmond restart &> $NUL
}
while :;do
    GGA
    FREE_RESOURCE
    Node_Reboot
    sleep $RE_PRD
done

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/Linux/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索init
, cluster
, grep
, 节点
, vip
, ganglia
nul
传奇 脚本 释放技能、kim ha neul资源、ha故障切换资源不足、yunohazzz 资源、vsphere ha 资源不足,以便于您获取更多的相关知识。

时间: 2024-09-10 02:18:17

rhcs做HA时用脚本释放资源的相关文章

unity3-unity问一下用C#做脚本,在切换到别的场景中时这个脚本中的staic、new为什么还存在

问题描述 unity问一下用C#做脚本,在切换到别的场景中时这个脚本中的staic.new为什么还存在 unity3d这个脚本在这个场景(A)中,不过我切换到别的场景(B)中,前面场景(A)的staic.new为什么还存在.当我切换回来A时static定的变量值没变,如果清除了应该归0呀.切换场景不是这个场景就结束了吗,应该消除static.new的缓存的吧?? 解决方案 C#中的static代表一直存在内存中,不会被释放,所以如果你的数据不是整个生命周期都有效,那就不要随便static,至于n

Powerdesigner 16.5 从SQL Server 2012做逆向工程时提示:Unable to list tables问题

原文:Powerdesigner 16.5 从SQL Server 2012做逆向工程时提示:Unable to list tables问题 公司深圳团队开发有一套系统在华北区这边推向客户,在一次更新补丁时,由于发生了数据字典的变更,但深圳团队并未给出数据库的更新脚本,只给了新版本的数据库创建脚本,为了保证客户方系统中已有数据不丢失,只能自己想办法了:用Powerdesigner把新版本数据库逆向过来后,将此模型Apply到已有数据库中,此时Powerdesigner会比较两个版本的差异,只更新

浅谈做SEO时应该要看的几个数据

做SEO时需要重视以下的几个数据: 1. 有多少人是经由搜索引擎来进入您的网站.这是最基本也是最重要的数据.若要更详细的话,我们最好能知道每个访客是由哪一个搜索引擎.透过哪一个关键词.以及从哪一个网页进入您的网站.当您第一次做这个分析时,一定会发现访客进入您网站的管道跟您原本的想法会有很大的出入. 如何找出这数据: 如果您能够有网站主机的浏览记录,那是最好的,因为这些信息都包括在浏览记录中.您可以自己写程序来分析,或是运用一些市面上的网络使用分析工具.若您无法得到这个信息(例如您想要看的是您的无

做SEO时Nofollow的一个误区和巧妙用处

在正式进入主题前,先简单介绍下这个nofollow怎么使用,相信还有部分做SEO的朋友对这个标签的使用不太了解的: a target="blank" href="ABC" rel="nofollow" >XXX 具体用处是什么呢?在写本文之前,我的理解跟很多人一样,加入nofollow标签是为了控制权重,即不让所在页面的权重传递给目标页面,这样一来,就相对地增加了传递给其他页面的权重. 这种观念从我在温州网络公司做SEO时,就一直深埋在我脑

浅谈在做seo时容易忽略的的几点错误(一)

很多朋友听到seo,或者一讲到seo,脑子里想的肯定就是选取目标关键词.每天坚持发外链,就达到了seo的目的了.其实,如果说seo只是完成选关键词以及发外链这两个工作就ok了,那就是真的打错特错了.因为seo,是一个系统的工程,除了发外链.选关键词.还有一系列的工作要做,因此本文就说说一些做seo时比较容易忽略的几点. 首先:把优化网站理解成优化首页 SEO优化的是整站而不仅仅是首页.很多朋友在给网站镶嵌关键词时,考虑的只是首页.网页标题以及描述也只是把首页弄好了就兴冲冲的区发外链了,全然不管内

做SEO时如何选个适合自己的老板

我们站长在做网站SEO的时候并不是一定给自己做的,很多时候也是给别人"打工",替别人的网站做SEO,这样,就有可能遇见各种各样的老板.有话说"千里马常有而伯乐不常有",站长们在给别人做站时要是遇见个内行的还好,要是遇见个外行的,只会无理由的给你提硬性要求时,简直让人有生不如死的感觉,因此,选好一个老板也是站长做SEO时很必要的生存手段!具体要如何去做,其实也简单,你要学会察言观色就可,避免开以下几种情况存在的老板就基本没多大问题了. 一.本身网站就很烂的老板 俗话说

对硬盘做镜像时按位与按文件的区别

[网友问题] 对硬盘做镜像时,听说有按位与按文件两种,都有什么特点?都是用在什么情况下的?GHOST是哪种方式? [回答] 备份工作的按位(实际上是按扇区)转存意味着与文件系统无关.数据源是什么样子.有多大,目标就是什么样子,就有多大.即使没有分区.或者无法识别的分区,或者分区逻辑结构有错误,都可以完整的(包括逻辑错误)一起备份到目标设备上. 按文件转存意思是要对文件系统解释atch后,只按文件的方式提取到目标设备上.这个转存程序必须可以解释对应的文件系统,同时不会提取非文件数据.他的数据量也取

win2008做群集时出现的问题的解决方法

在win2008做群集时出现"验证防火墙配置时出错,已添加了具有相同键的项"的问题 在做win2008群集时,我们一般习惯于先装完一台服务器然后Ghost到另外一台服务器来节约时间,恰恰是这个举动造成出现验证群集时出错,会提示"验证防火墙配置时出错 已添加了具有相同键的项",如下图: 该问题是由于两台服务器网卡的GUID号相同造成,需要在注册中进行修改 单击 开始,单击 运行,键入 regedit,然后单击 确定. 查找并删除以下注册表子项: HKEY_LOCAL_

使用Nunit+Access做单元测试时连接已经关闭

今天在使用Nunit+Access做单元测试时,本来正常的代码突然间不能正常通过在VS2005 Express中调试则可以正常通过,正在那闷中发现我打开了Access,结果关了Access代码则能正常通过了