mysql高可用mha解决方案

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5开始的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。MHA 适合任何存储引擎, 只要能主从复制的存储引擎它都支持,不限于支持事物的 innodb 引擎。

MHA 工作原理

相对比其它HA软件,MHA的目的在于维持 MySQL Replication 中 Master 库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致然后从中选择一个充当新的Master,并将其它Slave指向它

从宕机崩溃的master保存二进制日志事件(binlog events);

识别含有最新更新的slave;

应用差异的中继日志(relay log)到其他的slave;

应用从master保存的二进制日志事件(binlog events);

提升一个slave为新的master;

使其他的slave连接新的master进行复制;

二、案例背后核心技术

1、熟悉MHA高可用的原理和部署
2、掌握MySQL数据库集群搭建
3、熟悉MySQL主从复制的模式和搭建(基于GTIDs)

三、今日场景

随着业务功能的逐步完善,现有MySQL数据库架构虽然可以保障数据的相对可靠性,但是不能够完全保障服务的可用性。当我们的主库挂掉后,mysql服务不能立马切换到从服务器。所以,需要在现有架构的基础上扩展和升级,进而在保障数据的可靠性的同时能够保障服务的可用性。

任务要求


1、使用三台服务器搭建mysql的复制组
2、使用MHA管理复制组,当master挂掉后,会立马提升一台slave作为新的master

任务拆解

  • 搭建MySQL的复制组(M-S1-S1,并联架构)

  • 安装MHA相关软件来管理复制组

    理论储备

    一、MHA简介

    MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在较大程度上保证数据的一致性,以达到真正意义上的高可用。

    二、MHA工作原理

  1. 当master出现故障时,通过对比slave之间I/O线程读取master上binlog的位置,选取最接近的slave做为最新的slave(latest slave)。

  2. 其它slave通过与latest slave对比生成差异中继日志,并应用。

  3. 在latest slave上应用从master保存的binlog,同时将latest slave提升为master。

  4. 最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制.

    三、MHA组件

    1、MHA相关组件

  • MHA Manager(管理节点)
    MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。

  • MHA Node(数据节点)
    MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

    2、MHA组件介绍

  • MHA Manager

运行一些工具,比如masterha_manager工具实现自动监控MySQL Master和实现master故障切换,其它工具手动实现master故障切换、在线mater转移、连接检查等等。一个Manager可以管理多 个master-slave集群

  • MHA Node

部署在所有运行MySQL的服务器上,无论是master还是slave。主要有三个作用:
1)保存二进制日志

如果能够访问故障master,会拷贝master的二进制日志

2)应用差异中继日志
从拥有最新数据的slave上生成差异中继日志,然后应用差异日志。
3)清除中继日志

在不停止SQL线程的情况下删除中继日志

3、相关工具介绍

㈠ Manager工具
工具说明
masterha_check_ssh检查MHA的SSH配置
masterha_check_repl检查MySQL复制
masterha_manager启动MHA
masterha_check_status检测当前MHA运行状态
masterha_master_monitor监测master是否宕机
masterha_master_switch控制故障转移(自动或手动)
masterha_conf_host添加或删除配置的server信息
㈡ Node工具
工具说明
save_binary_logs保存和复制master的二进制日志
apply_diff_relay_logs识别差异的中继日志事件并应用于其它slave
filter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs清除中继日志(不会阻塞SQL线程)

注意:Node这些工具通常由MHA Manager的脚本触发,无需人手操作*。**
#任务解决方案

一、MHA部署

1、部署规划

角色IP主机名server-id功能备注
MHA-Manager192.168.80.40mgr.heima.cc管理节点
MHA-Node(Master)192.168.80.11master.heima.cc10数据节点
MHA-Node(Slave1)192.168.80.12slave1.heima.cc20数据节点
MHA-Node(Slave2)192.168.80.13slave2.heima.cc30数据节点

2、系统和软件版本

系统版本MySQL版本MHA版本
CentOS 7.6MySQL-5.7.25mha4mysql-manager-0.57 mha4mysql-node-0.57

3、系统环境初始化

㈠ 修改主机名和hosts
# hostnamectl set-hostname master
# hostnamectl set-hostname slave1 
# hostnamectl set-hostname slave2 
# hostnamectl set-hostname mgr
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.11    node1  master
192.168.80.12    node2  slave1
192.168.80.13    node3  slave2
192.168.80.40    node4     mgr
㈡ 关闭防火墙和selinux
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# sed -i '/SELINUX=enforcing/cSELINUX=disabled' /etc/selinux/config
㈢ 关闭NetworkManager服务
# systemctl stop NetworkManager
# systemctl disable NetworkManager
㈣ 配置yum源

**说明:**每台服务器都需要配置!
**方案一:**分别配置 aliyun、epel 和本地源;

# rpm -ivh /soft/mha/epel-release-latest-7.noarch.rpm
# cat server.repo 
[local]
name=local yum
baseurl=file:///mnt
enabled=1
gpgcheck=0
[aliyun]
name=this is aliyun yum
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0

**方案二:**配置自建仓库,提前准备好软件包
注意:如果没有网络可以使用本地仓库,提前下载好包

# cat server.repo 
[local]
name=local yum
baseurl=file:///mnt
enabled=1
gpgcheck=0
[mha]
name=mha soft
baseurl=file:///soft/mha/mha-yum
enabled=1
gpgcheck=0
说明:
1)每台服务器都需要配置该文件
2)每台服务器都需要/soft/mha/mha-yum目录来保存相应的软件包
㈤ 安装依赖包

注意:所有服务器均需要安装

yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-ParallelForkManager perl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-TestMock-LWP.noarch perl-LWP-Authen-Negotiate.noarch perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

4、部署MySQL复制环境

㈠ MySQL部署规划
安装目录数据库目录配置文件套接字文件端口
/usr/local/mysql/data/mysql/etc/my.cnf/var/lib/mysql/mysql.sock3306
㈡ 搭建主从复制
① 创建配置文件
  • master

    [root@master ~]# cat <<EOT>/etc/my.cnf
    [mysqld]
    datadir=/data/mysql
    socket=/var/lib/mysql/mysql.sock
    port=3306
    innodb_file_per_table=1
    server-id=1
    character_set_server=utf8
    gtid-mode=on
    log-slave-updates=1
    enforce-gtid-consistency
    [client]
    default_character-set=utf8
    EOT
    
  • slave1

    [root@slave1 ~]# 
    cat <<EOT>/etc/my.cnf
    [mysqld]
    datadir=/data/mysql
    log-error=/data/mysql/slave1.err
    relay-log=/data/mysql/relaylog
    log-bin=/data/mysql/binlog
    server-id=20
    log-slave-updates=1
    gtid-mode=on
    enforce-gtid-consistency
    skip-slave-start
    EOT
    
  • slave2

    [root@slave2 ~]# 
    cat <<EOT>/etc/my.cnf
    [mysqld]
    datadir=/data/mysql
    log-error=/data/mysql/slave2.err
    relay-log=/data/mysql/relaylog
    log-bin=/data/mysql/binlog
    server-id=30
    log-slave-updates=1
    gtid-mode=on
    enforce-gtid-consistency
    skip-slave-start
    EOT
    
    ② 同步数据到从服务器
    [root@master ~]# rsync -av /data/mysql 192.168.80.12:/usr/local/
    [root@master ~]# rsync -av /data/mysql 192.168.80.13:/usr/local/
    注意:
    保证两台slave服务器上有mysql用户
    
    ③ 删除auto.cnf文件
    [root@master data]# rm -f auto.cnf 
    [root@slave1 data]# rm -f auto.cnf 
    [root@slave2 data]# rm -f auto.cnf
    注意:三台服务器都删除
    
    ④ 启动数据库
    [root@master ~]# service mysql start
    [root@slave1 ~]# service mysql start
    [root@slave2 ~]# service mysql start
    
    ⑤ master创建复制用户
    create user 'slave'@'%' identified with mysql_native_password by 'Ykzx@2352';
    grant replication slave on *.* to 'slave'@'%';
    flush privileges;
    

说明:创建MHA的监控用户和密码,为后续做准备

create user 'mha'@'%' identified  with mysql_native_password by 'Ykzx@2352';
grant all privileges on *.* to 'mha'@'%';
flush privileges;
⑥ slave上配置同步信息

注意:两台slave都需要配置, RELAY_LOG_FILE = ‘relay_log_name’ RELAY_LOG_POS = relay_log_pos, 测试故障切换mysql主会切换到另外一个台从

change master to master_host='node1',master_port=3306,master_user='slave',master_password='Ykzx@2352',master_auto_position=1;
start slave;
⑦ 测试验证

5、MHA软件安装

㈠ 不同节点安装软件

说明:在所有节点安装 mha-node 软件包,在 mha 管理端再安装 mha-manager 软件包

[root@mgr ~]# yum –y install mha4mysql-node-0.57-0.el7.noarch.rpm
[root@master ~]# yum –y install mha4mysql-node-0.57-0.el7.noarch.rpm
[root@slave1 ~]# yum -y install mha4mysql-node-0.57-0.el7.noarch.rpm
[root@slave2 ~]# yum –y install mha4mysql-node-0.57-0.el7.noarch.rpm
[root@mgr ~]# yum –y install mha4mysql-manager-0.57-0.el7.noarch.rpm
㈡ 配置ssh互信

说明:

  1. 在生产环境中几乎都是禁止root远程登陆服务器的,所以ssh免密码登陆要在admin用户下进行配置,这是处于安全角度考虑出发。

  2. admin用户可以是任意普通用户

  3. 该普通用户用于mha的管理节点远程访问mysql复制组中的所有主机,完成一些其他工作

    ① 所有机器创建admin用户
    # useradd admin
    # echo 123|passwd --stdin admin
    
    ② 配置mgr主机到其他主机的admin用户互信
    mgr端:
    [root@mgr ~]# su - admin
    [admin@mgr ~]$ ssh-keygen -P "" -f ~/.ssh/id_rsa
    [admin@mgr ~]$ cd .ssh/
    [admin@mgr .ssh]$ ls
    id_rsa  id_rsa.pub
    [admin@mgr .ssh]$ mv id_rsa.pub authorized_keys
    [admin@mgr .ssh]$ for i in 11 12 13;do scp -r ../.ssh/ 192.168.80.$i:~/;done
    

测试免密登录:
[admin@mgr .ssh]$ ssh 192.168.80.11
[admin@mgr .ssh]$ ssh 192.168.80.12
[admin@mgr .ssh]$ ssh 192.168.80.13

㈢ 配置admin用户的sudo权限
  • 配置admin用户执行sudo命令权限

    [root@master ~]# cat <<EOT> /etc/sudoers.d/admin
    #User_Alias  表示具有sudo权限的用 户 列表; Host_Alias表示主机的列表
    User_Alias MYSQL_USERS = admin
    #Runas_Alias  表示用户以什么身份登录
    Runas_Alias MYSQL_RUNAS = root
    #Cmnd_Alias  表示允许执行命令的列表
    Cmnd_Alias MYSQL_CMNDS = /sbin/ifconfig,/sbin/arping
    MYSQL_USERS ALL = (MYSQL_RUNAS) NOPASSWD: MYSQL_CMNDS
    EOT
    

[root@master ~]# for i in 12 13;do scp /etc/sudoers.d/admin 192.168.80.$i:/etc/sudoers.d/;done

- 测试admin用户是否可以挂载VIP

  [admin@master ~]$ sudo /sbin/ifconfig eth0:1 192.168.80.110 broadcast 192.168.80.255 netmask 255.255.255.0
  [admin@master ~]$ sudo /sbin/arping -fqc 5 -w 5 -I eth0 -s 192.168.80.110 -U 192.168.80.11
  [admin@master ~]$ ifconfig 

补充:
arping:用来向局域网内的其它主机发送ARP请求的指令,可以用来测试局域网内的某个IP是否已被使用。

-f:收到第一个响应包后退出。
-q:quite模式,不显示输出。
-c:发送指定的count个ARP REQUEST包后停止。如果指定了-w参数,则会等待相同数量的ARP REPLY包,直到超时为止。
-w:指定一个超时时间,单位为秒,arping在到达指定时间后退出,无论期间发送或接收了多少包。在这种情况下,arping在发送完指定的count(-c)个包后并不会停止,而是等待到超时或发送的count个包都进行了回应后才会退出。
-I:指定设备名,用来发送ARP REQUEST包的网络设备的名称。
-D:重复地址探测模式,用来检测有没有IP地址冲突,如果没有IP冲突则返回0。
-s:设置发送ARP包的IP资源地址
-U:无理由的(强制的)ARP模式去更新别的主机上的ARP CACHE列表中的本机的信息,不需要响应。
-h:显示帮助页。

㈣ 创建mha相关配置文件
- 创建 mha 相关的工作目录
[root@mgr ~]# mkdir /etc/mha/
[root@mgr ~]# mkdir -p /data/mha/masterha/app1
[root@mgr ~]# chown -R admin. /data/mha
  • 创建mha局部配置文件

    [root@mgr ~]# cat <<EOT>/etc/mha/app1.conf
    [server default]
    # 该用户是master上创建的数据库管理账号,拥有所有权限
    user=mha
    password=Ykzx@2352
    # 设置复制环境中的复制用户和密码
    repl_user=slave
    repl_password=Ykzx@2352
    # 设置ssh的登录用户名
    ssh_user=admin
    # 设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
    ping_interval=3
    # 设置mgr的工作目录
    manager_workdir=/data/mha/masterha/app1
    # 设置mysql master保存binlog的目录,以便MHA可以找到master的二进制日志
    master_binlog_dir=/data/mysql
    # 设置master的pid文件
    master_pid_file=/data/mysql/node1.pid
    # 设置mysql master在发生切换时保存binlog的目录(在mysql master上创建这个目录)
    remote_workdir=/data/mysql/mha
    # 设置mgr日志文件
    manager_log=/data/mha/masterha/app1/app1-3306.log
    # MHA到master的监控之间出现问题,MHA Manager将会尝试从slave1和slave2登录到master上
    secondary_check_script=/usr/bin/masterha_secondary_check -s 192.168.80.12 -s 192.168.80.13 --user=admin --port=22 --master_host=192.168.80.11 --master_port=3306
    # 设置自动failover时候的切换脚本
    master_ip_failover_script="/etc/mha/master_ip_failover.sh"
    # 设置手动切换时候的切换脚本
    #master_ip_online_change_script="/etc/mha/master_ip_online_change.sh 192.168.80.110 1"
    # 设置故障发生后关闭故障主机脚本
    # shutdown_script="/etc/mha/power_manager"
    [server1]
    hostname=192.168.80.11
    port= 3306
    candidate_master=1
    [server2]
    hostname=192.168.80.12
    port= 3306
    candidate_master=1
    [server3]
    hostname=192.168.80.13
    port= 3306
    candidate_master=1
    EOT
    
    ㈤ 上传相应脚本

    [root@mgr ~]# ls /etc/mha/
    app1.conf master_ip_failover.sh
    注意:脚本内容中要修改网卡名字和连接用户为admin

    #!/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 = '192.168.80.110';
    my $key = '1';
    my $ssh_start_vip = "sudo /sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "sudo /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 "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
        if ( $command eq "stop" || $command eq "stopssh" ) {
            my $exit_code = 1;
            eval {
                print "Disabling the VIP on old master: $orig_master_host \n";
                &stop_vip();
                $exit_code = 0;
            };
            if ($@) {
                warn "Got Error: $@\n";
                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 \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\@cluster1 \" $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=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
    }
    
    

[root@mgr ~]# chmod +x /etc/mha/master_ip_*

6、检查ssh互信和集群状态

  • 检查ssh互信
[admin@mgr ~]$ masterha_check_ssh --conf=/etc/mha/app1.conf
Sat Apr 11 22:23:59 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sat Apr 11 22:23:59 2020 - [info] Reading application default configuration from /etc/mha/app1.conf..
Sat Apr 11 22:23:59 2020 - [info] Reading server configuration from /etc/mha/app1.conf..
Sat Apr 11 22:23:59 2020 - [info] Starting SSH connection tests..
Sat Apr 11 22:24:00 2020 - [debug]
Sat Apr 11 22:23:59 2020 - [debug]  Connecting via SSH from admin@192.168.80.11(192.168.80.11:22) to admin@192.168.80.12(192.168.80.12:22)..
Warning: Permanently added '192.168.80.12' (ECDSA) to the list of known hosts.
Sat Apr 11 22:23:59 2020 - [debug]   ok.
Sat Apr 11 22:23:59 2020 - [debug]  Connecting via SSH from admin@192.168.80.11(192.168.80.11:22) to admin@192.168.80.13(192.168.80.13:22)..
Warning: Permanently added '192.168.80.13' (ECDSA) to the list of known hosts.
Sat Apr 11 22:23:59 2020 - [debug]   ok.
Sat Apr 11 22:24:00 2020 - [debug]
Sat Apr 11 22:23:59 2020 - [debug]  Connecting via SSH from admin@192.168.80.12(192.168.80.12:22) to admin@192.168.80.11(192.168.80.11:22)..
Sat Apr 11 22:24:00 2020 - [debug]   ok.
Sat Apr 11 22:24:00 2020 - [debug]  Connecting via SSH from admin@192.168.80.12(192.168.80.12:22) to admin@192.168.80.13(192.168.80.13:22)..
Warning: Permanently added '192.168.80.13' (ECDSA) to the list of known hosts.
Sat Apr 11 22:24:00 2020 - [debug]   ok.
Sat Apr 11 22:24:01 2020 - [debug]
Sat Apr 11 22:24:00 2020 - [debug]  Connecting via SSH from admin@192.168.80.13(192.168.80.13:22) to admin@192.168.80.11(192.168.80.11:22)..
Sat Apr 11 22:24:00 2020 - [debug]   ok.
Sat Apr 11 22:24:00 2020 - [debug]  Connecting via SSH from admin@192.168.80.13(192.168.80.13:22) to admin@192.168.80.12(192.168.80.12:22)..
Sat Apr 11 22:24:00 2020 - [debug]   ok.
Sat Apr 11 22:24:01 2020 - [info] All SSH connection tests passed successfully.
[admin@mgr ~]$

以上信息说明ok

  • 检查集群状态

    [admin@mgr ~]$ masterha_check_repl --conf=/etc/mha/app1.conf
    
    Sat Apr 11 22:35:44 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
    Sat Apr 11 22:35:44 2020 - [info] Reading application default configuration from /etc/mha/app1.conf..
    Sat Apr 11 22:35:44 2020 - [info] Reading server configuration from /etc/mha/app1.conf..
    Sat Apr 11 22:35:44 2020 - [info] MHA::MasterMonitor version 0.57.
    Sat Apr 11 22:35:45 2020 - [info] GTID failover mode = 1
    Sat Apr 11 22:35:45 2020 - [info] Dead Servers:
    Sat Apr 11 22:35:45 2020 - [info] Alive Servers:
    Sat Apr 11 22:35:45 2020 - [info]   192.168.80.11(192.168.80.11:3306)
    Sat Apr 11 22:35:45 2020 - [info]   192.168.80.12(192.168.80.12:3306)
    Sat Apr 11 22:35:45 2020 - [info]   192.168.80.13(192.168.80.13:3306)
    Sat Apr 11 22:35:45 2020 - [info] Alive Slaves:
    Sat Apr 11 22:35:45 2020 - [info]   192.168.80.12(192.168.80.12:3306)  Version=5.7.25-log (oldest major version between slaves) log-bin:enabled
    Sat Apr 11 22:35:45 2020 - [info]     GTID ON
    Sat Apr 11 22:35:45 2020 - [info]     Replicating from 192.168.80.11(192.168.80.11:3306)
    Sat Apr 11 22:35:45 2020 - [info]     Primary candidate for the new Master (candidate_master is set)
    Sat Apr 11 22:35:45 2020 - [info]   192.168.80.13(192.168.80.13:3306)  Version=5.7.25-log (oldest major version between slaves) log-bin:enabled
    Sat Apr 11 22:35:45 2020 - [info]     GTID ON
    Sat Apr 11 22:35:45 2020 - [info]     Replicating from 192.168.80.11(192.168.80.11:3306)
    Sat Apr 11 22:35:45 2020 - [info]     Primary candidate for the new Master (candidate_master is set)
    Sat Apr 11 22:35:45 2020 - [info] Current Alive Master: 192.168.80.11(192.168.80.11:3306)
    Sat Apr 11 22:35:45 2020 - [info] Checking slave configurations..
    Sat Apr 11 22:35:45 2020 - [info] Checking replication filtering settings..
    Sat Apr 11 22:35:45 2020 - [info]  binlog_do_db= , binlog_ignore_db=
    Sat Apr 11 22:35:45 2020 - [info]  Replication filtering check ok.
    Sat Apr 11 22:35:45 2020 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
    Sat Apr 11 22:35:45 2020 - [info] Checking SSH publickey authentication settings on the current master..
    Sat Apr 11 22:35:45 2020 - [info] HealthCheck: SSH to 192.168.80.11 is reachable.
    Sat Apr 11 22:35:45 2020 - [info]
    192.168.80.11(192.168.80.11:3306) (current master)
    +--192.168.80.12(192.168.80.12:3306)
    +--192.168.80.13(192.168.80.13:3306)
    Sat Apr 11 22:35:45 2020 - [info] Checking replication health on 192.168.80.12..
    Sat Apr 11 22:35:45 2020 - [info]  ok.
    Sat Apr 11 22:35:45 2020 - [info] Checking replication health on 192.168.80.13..
    Sat Apr 11 22:35:45 2020 - [info]  ok.
    Sat Apr 11 22:35:45 2020 - [info] Checking master_ip_failover_script status:
    Sat Apr 11 22:35:45 2020 - [info]   /etc/mha/master_ip_failover.sh 192.168.80.110 1 --command=status --ssh_user=admin --orig_master_host=192.168.80.11 --orig_master_ip=192.168.80.11 --orig_master_port=3306
    Checking the Status of the script.. OK
    Sat Apr 11 22:35:45 2020 - [info]  OK.
    Sat Apr 11 22:35:45 2020 - [warning] shutdown_script is not defined.
    Sat Apr 11 22:35:45 2020 - [info] Got exit code 0 (Not master dead).
    
    MySQL Replication Health is OK.
    

以上信息说明ok

7、检查MHA-Mgr状态

[admin@mgr ~]$ masterha_check_status --conf=/etc/mha/app1.conf
app1 is stopped(2:NOT_RUNNING).
开启MHA Manager监控:
[admin@mgr ~]$ nohup masterha_manager --conf=/etc/mha/app1.conf --remove_dead_master_conf --ignore_last_failover &
再次查看监控状态:
[admin@mgr ~]$ masterha_check_status --conf=/etc/mha/app1.conf
app1 (pid:8913) is running(0:PING_OK), master:192.168.80.11


注意:
1. 如果正常,会显示”PING_OK ”,否则会显示”NOT_RUNNING ”,说明 MHA监控没有开启
2. 使用admin用户启动监控,否则会报权限拒绝
3. 手动停止监控命令:masterha_stop --conf=/etc/mha/app1.conf

二、自动Failover测试

1、安装测试工具

[root@master ~]# yum -y install sysbench

2、 创建测试数据

master服务器上创建测试库test
mysql> create database test charset utf8mb4;
Query OK, 1 row affected (0.17 sec)

mysql> grant all on *.* to 'mha'@'localhost' identified by '123'; 
Query OK, 0 rows affected (0.14 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.11 sec)

mysql> exit
Bye


[root@master ~]# sysbench /usr/share/sysbench/oltp_read_only.lua \
 --mysql-host=192.168.80.11  --mysql-port=3306  --mysql-user=mha \
 --mysql-password=Ykzx@2352  --mysql-socket=/var/lib/mysql/mysql.sock \
 --mysql-db=test  --db-driver=mysql  --tables=1 \
 --table-size=100000 --report-interval=10 --threads=128 --time=120 prepare

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.01 sec)

3、模拟故障

[root@master ~]# systemctl stop mysqld
Shutting down MySQL............ [ OK ]

4、查看切换过程

[root@mgr ~]# tail -f /data/mha/masterha/app1/app1-3306.log
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值