IP漂移(前面集群部署请参考上一博文)
1. 在 MHA 管理节点上编辑配置文件:
[server default]
#mha用户
user=root
password=Fit2cloud2015!
#工作目录
manager_workdir=/opt/mysql_mha
manager_log=/opt/mysql_mha/manager.log
remote_workdir=/opt/mysql_mha
#添加使用MHA自带脚本(用于虚拟vip漂移)
master_ip_failover_script=/opt/mhaconfig/master_ip_failover
#master switchover时执行
master_ip_online_change_script=/opt/mhaconfig/master_ip_online_change
#master failover时执行(发监控邮件,这条根据需求可以注释,若虚机未安装mutt插件)
report_script=/opt/mhaconfig/send_report
#SSH
ssh_user=root
#复制用户
repl_user=root
repl_password=Fit2cloud2015!
ping_interval=1
#binlog地址
master_binlog_dir=/var/lib/mysql
[server1]
hostname=88.4.34.60
candidate_master=1
[server2]
hostname=88.4.34.61
no_master=1
[server3]
hostname=88.4.34.62
candidate_master=1
2. 配置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 = '88.4.34.64/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 ([email protected]) {
warn "Got Error: [email protected]\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 ([email protected]) {
warn [email protected];
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";
}
3. 配置master_ip_online_change文件:
#/bin/bash
source /root/.bash_profile
vip=`echo '88.4.34.64/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 [email protected]$orig_master_host /sbin/ifconfig eth0:$key down"`
start_vip=`echo "ssh [email protected]$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
4. 配置VIP:
找到目前的主数据库服务器,例如我这边是60节点,在机器上输入:
# 通过ifconfig找到当前活动网卡,例如我这边是eth0
执行命令:
#: ifconfig eth0:1 88.4.34.64 netmask 255.255.255.0 up
查看VIP是否生效
执行命令:
#: ping 88.4.34.64
(写在/etc/rc.local里进行开机自动设置)
5. 配置APP访问MHA高可用集群数据库IP
例如云管的配置文件->fit2cloud.properties文件,修改如下
修改为虚拟VIP地址即可,到此处即完成集群的全部过程。
注意:若是集群的机器有OpenStack的机器,则需要在OpenStack底层配置虚拟VIP网卡(集群内每一台都配同一张虚拟VIP网卡),光在机器上配置虚拟VIP可能会有其他问题。