lvs健康检查脚本第三版
如下是学习完马哥视频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健康检查脚本第三版的更多相关文章
- LVS健康检查脚本
#!/bin/bash #============================================================================= VIP=10.10 ...
- Oracle SQL 调优健康检查脚本
Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...
- Script:SQL调优健康检查脚本
Script:SQL调优健康检查脚本 http://www.askmaclean.com/archives/sql-tuning-health-check-script.html 以下脚本可以用于收集 ...
- keepalived健康检查及双主MySQL健康检查脚本
一.http检查 HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是否匹配,不匹配则从服务器池中移除:此外还可以指定http返回码来判断 ...
- oracle 容灾库日常维护 ,健康检查脚本 以及常见问题分析
select DEST_ID, APPLIED_SCN FROM v$archive_dest select * from v$dataguard_status; SELECT gvi.thread# ...
- PLSQL_PLSQL调优健康检查脚本SQLHC(案例)
2014-08-23 Created By BaoXinjian
- (转)oracle 数据库性能健康检查脚本
转至:https://blog.csdn.net/cm_0205/article/details/100210526?utm_medium=distribute.pc_relevant_downloa ...
- linux系统健康检查脚本
#!/bin/bash echo "You are logged in as `whoami`"; if [ `whoami` != root ]; then echo " ...
- Nginx负载均衡中后端节点服务器健康检查的操作梳理
正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...
随机推荐
- 039条件变量同步(Condition)
也是锁,这个锁多加了wait(),notify()唤醒一个进程,notifyall()唤醒全部进程方法,创建的时候默认是Rlock类型的锁,可以设置为lock类型的,默认就ok from random ...
- delegate 和 event
delegate 和 event 观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, ...
- Git Brash在Windows下乱码问题
,/etc/gitconfig: [gui] encoding = utf- #代码库统一用urf-8,在git gui中可以正常显示中文 [i18n] commitencoding = GB2312 ...
- BZOJ5301:[CQOI2018]异或序列(莫队)
Description 已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所 ...
- 解决 git pull 报错 fatal: refusing to merge unrelated histories
我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传. 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法p ...
- 手工检测SQL注入(安全性测试)
手动你的ASP站可否注入: http://127.0.0.1/xx?id=11 and 1=1 (正常页面) http://127.0.0.1/xx?id=11 and 1=2 (出错页面) 检测表段 ...
- Web打印连续的表格,自动根据行高分页
拿到这个需求,我已经蛋碎了一地,经过N天的攻克,终于是把它搞定了,只是不知道会不会在某种情况下出现BUG.表示我心虚没有敢做太多的测试.... ---------------------------- ...
- 如何在jsp页面获取系统时间
<%@ page import="java.util.*"%> //获取系统时间必须导入的 <%@ page import="java.text.*&q ...
- hibernateDAO层基本的增删改查
完整的学习项目放在了我的github上,是一个半成品的在线音乐网站. hibernate版本1.4 下面是userDAO 即对user表进行增删改查 package DAO; import java. ...
- LeetCodee 105. Construct Binary Tree from Preorder and Inorder Traversal
问题重述: 问题求解: 我们换一组比较有代表性的样例, 对于上图的树来说, index: 0 1 2 3 4 5 6 先序遍历为: 中序遍历为: 5同理,右子树也是如此.这样不难看出本题应该用递归方法 ...