生产中,我们需要检测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
<code>#!/bin/bash</code>
<code>VIP=192.168.10.3</code>
<code>##集群服务端口号</code>
<code>CPORT=80</code>
<code>RS=(192.168.10.7 192.168.10.8)</code>
<code>###RS主机的状态,1表示状态正常</code>
<code>RSTATUS=(1 1)</code>
<code>#权重</code>
<code>RW=(2 1)</code>
<code>###RS主机上实际的服务端口</code>
<code>RPORT=80</code>
<code>###lVS的模式,这里以DR模式为例</code>
<code>TYPE=g</code>
<code>###add函数表示将RS加入到集群,del函数表示将RS移出集群</code>
<code>add() {</code>
<code>ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2</code>
<code>[ $? -</code><code>eq</code> <code>0 ] && </code><code>return</code> <code>0 || </code><code>return</code> <code>1</code>
<code>}</code>
<code>del() {</code>
<code>ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT</code>
<code>while</code> <code>:; </code><code>do</code>
<code>let</code> <code>COUNT=0</code>
<code>for</code> <code>I </code><code>in</code> <code>${RS[*]}; DO</code>
<code>if</code> <code>curl --connect-timeout 1 http:</code><code>//</code><code>$I &> </code><code>/dev/null</code><code>; </code><code>then</code>
<code>if</code> <code>[ ${RSTATUS[COUNT]} -</code><code>eq</code> <code>0 ];</code><code>then</code>
<code>add $I ${RW[COUNT]} </code>
<code>[ $? -</code><code>eq</code> <code>0 ] && RSTATUS[$COUNT]=1</code>
<code>fi</code>
<code>else</code>
<code>if</code> <code>[ ${RSTATUS[COUNT]} -</code><code>eq</code> <code>1 ]; </code><code>then</code>
<code>del $I</code>
<code>[ $? -</code><code>eq</code> <code>0 ] && RSTATUS[$COUNT]=0</code>
<code>let</code> <code>COUNT++</code>
<code>done</code>
<code>sleep</code> <code>5</code>
脚本思路:写了一个循环,每隔5秒钟去检测一次RS的状态,
1、如果RS状态正常,而RS本身在集群中,那么什么也不做,如果RS不在集群中,则将RS加入到集群中
2、如果RS状态异常,而RS本身在集群中,那么将RS从集群中删除
本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1846016,如需转载请自行联系原作者