MHA故障切换脚本master_ip_failover结合VIP:
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
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
|
#!/usr/bin/env perl
use
strict;
use
warnings FATAL =>
'all'
;
use
Getopt::Long;
my
(
$command
,
$ssh_user
,
$orig_master_host
,
$orig_master_ip
,
$orig_master_port
,
$new_master_host
,
$new_master_ip
,
$new_master_port
,
$new_master_user
,
$new_master_password
,
$app_vip
,
$netmask
,
$interface
,
);
GetOptions(
'command=s'
=> \
$command
,
'ssh_user=s'
=> \
$ssh_user
,
'orig_master_host=s'
=> \
$orig_master_host
,
'orig_master_ip=s'
=> \
$orig_master_ip
,
'orig_master_port=i'
=> \
$orig_master_port
,
'new_master_host=s'
=> \
$new_master_host
,
'new_master_ip=s'
=> \
$new_master_ip
,
'new_master_port=i'
=> \
$new_master_port
,
'new_master_user=s'
=> \
$new_master_user
,
'new_master_password=s'
=> \
$new_master_password
,
'app_vip=s'
=> \
$app_vip
,
'netmask=i'
=> \
$netmask
,
'interface=s'
=> \
$interface
,
);
my
$ssh_start_vip
=
"sudo ip addr add $app_vip dev $interface"
;
my
$ssh_stop_vip
=
"sudo ip addr delete $app_vip dev $interface"
;
my
$ssh_flush_arp
=
"sudo arping -c 4 -A -I $interface $app_vip"
;
exit
&main
();
sub
main {
print
"\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n"
;
if
(
$command
eq
"stop"
||
$command
eq
"stopssh"
) {
my
$exit_code
= 1;
eval
{
print
"Disabling the app_vip on old master: $orig_master_host \n"
;
&stop_vip
();
$exit_code
= 0;
};
if
($@) {
warn
"Got Error: $@\n"
;
exit
$exit_code
;
}
exit
$exit_code
;
}
elsif
(
$command
eq
"start"
) {
my
$exit_code
= 10;
eval
{
print
"Enabling the app_vip on the new master - $new_master_host \n"
;
&start_vip
();
$exit_code
= 0;
};
if
($@) {
warn
$@;
exit
$exit_code
;
}
exit
$exit_code
;
}
elsif
(
$command
eq
"status"
) {
print
"Checking the Status of the script.. OK \n"
;
#`ssh $ssh_user\@cluster1 \" $ssh_start_vip \"`;
exit
0;
}
else
{
&usage
();
exit
1;
}
}
# A simple system call that enable the app_vip on the new master
sub
start_vip() {
`ssh
$ssh_user
\@
$new_master_host
\"
$ssh_start_vip
\"`;
`ssh
$ssh_user
\@
$new_master_host
\"
$ssh_flush_arp
\"`;
}
# A simple system call that disable the app_vip on the old_master
sub
stop_vip() {
return
0
unless
(
$ssh_user
);
`ssh
$ssh_user
\@
$orig_master_host
\"
$ssh_stop_vip
\"`;
}
sub
usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n"
;
}
|
本文转自 emma_cql 51CTO博客,原文链接:http://blog.51cto.com/chenql/1939111