生产中,我们需要检测RS状态,当RS服务异常时,应该将RS移出集群,而当RS恢复之后,再将RS加入到集群中。下面是脚本内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/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从集群中删除
本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1846016,如需转载请自行联系原作者