生产中,我们需要检测RS状态,当RS服务异常时,应该将RS移出集群,而当RS恢复之后,再将RS加入到集群中。下面是脚本内容

#!/bin/bash
VIP=192.168.10.3
##集群服务端口号
CPORT=80
RS=(192.168.10.7 192.168.10.8)
###RS主机的状态,1表示状态正常
RSTATUS=(1 1)
#权重
RW=(2 1)
###RS主机上实际的服务端口
RPORT=80
###lVS的模式,这里以DR模式为例
TYPE=g
###add函数表示将RS加入到集群,del函数表示将RS移出集群
add() {
ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
[ $? -eq 0 ] && return 0 || return 1
}
del() {
ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
[ $? -eq 0 ] && return 0 || return 1
}
while :; do
let COUNT=0
for I in ${RS[*]}; DO
if curl --connect-timeout 1 http://$I &> /dev/null; then
if [ ${RSTATUS[COUNT]} -eq 0 ];then
add $I ${RW[COUNT]} 
[ $? -eq 0 ] && RSTATUS[$COUNT]=1
fi
else
if [ ${RSTATUS[COUNT]} -eq 1 ]; then
del $I
[ $? -eq 0 ] && RSTATUS[$COUNT]=0
fi
fi
let COUNT++
done
sleep 5
done


脚本思路:写了一个循环,每隔5秒钟去检测一次RS的状态,

1、如果RS状态正常,而RS本身在集群中,那么什么也不做,如果RS不在集群中,则将RS加入到集群中

2、如果RS状态异常,而RS本身在集群中,那么将RS从集群中删除