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

62次阅读
没有评论

共计 7986 个字符,预计需要花费 20 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 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 \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 $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=port\n

}

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 \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

}

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 \n\n\n***************************************************************\n

   echo -e Disabling the VIP – $vip on old master: $orig_master_host\n

   $stop_vip

   if [$? -eq 0]

      then

      echo Disabled the VIP successfully

   else

      echo Disabled the VIP failed

   fi

   echo -e ***************************************************************\n\n\n\n

fi

if [$command = start -o $command = status]

   then

   echo -e \n\n\n***************************************************************\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 ***************************************************************\n\n\n\n

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 切换用到脚本”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计7986字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)