lvs健康診断スクリプト
2070 ワード
本スクリプトはシングルのlvsサーバーに適していますが、keepalivedを使用すると自動的に状態を検出しますので、lvs+keepalivedを使用するとスクリプトを使ってrealserver状態を確認する必要はありません.
疑問があればQQに連絡してもいいです.
#!/bin/bash
#
VIP=192.168.3.22
CPORT=80
FAIL_BACK=127.0.0.1
RS=("192.168.3.211" "192.168.3.215")
# RSSTATUS
declare -a RSSTATUS
RW=("2" "1")
RPORT=80
TYPE=g
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log
# realserver
addrs() {
ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
[ $? -eq 0 ] && return 0 || return 1
}
# realserver
delrs() {
ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
[ $? -eq 0 ] && return 0 || return 1
}
# realserver
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
}
# ipvsadm realserver , 1 2
initstatus() {
local I
local COUNT=0;
for I in ${RS[*]}; do
if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then
RSSTATUS[$COUNT]=1
else
RSSTATUS[$COUNT]=0
fi
let COUNT++
done
}
initstatus
while :; do
let COUNT=0
for I in ${RS[*]}; do
if checkrs $I; then
if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
addrs $I ${RW[$COUNT]}
[ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
echo "`date +'%F %H:%M:%S'`, $I is back."|sendmail -s "realserver is back" [email protected]
fi
else
if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
delrs $I
[ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
echo "`date +'%F %H:%M:%S'`, $I is gone."|sendmail -s "realserver is gone" [email protected]
fi
fi
let COUNT++
done
sleep 5
done
本スクリプトは、realserverが実行されていないことを確認すると、自動的にipvsadm構成からサーバーを蹴り出します.realserverを再起動すると自動的にrealserverをipvsadmプロファイルに追加します.同時に疑問があればQQに連絡してもいいです.