環境:
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 ] && . </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 ] && </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 ] && </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 &></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 && </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,如需轉載請自行聯系原作者