生産中,我們需要檢測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,如需轉載請自行聯系原作者