原理:在两台Realserver的web服务器上,分别创建两个测试页,名叫.test.html。内容为OK,如果使用elinks命令能获得此信息,就表明Realserver正常,否则无论线路还是web服务出现问题,就认为Realserver出现了问题。如果出现了问题,我就要在Director上将相应的集群服务删掉,直到检测又恢复了正常时,才将它重新添加进去。将此脚本添加到director(实现集群的高可用和负载均衡实验中)脚本中,在start中添加sh /root/test.sh。在stop中添加 killall /root/test.sh。(此处也可以使用awk获取进程号,然后kill掉进程号。)
好了,不多啰嗦了,来看脚本吧!因为水平有限,可能有些地方考虑得不是很到位,还请诸位多多提宝贵意见。
- #!/bin/bash
-
declare -a RSip=(192.168.0.123:5 192.168.0.124:3) #此处的定义格式为Rip:权重
-
VIP=192.168.0.12
-
MAILBOX='root@hanlenry.com' #当出现问题是可以给管理员发邮件
-
PORT=80
-
RSSTATE() {
-
Rip=`echo $1|awk 'BEGIN {FS=":"}{print $1}'` #获取Rip
-
weight=`echo $1|awk 'BEGIN {FS=":"}{print $2}'` #获取权重
-
local TESTPAGE="" #检测变量
-
if [ `elinks --dump $TESTPAGE |grep -o 'OK'|tr 'a-z' 'A-Z'` == 'OK' ];then
-
ipvsadm -ln |grep $Rip || ipvsadm -a -t $VIP:$PORT -r $Rip -g -w $weight #如果有OK,则Realserver正常,查看ipvsadm中是否存在Rip的条目,没有则添加进去。
-
else
-
ipvsadm -ln |grep $Rip && ipvsadm -d -t $VIP:$PORT -r $Rip #如果没有获取成功,就从ipvsadm中将此Rip的条目删除掉。
-
echo "The $Rip was failure." |mail -s "$Rip failure" $MAILBOX #给管理员发邮件。
-
fi
-
}
-
-
while true;do #无限循环
-
for HOST in ${RSip[*]};do
-
RSSTATE $HOST
-
done
- sleep 5 #间隔5s
- done