天天看點

LVS叢集RS健康狀态檢查

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

繼續閱讀