vim master_ip_online_change
#!/usr/bin/env perl
use strict;
use warnings FATAL =>'all';
use Getopt::Long;
my $vip = '192.168.1.123/24'; # Virtual IP
my $key = "0";
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
my $exit_code = 0;
my (
$command, $orig_master_is_new_slave, $orig_master_host,
$orig_master_ip, $orig_master_port, $orig_master_user,
$orig_master_password, $orig_master_ssh_user, $new_master_host,
$new_master_ip, $new_master_port, $new_master_user,
$new_master_password, $new_master_ssh_user,
);
GetOptions(
'command=s' => \$command,
'orig_master_is_new_slave' => \$orig_master_is_new_slave,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'orig_master_user=s' => \$orig_master_user,
'orig_master_password=s' => \$orig_master_password,
'orig_master_ssh_user=s' => \$orig_master_ssh_user,
'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,
'new_master_ssh_user=s' => \$new_master_ssh_user,
);
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 "\n\n\n***************************************************************\n";
print "Disabling the VIP - $vip on old master: $orig_master_host\n";
print "***************************************************************\n\n\n\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 "\n\n\n***************************************************************\n";
print "Enabling the VIP - $vip on new master: $new_master_host \n";
print "***************************************************************\n\n\n\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 $orig_master_ssh_user\@$orig_master_host " $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 $new_master_ssh_user\@$new_master_host " $ssh_start_vip "`;
}
# A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $orig_master_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=po
rt –new_master_host=host –new_master_ip=ip –new_master_port=port\n";
}
Sun Jul 23 09:39:09 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun Jul 23 09:39:09 2017 - [info] Reading application default configuration from /etc/mha/mha.conf..
Sun Jul 23 09:39:09 2017 - [info] Reading server configuration from /etc/mha/mha.conf..
Sun Jul 23 09:39:09 2017 - [info] Starting SSH connection tests..
Sun Jul 23 09:39:11 2017 - [debug]
Sun Jul 23 09:39:09 2017 - [debug] Connecting via SSH from root@192.168.56.100(192.168.56.100:22) to root@192.168.56.101(192.168.56.101:22)..
Sun Jul 23 09:39:10 2017 - [debug] ok.
Sun Jul 23 09:39:10 2017 - [debug] Connecting via SSH from root@192.168.56.100(192.168.56.100:22) to root@192.168.56.102(192.168.56.102:22)..
Sun Jul 23 09:39:11 2017 - [debug] ok.
Sun Jul 23 09:39:11 2017 - [debug]
Sun Jul 23 09:39:10 2017 - [debug] Connecting via SSH from root@192.168.56.101(192.168.56.101:22) to root@192.168.56.100(192.168.56.100:22)..
Sun Jul 23 09:39:10 2017 - [debug] ok.
Sun Jul 23 09:39:10 2017 - [debug] Connecting via SSH from root@192.168.56.101(192.168.56.101:22) to root@192.168.56.102(192.168.56.102:22)..
Sun Jul 23 09:39:11 2017 - [debug] ok.
Sun Jul 23 09:39:11 2017 - [debug]
Sun Jul 23 09:39:10 2017 - [debug] Connecting via SSH from root@192.168.56.102(192.168.56.102:22) to root@192.168.56.100(192.168.56.100:22)..
Warning: Permanently added '192.168.56.102' (RSA) to the list of known hosts.
Sun Jul 23 09:39:11 2017 - [debug] ok.
Sun Jul 23 09:39:11 2017 - [debug] Connecting via SSH from root@192.168.56.102(192.168.56.102:22) to root@192.168.56.101(192.168.56.101:22)..
Sun Jul 23 09:39:11 2017 - [debug] ok.
Sun Jul 23 09:39:11 2017 - [info] All SSH connection tests passed successfully.
检测masterha_check_repl --conf=/etc/mha/mha.conf
Sun Jul 23 10:14:11 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun Jul 23 10:14:11 2017 - [info] Reading application default configuration from /etc/mha/mha.conf..
Sun Jul 23 10:14:11 2017 - [info] Reading server configuration from /etc/mha/mha.conf..
Sun Jul 23 10:14:11 2017 - [info] MHA::MasterMonitor version 0.57.
Sun Jul 23 10:14:11 2017 - [info] Multi-master configuration is detected. Current primary(writable) master is 192.168.56.100(192.168.56.100:3306)
Sun Jul 23 10:14:11 2017 - [info] Master configurations are as below:
Master 192.168.56.100(192.168.56.100:3306), replicating from 192.168.56.101(192.168.56.101:3306)
Master 192.168.56.101(192.168.56.101:3306), replicating from 192.168.56.100(192.168.56.100:3306), read-only
Sun Jul 23 10:14:11 2017 - [info] GTID failover mode = 1
Sun Jul 23 10:14:11 2017 - [info] Dead Servers:
Sun Jul 23 10:14:11 2017 - [info] Alive Servers:
Sun Jul 23 10:14:11 2017 - [info] 192.168.56.100(192.168.56.100:3306)
Sun Jul 23 10:14:11 2017 - [info] 192.168.56.101(192.168.56.101:3306)
Sun Jul 23 10:14:11 2017 - [info] 192.168.56.102(192.168.56.102:3306)
Sun Jul 23 10:14:11 2017 - [info] Alive Slaves:
Sun Jul 23 10:14:11 2017 - [info] 192.168.56.101(192.168.56.101:3306) Version=5.7.14-log (oldest major version between slaves) log-bin:enabled
Sun Jul 23 10:14:11 2017 - [info] GTID ON
Sun Jul 23 10:14:11 2017 - [info] Replicating from 192.168.56.100(192.168.56.100:3306)
Sun Jul 23 10:14:11 2017 - [info] Primary candidate for the new Master (candidate_master is set)
Sun Jul 23 10:14:11 2017 - [info] 192.168.56.102(192.168.56.102:3306) Version=5.7.14-log (oldest major version between slaves) log-bin:enabled
Sun Jul 23 10:14:11 2017 - [info] GTID ON
Sun Jul 23 10:14:11 2017 - [info] Replicating from 192.168.56.100(192.168.56.100:3306)
Sun Jul 23 10:14:11 2017 - [info] Not candidate for the new Master (no_master is set)
Sun Jul 23 10:14:11 2017 - [info] Current Alive Master: 192.168.56.100(192.168.56.100:3306)
Sun Jul 23 10:14:11 2017 - [info] Checking slave configurations..
Sun Jul 23 10:14:11 2017 - [info] Checking replication filtering settings..
Sun Jul 23 10:14:11 2017 - [info] binlog_do_db= , binlog_ignore_db=
Sun Jul 23 10:14:11 2017 - [info] Replication filtering check ok.
Sun Jul 23 10:14:11 2017 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
Sun Jul 23 10:14:11 2017 - [info] Checking SSH publickey authentication settings on the current master..
Sun Jul 23 10:14:11 2017 - [info] HealthCheck: SSH to 192.168.56.100 is reachable.
Sun Jul 23 10:14:11 2017 - [info]
192.168.56.100(192.168.56.100:3306) (current master)
+--192.168.56.101(192.168.56.101:3306)
+--192.168.56.102(192.168.56.102:3306)
Sun Jul 23 10:14:11 2017 - [info] Checking replication health on 192.168.56.101..
Sun Jul 23 10:14:11 2017 - [info] ok.
Sun
Jul 23 10:14:11 2017 - [info] Checking replication health on 192.168.56.102..
Sun Jul 23 10:14:11 2017 - [info] ok.
Sun Jul 23 10:14:11 2017 - [info] Checking master_ip_failover_script status:
Sun Jul 23 10:14:11 2017 - [info] /usr/local/scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.56.100 --orig_master_ip=192.168.56.100 --orig_master_port=3306
IN SCRIPT TEST====/sbin/ifconfig eth0:0 down==/sbin/ifconfig eth0:0 192.168.56.123/24===
Checking the Status of the script.. OK
Sun Jul 23 10:14:11 2017 - [info] OK.
Sun Jul 23 10:14:11 2017 - [warning] shutdown_script is not defined.
Sun Jul 23 10:14:11 2017 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.