2020-06-26 20:26:39
环境:centos7.1
简介:
当脚本检测到某个RS的http服务掉线时,在LVS中自动移除RS;当所有RS的http服务掉线时,在LVS中移除所有RS,并将LVS调度器上的http服务加入到LVS中,作为告警页面。
当脚本检测到某个RS的http服务活跃时,自动将其加入到LVS中,如果有调度器本身的存在LVS中,将其删除。
该脚本经本人测试,完全达到要求。
以下为脚本:
#!/bin/bash
#
rs=("152.168.1.12" "152.168.1.13")
vip="152.168.1.10"
port=80
logfile="/usr/local/scripts/lvs.log"
function check_alldown {
#有一个rs主机能访问,就说明不是全部掉了
#检查到一个rs主机存活就退出检查
#如果全部rs不能访问,说明主机全掉了
for www in `echo ${rs[*]}`
do
curl --connect-timeout 1 http://$www &> /dev/null
if [ $? -eq 0 ]
then
echo 0
exit 0
fi
done
echo 100
}
function lvs_add {
ipvsadm -a -t $vip:$port -r $1
echo "add rs host:$1 to lvs"
}
function lvs_rm {
ipvsadm -d -t $vip:$port -r $1
echo "remove rs host:$1 to lvs"
}
function lvs_local {
#如果全部rs主机掉线,并且lvs中没有127.0.0.1就添加它
#如果可以访问一个rs主机,并且lvs中有127.0.0.1就删除它
all_down=`check_alldown`
rip=$(ipvsadm -L -n | gawk '/127.0.0.1/')
if [ $all_down -eq 100 ]
then
if [ "$rip" = "" ]
then
echo "`date +%F:%H-%M-%S` all rs host is down!" >> $logfile
lvs_add "127.0.0.1"
fi
else
if [ $all_down -eq 0 ] && [ ! "$rip" = "" ]
then
echo "`date +%F:%H-%M-%S` one rs host is up,remove local rs host!" >> $logfile
lvs_rm "127.0.0.1"
fi
fi
}
function lvs_rs {
#如果可以访问一个rs主机,并且lvs中没有它就添加它
#如果不能访问一个rs主机,并且lvs中有它就删除它
lvs_local
for www in `echo ${rs[*]}`
do
rip=$(ipvsadm -L -n | gawk "/$www/")
curl --connect-timeout 1 http://$www &> /dev/null
if [ $? -eq 0 ]
then
if [ "$rip" = "" ]
then
echo "`date +%F:%H-%M-%S` rs host:$www is up!" >> $logfile
lvs_add "$www"
fi
else
if [ ! "$rip" = "" ]
then
echo "`date +%F:%H-%M-%S` rs host:$www is down!" >> $logfile
lvs_rm "$www"
fi
fi
done
}
function lvs_monitor {
while true
do
echo "check lvs rs health!"
lvs_rs
sleep 1
done
}
lvs_monitor
完毕。
Docker实践(19) – 保留容器的bash历史记录
04-21
LVS三种负载均衡方式对比
07-06
LVS自动部署及监控shell脚本
04-11
Linux vsftpd启动,停止,重启脚本
07-23
PHP环境安全性能检查
03-20
nginx日志切割shell脚本
05-13
shell脚本制作俄罗斯方块游戏
02-27
使用shell脚本结合innobackupex自动备份mysql innodb数据库
04-06
使用shell脚本自动配置mysql主从
03-14
同时管理多台服务器的expect脚本
03-01
快速创建一个可读写的Samba Server的shell脚本
07-07
手机故障基本检查测试方法
05-26
移动硬盘复制文件夹提示无法复制tuiche-2:数据错误(循环沉余检查)
07-03
自动化脚本一键搭建telegram的MTProto代理
11-17
LVS详细介绍及LVS和keepalived的使用
04-16
bash使用示例(1) – 数组
04-28
bash使用示例(2) – 内部变量
04-27
GNU Bourne-Again Shell(bash)“Shellshock”
07-17