您的位置:首页 > 其它

lvs的realserver健康检查脚本

2015-11-26 23:25 281 查看
实现思路,每隔一段时间去curl  lvs后端的realserver, 根据状态改变,移除或添加到 ipvsadm.

#!/bin/bash

#vip
VIP=192.168.10.3
#集群端口
CPORT=80
#realserver ip
RS=("192.168.10.7" "192.168.10.8")
#realserver初始状态(在线)
RSTATUS=("1" "1")
#realserver权重
RW=("2" "1")
#realserver检测端口
RPORT=80
#curl连接超时时间
TIMEOUT=5
#指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
TYPE=g
#健康检查时间间隔
SLEEP_INTERVAL=5
#日志文件路径
LOG_FILE="./health_check.log"

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 $TIMEOUT http://$I &> /dev/null; then
if [ ${RSTATUS[$COUNT]} -eq 0 ]; then
add $I ${RW[$COUNT]}
[ $? -eq 0 ] && RSTATUS[$COUNT]=1 && echo "`date +%F-%H:%M:%S`,$I is up." >> $LOG_FILE
fi
else
if [ ${RSTATUS[$COUNT]} -eq 1 ]; then
del $I
[ $? -eq 0 ] && RSTATUS[$COUNT] = 0 && echo "`date +%F-%H:%M:%S`,$I is down." >> $LOG_FILE

fi
fi
let COUNT++
done
sleep $SLEEP_INTERVAL
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: