Created
April 5, 2012 12:14
-
-
Save atomd-zz/2310502 to your computer and use it in GitHub Desktop.
MHA master_ip_failover script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
); | |
my $vip = '10.13.37.30/24'; # Virtual IP | |
my $key = "1"; | |
my $ssh_start_vip = "sudo /sbin/ifconfig eth0:$key $vip"; | |
my $ssh_stop_vip = "sudo /sbin/ifconfig eth0:$key down"; | |
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, | |
); | |
exit &main(); | |
sub main { | |
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n"; | |
if ( $command eq "stop" || $command eq "stopssh" ) { | |
# $orig_master_host, $orig_master_ip, $orig_master_port are passed. | |
# If you manage master ip address at global catalog database, | |
# invalidate orig_master_ip here. | |
my $exit_code = 1; | |
eval { | |
print "Disabling the 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" ) { | |
# all arguments are passed. | |
# If you manage master ip address at global catalog database, | |
# activate new_master_ip here. | |
# You can also grant write access (create user, set read_only=0, etc) here. | |
my $exit_code = 10; | |
eval { | |
print "Enabling the VIP - $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\@gentoo8 \" $ssh_start_vip \"`; | |
exit 0; | |
} | |
else { | |
&usage(); | |
exit 1; | |
} | |
} | |
# A simple system call that enable the VIP on the new master | |
sub start_vip() { | |
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`; | |
} | |
# A simple system call that disable the VIP on the old_master | |
sub stop_vip() { | |
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`; | |
} | |
sub usage { | |
"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"; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment