加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MHA如何实现VIP切换用到脚本

发布时间:2022-01-12 11:50:22 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下MHA如何实现VIP切换用到脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 在MHA Manager端配置中,如果实现MHA的vip故障切换需要在配置文件/etc/ma
       小编给大家分享一下MHA如何实现VIP切换用到脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
 
      在MHA Manager端配置中,如果实现MHA的vip故障切换需要在配置文件/etc/masterha/app1/app1.cnf 中启用下面三个参数:
 
 
master_ip_failover_script= /etc/masterha/app1/master_ip_failover   #master failover时执行
#shutdown_script= /etc/masterha/power_manager
report_script= /etc/masterha/app1/send_report    #master failover时执行
master_ip_online_change_script=/etc/masterha/app1/master_ip_online_change   #master switchover时执行 MHA配置见: http://blog.csdn.net/lichangzai/article/details/50470771
 
脚本具体内容如下:
 
master_ip_failover(perl)脚本
 
[root@host8 app1]# cat master_ip_failover
 
#!/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
 
);
 
my $vip = '10.1.5.21/24';  # Virtual IP
 
my $key = "1";
 
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
 
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
 
my $exit_code = 0;
 
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 "nnIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===nn";
 
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 "nnn***************************************************************n";
 
            print "Disabling the VIP - $vip on old master: $orig_master_hostn";
 
            print "***************************************************************nnnn";
 
&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 "nnn***************************************************************n";
 
            print "Enabling the VIP - $vip on new master: $new_master_host n";
 
            print "***************************************************************nnnn";
 
&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@$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 $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 {
 
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=portn";
 
}
 
master_ip_online_change(perl)脚本
[root@host8 app1]# cat master_ip_online_change
 
#!/usr/bin/env perl
 
use strict;
 
use warnings FATAL =>'all';
 
use Getopt::Long;
 
my $vip = '10.1.5.21/24';  # Virtual IP
 
my $key = "1";
 
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 "nnIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===nn";
 
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 "nnn***************************************************************n";
 
            print "Disabling the VIP - $vip on old master: $orig_master_hostn";
 
            print "***************************************************************nnnn";
 
&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 "nnn***************************************************************n";
 
            print "Enabling the VIP - $vip on new master: $new_master_host n";
 
            print "***************************************************************nnnn";
 
&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=portn";
 
}
 
master_ip_online_change(shell)脚本
#以下是重用写的master_ip_online_change(shell)脚本
 
[root@host8 app1]# cat master_ip_online_change.sh
 
#/bin/bash
 
source /root/.bash_profile
 
vip=`echo '10.1.5.21/24'`  # Virtual IP
 
key=`echo '1'`
 
command=`echo "$1" | awk -F = '{print $2}'`
 
orig_master_host=`echo "$2" | awk -F = '{print $2}'`
 
new_master_host=`echo "$7" | awk -F = '{print $2}'`
 
orig_master_ssh_user=`echo "${12}" | awk -F = '{print $2}'`
 
new_master_ssh_user=`echo "${13}" | awk -F = '{print $2}'`
 
stop_vip=`echo "ssh root@$orig_master_host /sbin/ifconfig  eth0:$key  down"`
 
start_vip=`echo "ssh root@$new_master_host /sbin/ifconfig  eth0:$key  $vip"`
 
if [ $command = 'stop' ]
 
   then
 
   echo -e "nnn***************************************************************n"
 
   echo -e "Disabling the VIP - $vip on old master: $orig_master_hostn"
 
   $stop_vip
 
   if [ $? -eq 0 ]
 
      then
 
      echo "Disabled the VIP successfully"
 
   else
 
      echo "Disabled the VIP failed"
 
   fi
 
   echo -e "***************************************************************nnnn"
 
fi
 
if [ $command = 'start' -o $command = 'status' ]
 
   then
 
   echo -e "nnn***************************************************************n"
 
   echo -e "Enabling the VIP - $vip on new master: $new_master_host n"
 
   $start_vip
 
   if [ $? -eq 0 ]
 
      then
 
      echo "Enabled the VIP successfully"
 
   else
 
      echo "Enabled the VIP failed"
 
   fi
 
   echo -e "***************************************************************nnnn"
 
fi
 
send_report(shell)脚本
[root@host8 app1]# cat send_report
 
#/bin/bash
 
source /root/.bash_profile
 
orig_master_host=`echo "$1" | awk -F = '{print $2}'`
 
new_master_host=`echo "$2" | awk -F = '{print $2}'`
 
new_slave_hosts=`echo "$3" | awk -F = '{print $2}'`
 
subject=`echo "$4" | awk -F = '{print $2}'`
 
body=`echo "$5" | awk -F = '{print $2}'`
 
#判断日志结尾是否有successfully,有则表示切换成功,成功与否都发邮件。
 
tac /etc/masterha/app1/manager.log | sed -n 2p | grep 'successfully' > /dev/null
 
if [ $? -eq 0 ]
 
    then
 
    echo -e "MHA $subject 主从切换成功n master:$orig_master_host --> $new_master_host n $body n 当前从库:$new_slave_hosts" | mutt
 
 -s "MySQL实例宕掉,MHA $subject 切换成功" -- 94097532@qq.com
 
else
 
    echo -e "MHA $subject 主从切换失败n master:$orig_master_host --> $new_master_host n $body" | mutt -s "MySQL实例宕掉,MHA $subje
 
ct 切换失败" -- 94097532@qq.com
 
fi
 
以上是“MHA如何实现VIP切换用到脚本”这篇文章的所有内容,感谢各位的阅读!

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读