如下是学习完马哥视频lvs后改写的健康检查脚本第三版。利用工作之余三四个小时时间才把整个逻辑搞清楚,有时候自己都有点蒙圈,尤其是在写到while循环的时候。总的来说非常感谢马哥的慷慨解囊!脚本原稿及思路均来自马哥,自己又折腾几小时终于完成第三版!如有不妥之处,欢迎指出批评。

#!/bin/bash

#

VIP=192.168.28.50

CPORT=80

FAIL_BACK=127.0.0.1

RS=("192.168.28.11" "192.168.28.12")

#RSTATUS=("1" "1")

RW=("2" "1")

RPORT=80

TYPE=g

CHKLOOP=3

LOG=/var/log/ipvschk.log

#添加RS,添加成功返回0,否则返回1

function addrs() {

 ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2

 [ $? -eq 0 ] && return 0 || return 1

}

#删除RS,删除成功返回0,否则返回1

function delrs() {

 ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT

 [ $? -eq 0 ] && return 0 || return 1

}

#检测RS服务是否在线,注意一下这里面指的RS的服务,如果连续三次都监测不通,则返回1,否则返回0

function checkrs(){

 local I=1

 while [ $I -le $CHKLOOP ];do

  if curl --connect-timeout 1 http://$1 &>/dev/null ; then

   return 0

  fi

 let I++

 done

 return 1

}

#初始化RS在线状态,如果在线,设置节点初始化状态为1,否则为0

function initstatus(){

 local I

 local COUNT=0

 for I in ${RS[*]};do

  if checkrs $I ; then

   RSSTATUS[${COUNT}]=1

  else

   RSSTATUS[${COUNT}]=0

  fi

 let COUNT++

 done

}

#ipvs状态检查,如果已添加至ipvs则返回0,否则返回1

function rrstatus(){

 realsta=`ipvsadm -L -n | grep $1 | grep -v grep | wc -l`

 [ $realsta -ne 0 ] && return 0 || return 1

}

#进行初始化

initstatus

#判断ipvsadm是否启动,如果没有启动则直接退出,否则继续

if [ ! -e /var/lock/subsys/ipvsadm ]; then

 echo "`date +'%F %H:%M:%S'`, ipvs is stop." >> $LOG

 exit 1

fi

#在这里逻辑关系有点复杂,总体思路是:监测rs是否加入到ipvs中。如果未添加并且在线则添加;如果已添加并且不在线,则删除

while :; do

 let COUNT=0

 for I in ${RS[*]} ; do

  rrstatus $I

  [ $? -eq 0 ] &&  RRSTATUS=1 || RRSTATUS=0

  if checkrs $I; then

   if [ $RRSTATUS -eq 0 ]; then

    addrs $I ${RW[$COUNT]}

    if [ $? -eq 0 ] ; then 

     RSSTATUS[$COUNT]=1

     echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG

    else

     echo "`date +'%F %H:%M:%S'`, add $I faild." >> $LOG

    fi

   fi

  else

   if [ $RRSTATUS -eq 1 ] ; then

    delrs $I

    if [ $? -eq 0 ] ; then

     RSSTATUS[$COUNT]=0

     echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG

    else

     echo "`date +'%F %H:%M:%S'`, del $I faild or $I already has gone." >> $LOG

    fi

   fi

  fi

  let COUNT++

 done

#如果服务都不在线,并且备用服务未添加至ipvs,则添加备用服务;一旦有服务在线,则删除已添加的备用节点

 if [ ${RSSTATUS[0]} -eq 0 -a ${RSSTATUS[1]} -eq 0 ];then

  rrstatus $FAIL_BACK

  if [ $? -eq 1 ]; then

   ipvsadm -a -t $VIP:$CPORT -r $FAIL_BACK -w 1

  fi

 else

  rrstatus $FAIL_BACK

  if [ $? -eq 0 ]; then

   ipvsadm -d -t $VIP:$CPORT -r $FAIL_BACK

  fi

 fi

#5s监测一次

 sleep 5

done

lvs健康检查脚本第三版的更多相关文章

  1. LVS健康检查脚本

    #!/bin/bash #============================================================================= VIP=10.10 ...

  2. Oracle SQL 调优健康检查脚本

    Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...

  3. Script:SQL调优健康检查脚本

    Script:SQL调优健康检查脚本 http://www.askmaclean.com/archives/sql-tuning-health-check-script.html 以下脚本可以用于收集 ...

  4. keepalived健康检查及双主MySQL健康检查脚本

    一.http检查 HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是否匹配,不匹配则从服务器池中移除:此外还可以指定http返回码来判断 ...

  5. oracle 容灾库日常维护 ,健康检查脚本 以及常见问题分析

    select DEST_ID, APPLIED_SCN FROM v$archive_dest select * from v$dataguard_status; SELECT gvi.thread# ...

  6. PLSQL_PLSQL调优健康检查脚本SQLHC(案例)

    2014-08-23 Created By BaoXinjian

  7. (转)oracle 数据库性能健康检查脚本

    转至:https://blog.csdn.net/cm_0205/article/details/100210526?utm_medium=distribute.pc_relevant_downloa ...

  8. linux系统健康检查脚本

    #!/bin/bash echo "You are logged in as `whoami`"; if [ `whoami` != root ]; then echo " ...

  9. Nginx负载均衡中后端节点服务器健康检查的操作梳理

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

随机推荐

  1. bep-10翻译

    dht协议的目的是解放tracter服务器,将tracter的任务分布式存到各个客户端上(即维护资源文件的下载列表,从哪能下载到请求的文件): dht协议在get_peer请求获得peer信息后,就会 ...

  2. libevent-signal(1)

    现在已经知道,libevent有三种事件类型,分别是时钟事件,信号事件,i/o事件.今天就分析一下信号事件,下面是一个简单的信号事件demo #include <sys/types.h> ...

  3. Gradle入门实战(Windows版)

    Installation Gradle runs on all major operating systems and requires only a Java JDK or JRE version ...

  4. springMVC框架下返回json格式的对象,list,map

    原文地址:http://liuzidong.iteye.com/blog/1069343 注意这个例子要使用jQuery,但是jquery文件属于静态的资源文件,所以要在springMVC中设置静态资 ...

  5. BZOJ2816:[ZJOI2012]网络(LCT)

    Description 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构 ...

  6. java使用类序列化反序列化(读写文件)

    创建类:Role package com.wbg.springRedis.entity; import java.io.Serializable; public class Role implemen ...

  7. vue中使用window.open会在url前自动添加本地服务器的地址bug修复

    不能写成www.baidu.com 需要写成https://www.baidu.com

  8. GoldenGate -- OGG EXTRACT进程 OGG-00446 报错

    -- :: INFO OGG- Positioning to (Thread ) Sequence , RBA , SCN 0.470706262. Source Context : SourceMo ...

  9. CentOS7利用本地yum源配置NBD

    一:CentOS7.0创建本地YUM源 (物理机:直接将刻录的CentOS7光盘利用光驱插入物理机上) (虚拟机: CD/DVD>>连接本地ISO) 针对物理机192.168.9.112进 ...

  10. 微信网页授权-公众号支付(获取openid、用户信息等)

    名词解释: openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要 ...