zoukankan      html  css  js  c++  java
  • mysql高可用架构 -> MHA配置VIP漂移-05

    VIP漂移的两种方式

    1通过keepalived的方式,管理虚拟IP的漂移

    2)通过MHA自带脚本方式,管理虚拟IP的漂移

    MHA脚本方式

    虚拟ip漂移的脚本下载地址 -> wget http://download.driverzeng.com/master_ip_failover

    如果是wget下载的脚本,需要转换格式:   [root@db03 mha]#  dos2unix master_ip_failover

    脚本内容如下

    [root@db03 ~]# cat /usr/local/bin/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.0.0.55/24';
    my $key = '0';
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
    
    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 "
    
    IN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===
    
    ";
    
        if ( $command eq "stop" || $command eq "stopssh" ) {
    
            my $exit_code = 1;
            eval {
                print "Disabling the VIP on old master: $orig_master_host 
    ";
                &stop_vip();
                $exit_code = 0;
            };
            if ($@) {
                warn "Got Error: $@
    ";
                exit $exit_code;
            }
            exit $exit_code;
        }
        elsif ( $command eq "start" ) {
    
            my $exit_code = 10;
            eval {
                print "Enabling the VIP - $vip on the new master - $new_master_host 
    ";
                &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 
    ";
            exit 0;
        }
        else {
            &usage();
            exit 1;
        }
    }
    
    sub start_vip() {
        `ssh $ssh_user@$new_master_host " $ssh_start_vip "`;
    }
    sub stop_vip() {
         return 0  unless  ($ssh_user);
        `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=port --new_master_host=host --new_master_ip=ip --new_master_port=port
    ";
    }
    

     

    编辑脚本

    #根据配置文件中脚本路径编辑
    [root@mysql-db03 ~]# vim /etc/mha/master_ip_failover
    
    #修改以下几行内容
    my $vip = '10.0.0.55/24';
    my $key = '0';
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
    
    #添加执行权限,否则mha无法启动
    [root@mysql-db03 ~]# chmod +x /etc/mha/master_ip_failover

    修改配置文件

    #编辑配置文件
    [root@mysql-db03 ~]# vim /etc/mha/app1.cnf
    
    #在[server default]标签下添加
    [server default]
    master_ip_failover_script=/usr/local/bin/master_ip_failover   //添加使用MHA自带脚本

    手动绑定VIP

    #绑定vip
    [root@mysql-db01 ~]# ifconfig eth0:0 10.0.0.55/24
    [root@db01 bin]# ifconfig eth0:0 down //解绑vip #查看vip [root@mysql-db01 ~]# ip a |grep eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 10.0.0.51/24 brd 10.0.0.255 scope global eth0 inet 10.0.0.55/24 brd 10.0.0.255 scope global secondary eth0:0

      

    测试ip漂移

    #登录db02
    [root@mysql-db02 ~]# mysql
    
    #查看slave信息
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.0.0.51                    //主库是51
                      Master_User: rep
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000007
              Read_Master_Log_Pos: 191
                   Relay_Log_File: mysql-db02-relay-bin.000002
                    Relay_Log_Pos: 361
            Relay_Master_Log_File: mysql-bin.000007
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                
    #停掉主库
    [root@mysql-db01 ~]# systemctl stop mysqld                 //停掉主库Mysql测试
    
    #在db03上查看从库slave信息
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.0.0.52                   //主库切换到52
                      Master_User: rep
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000006
              Read_Master_Log_Pos: 191
                   Relay_Log_File: mysql-db03-relay-bin.000002
                    Relay_Log_Pos: 361
            Relay_Master_Log_File: mysql-bin.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                
    #在db01上查看vip信息
    [root@mysql-db01 ~]# ip a |grep eth0     //vip没有了
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.0.0.51/24 brd 10.0.0.255 scope global eth0
    
    #在db02上查看vip信息
    [root@mysql-db02 ~]# ip a |grep eth0    //db02出现vip55
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        inet 10.0.0.52/24 brd 10.0.0.255 scope global eth0
        inet 10.0.0.55/24 brd 10.0.0.255 scope global secondary eth0:0
    
    nohup masterha_manager
    --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
    //后台运行mha

    masterha_check_repl --conf=/etc/mha/app1.cnf //测试mha复制 [root@db03 mha]# masterha_check_status --conf=/etc/mha/app1.cnf //检测mha状态,db03查看主库是否切换52 app1 (pid:31788) is running(0:PING_OK), master:10.0.0.52
  • 相关阅读:
    如何关闭内存自动释放池ARC
    你怀疑过“温水煮青蛙”的故事吗
    程序员应该加入的3个QQ群
    简述Oracle 11g 新特性
    ViewState、UpdatePanel及控件OnPre之间的纠葛
    今天,我看到一组图解释“ 什么是博士?”
    Java将何去何从
    给新手朋友 推荐几本书(从C#入门到SQL及设计模式)
    最新版 智能电脑键盘屏幕全记录 免费下载
    C#中两个问号和一个问号
  • 原文地址:https://www.cnblogs.com/tim1blog/p/9877032.html
Copyright © 2011-2022 走看看