天天看点

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,如需转载请自行联系原作者

继续阅读