共计 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 {
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 {
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 行业资讯频道!