天天看点

Keepalive异常小计

环境:

OS:Centos 6.3 x86_64

Keepalived:1.2.8

现象:使用killall -g 导致 master不能释放vip,slave偶尔能接管vip,偶尔不能接管vip;

最终强制去掉master vip:

ip addr del 192.168.1.249/32 dev eth0

man killall -g 的解释为: Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found.

配置部分:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<code>global_defs {</code>

<code>   </code><code>router_id MM</code>

<code>}</code>

<code>vrrp_instance VI_1 {</code>

<code>    </code><code>state BACKUP</code>

<code>    </code><code>interface eth0</code>

<code>    </code><code>virtual_router_id 232</code>

<code>    </code><code>priority 90</code>

<code>    </code><code>advert_int 1</code>

<code>    </code><code>nopreempt</code>

<code>    </code><code>authentication {</code>

<code>        </code><code>auth_type PASS</code>

<code>        </code><code>auth_pass Root123</code>

<code>    </code><code>}</code>

<code>    </code><code>virtual_ipaddress {</code>

<code>        </code><code>192.168.1.249</code>

<code>        </code><code>notify_master </code><code>"/usr/local/sbin/XXXXXXX"</code>

<code>        </code><code>notify_backup </code><code>"/usr/local/sbin/XXXXXXX"</code>

<code>        </code><code>notify_fault </code><code>"/usr/local/sbin/XXXXXXX"</code>

使用killall keepalived 能正常接管vip;

查看keepalived本身的 keepalived脚本:

是采用 killproc keepalived 这种方式结束掉keepalived进城的,

具体原因不知,在此仅作记录!

最后只能改用官方的脚本:

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

<code>#!/bin/sh</code>

<code>#</code>

<code># keepalived   High Availability monitor built upon LVS and VRRP</code>

<code># chkconfig:   - 86 14</code>

<code># description: Robust keepalive facility to the Linux Virtual Server project \</code>

<code>#              with multilayer TCP/IP stack checks.</code>

<code>### BEGIN INIT INFO</code>

<code># Provides: keepalived</code>

<code># Required-Start: $local_fs $network $named $syslog</code>

<code># Required-Stop: $local_fs $network $named $syslog</code>

<code># Should-Start: smtpdaemon httpd</code>

<code># Should-Stop: smtpdaemon httpd</code>

<code># Default-Start:</code>

<code># Default-Stop: 0 1 2 3 4 5 6</code>

<code># Short-Description: High Availability monitor built upon LVS and VRRP</code>

<code># Description:       Robust keepalive facility to the Linux Virtual Server</code>

<code>#                    project with multilayer TCP/IP stack checks.</code>

<code>### END INIT INFO</code>

<code># Source function library.</code>

<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>

<code>exec</code><code>=</code><code>"/usr/sbin/keepalived"</code>

<code>prog=</code><code>"keepalived"</code>

<code>config=</code><code>"/etc/keepalived/keepalived.conf"</code>

<code>[ -e </code><code>/etc/sysconfig/</code><code>$prog ] &amp;&amp; . </code><code>/etc/sysconfig/</code><code>$prog</code>

<code>lockfile=</code><code>/var/lock/subsys/</code><code>$prog</code>

<code>start() {</code>

<code>    </code><code>[ -x $</code><code>exec</code> <code>] || </code><code>exit</code> <code>5</code>

<code>    </code><code>[ -e $config ] || </code><code>exit</code> <code>6</code>

<code>    </code><code>echo</code> <code>-n $</code><code>"Starting $prog: "</code>

<code>    </code><code>daemon $</code><code>exec</code> <code>$KEEPALIVED_OPTIONS</code>

<code>    </code><code>retval=$?</code>

<code>    </code><code>echo</code>

<code>    </code><code>[ $retval -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>touch</code> <code>$lockfile</code>

<code>    </code><code>return</code> <code>$retval</code>

<code>stop() {</code>

<code>    </code><code>echo</code> <code>-n $</code><code>"Stopping $prog: "</code>

<code>    </code><code>killproc $prog</code>

<code>    </code><code>[ $retval -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>rm</code> <code>-f $lockfile</code>

<code>restart() {</code>

<code>    </code><code>stop</code>

<code>    </code><code>start</code>

<code>reload() {</code>

<code>    </code><code>echo</code> <code>-n $</code><code>"Reloading $prog: "</code>

<code>    </code><code>killproc $prog -1</code>

<code>force_reload() {</code>

<code>    </code><code>restart</code>

<code>rh_status() {</code>

<code>    </code><code>status $prog</code>

<code>rh_status_q() {</code>

<code>    </code><code>rh_status &amp;&gt;</code><code>/dev/null</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>    </code><code>start)</code>

<code>        </code><code>rh_status_q &amp;&amp; </code><code>exit</code> <code>0</code>

<code>        </code><code>$1</code>

<code>        </code><code>;;</code>

<code>    </code><code>stop)</code>

<code>        </code><code>rh_status_q || </code><code>exit</code> <code>0</code>

<code>    </code><code>restart)</code>

<code>    </code><code>reload)</code>

<code>        </code><code>rh_status_q || </code><code>exit</code> <code>7</code>

<code>    </code><code>force-reload)</code>

<code>        </code><code>force_reload</code>

<code>    </code><code>status)</code>

<code>        </code><code>rh_status</code>

<code>    </code><code>condrestart|try-restart)</code>

<code>        </code><code>restart</code>

<code>    </code><code>*)</code>

<code>        </code><code>echo</code> <code>$</code><code>"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"</code>

<code>        </code><code>exit</code> <code>2</code>

<code>esac</code>

<code>exit</code> <code>$?</code>

本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1300090,如需转载请自行联系原作者

继续阅读