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 {  

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";  

}  

 

 

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

MHA高可用集群内置IP漂移详解

 

执行命令:

#: ifconfig eth0:1 88.4.34.64 netmask 255.255.255.0 up

MHA高可用集群内置IP漂移详解

 

查看VIP是否生效

执行命令:

#: ping 88.4.34.64

写在/etc/rc.local里进行开机自动设置

 

5. 配置APP访问MHA高可用集群数据库IP

例如云管的配置文件->fit2cloud.properties文件,修改如下

MHA高可用集群内置IP漂移详解

修改为虚拟VIP地址即可,到此处即完成集群的全部过程。

注意:若是集群的机器有OpenStack的机器,则需要在OpenStack底层配置虚拟VIP网卡(集群内每一台都配同一张虚拟VIP网卡),光在机器上配置虚拟VIP可能会有其他问题。

相关文章: