文章目录

  • 一: MHA的简介
    • 1.1: MHA的组成
    • 1.2: MHA特点
  • 二: MHA的案例
    • 2.1: 案例需求
    • 2.2: 案例实现思路
    • 2.3:实验目的
    • 2.4:编译安装mysql并配置主从服务
      • 2.4.1:安装编译依赖的环境
      • 2.4.2:安装gmake编译软件
      • 2.4.3: 安装MySQL数据库
      • 2.4.4: 修改Master的主配置文件/etc/my.cnf文件
      • 2.4.5: Mysql1、Mysql2、Mysql3分别做两个软链接
      • 2.4.6: Mysql1、Mysql2、Mysql3启动MySQL
      • 2.4.7: 配置MySQL一主两从
    • 2.5: 部署MHA
      • 2.5.1: 所有服务器上都安装MHA依赖的环境,首先安装epel源
      • 2.5.2: 一主两从安装node组件
      • 2.5.3: 在MHA-manager上安装manager组件
      • 2.5.4: 检查node安装后/usr/local/bin生成的脚本
      • 2.5.5: 配置无密码认证
      • 2.5.6: 配置MHA
      • 2.5.7: 启动MHA
      • 2.5.8: 查看MHA状态
      • 2.5.9: 查看MHA状日志
      • 2.5.10: Mysql1的VIP地址192.168.100.200是否存在?
    • 2.6: 进行高可用验证
    • 2.7 MHA报错排查

一: MHA的简介

  • 目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本人youshimaton开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。
  • 在MySQL故障 切换过程中,MHA能做到0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能最大程度上保证数据库的一致性,以达到真正意义上的高可用。
  • 当Master出现故障时,它可以自动将最新数据的Slave提升为新的Master,然后将所有其他的Slave重新指向新的Master。整个故障转移过程对应用程序是完全透明的。

1.1: MHA的组成

  • MHA Manager (管理节点):
    Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。
  • MHA Node (数据节点):
    Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。

1.2: MHA特点

  • 自动故障切换过程中,MHA试图从宕机的主服务器.上保存二进制日志,最大程度的保证数据的不丢失
  • 使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险

二: MHA的案例

2.1: 案例需求

  • 本案例要求通过MHA监控MySQL数据库在故障时进行自动切换,不影响业务。

2.2: 案例实现思路

  • 1、 安装MySQL数据库

  • 2、 配置MySQl一主两从

  • 3、 安装MHA软件

  • 4、 配置无密码认证

  • 5、 配置MySQL MHA 高可用

  • 6、 模拟 master 故障切换

  • 实验环境

主机名 IP地址 系统 软件包
mysql1(master) 192.168.100.150(虚拟:192.168.100.200) centos7.6 mysql-5.6.36.tar.gz cmake-2.8.6.tar.gz mha4mysql-node-0.57.tar.gz
mysql2(slave1) 192.168.100.160 centos7.6
mysql3(slave2) 192.168.100.170 centos7.6
manager 192.168.100.130 centos7.6 mha4mysql-node-0.57.tar.gz mha4mysql-manager-0.57.tar.gz

  • 需要安装包的可以私聊我
  • 拓扑图

2.3:实验目的

  • 通过MHA监控MySQL数据库,在故障时自动进行切换,不影响业务
  • 当主库失效时,备选主库自动成为主库

2.4:编译安装mysql并配置主从服务

  • 因为操作系统是centos7,所以要下载MHA 0.57版本
  • 在三台MySQL 节点上分别安装数据库,MySQL版本请使用5.6.36,cmake版本请使用2.8.6。下面只在Mysql1上面做演示,安装过程如下。

2.4.1:安装编译依赖的环境

  • [root@Mysql1~]# yum install ncurses-devel gcc-c++ perl-Module-Install -y
    

2.4.2:安装gmake编译软件

  • //上传mysql-5.6.36.tar.gz  cmake-2.8.6.tar.gz mha4mysql-node-0.57.tar.gz mha4mysql-manager-0.57.tar.gz
    [root@Mysql1~]# tar zxvf cmake-2.8.6.tar.gz
    [root@Mysql1 ~]# cd cmake-2.8.6
    [root@Mysql1 cmake-2.8.6]# ./configure
    [root@Mysql1 cmake-2.8.6]# gmake && gmake install
    

2.4.3: 安装MySQL数据库

  • [root@Mysql1~ ]# tar zxvf mysql-5.6.36.tar.gz
    [root@Mysql1 ~]# cd mysql-5.6.36cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITII_EXTRA_CHARSETS=all \
    -DSYSCONFDTR=/etcmake && make install
    cp support-files/my-default.cnf /etc/my.cnf
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    cd ~
    chmod +x /etc/rc.d/init.d/mysqld
    chkconfig --add mysqld
    echo  "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
    source /etc/profile
    groupadd mysql
    useradd -M -s /sbin/nologin mysql -g mysql
    chown -R mysql.mysql /usr/local/mysqlmkdir -p /data/mysql
    /usr/local/mysql/scripts/mysql_install_db \
    --basedir=/usr/local/mysql \
    --datadir=/usr/local/mysql/data \
    --user=mysql
    /usr/local/mysql/scripts/mysql_install_db \
    --basedir=/usr/local/mysql \
    --datadir=/usr/local/mysql/data \
    --user=mysql
    

2.4.4: 修改Master的主配置文件/etc/my.cnf文件

  • [root@Mysql1 ~]# cat /etc/my.cnf
    [mysqld]
    server-id = 1
    log_bin = master-bin
    log-slave-updates = true
    
  • 配置从服务器

  • [root@Mysql2 ~]# vim /etc/my.cnf
    server-id = 2
    log_bin = master-bin
    relay-log = relay-log-bin
    relay-log-index = slave-relay-bin.index[root@Mysql3 ~]# vim /etc/my.cnf
    server-id = 3
    log_bin = master-bin
    relay-log = relay-log-bin
    relay-log-index = slave-relay-bin.index
    

2.4.5: Mysql1、Mysql2、Mysql3分别做两个软链接

  • ln -s /usr/local/mysql/bin/mysql /usr/sbin/
    ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
    

2.4.6: Mysql1、Mysql2、Mysql3启动MySQL

  • systemctl stop firewalld
    setenforce 0
    /usr/local/mysql/bin/mysqld_safe --user=mysql &
    netstat -ntap | grep 3306
    

2.4.7: 配置MySQL一主两从

  • MySQL主从配置相对比较简单。需要注意的是授权。步骤如下:
    在所有数据库节点上授权两个用户,一个是从库同步使用,另外一个是manager使用。

  • grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123';
    grant all privileges on *.* to 'mha'@'192.168.100.%' identified by 'manager';
    flush privileges;
    
  • 下面三条授权按理论是不用添加的,但是做案例实验环境时候通过MHA检查MySQL主从有报错,
    报两个从库通过主机名连接不上主库,所以所有数据库加上下面的授权。

    grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager';
    grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
    grant all privileges on *.* to 'mha'@'Mysql3' identified by 'manager';
    flush privileges;
    
  • 在Mysq1主机上查看二进制文件和同步点

    mysql> show master status;
    +-------------------+----------+--------------+------------------+-------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+----------+--------------+------------------+-------------------+
    | master-bin.000001 |     1294 |              |                  |                   |
    +-------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.01 sec)
    
  • 接下来在Mysql2和Mysql3分别执行同步。

    change master to master_host='192.168.100.150',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=1294;
    flush privileges;
    start slave;
    
  • 查看IO和SQL线程都是yes代表同步是否正常。

    show slave status\G;
    ...
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes必须设置两个从库为只读模式:
    set global read_only=1;
    flush privileges;
    
  • 设置完成直接验证主从复制功能

2.5: 部署MHA

2.5.1: 所有服务器上都安装MHA依赖的环境,首先安装epel源

  • yum install epel-release --nogpgcheck -y
    yum install -y perl-DBD-MySQL \
    perl-Config-Tiny \
    perl-Log-Dispatch \
    perl-Parallel-ForkManager \
    perl-ExtUtils-CBuilder \
    perl-ExtUtils-MakeMaker \
    perl-CPAN
    

2.5.2: 一主两从安装node组件

  • MHA 软件包对于每个操作系统版本不一样,这里CentOS7.4必须选择0.57版本,注意:所有服务器上必须先安装node组件,最后在MHA-manager节点上安装manager组件,因为manager依赖node组件,下面都是在Mysql1上操作演示安装node组件。

    //上传mha4mysql-node-0.57.tar.gz 到家目录
    tar zxvf mha4mysql-node-0.57.tar.gz
    cd mha4mysql-node-0.57
    perl Makefile.PL
    make && make install
    

2.5.3: 在MHA-manager上安装manager组件

  • 仅在MHA-manager上安装manager组件(!注意:一定要先安装node组件才能安装manager组件)

    cd ~
    tar zxvf mha4mysql-manager-0.57.tar.gz
    cd mha4mysql-manager-0.57
    perl Makefile.PL
    make && make install
    
  • manager安装后在/usr/local/bin下面会生成几个工具,主要包括以下几个,一定要有,不能漏

    masterha_check_ssh检查MHA的SSH配置状况
    masterha_check_repl检查MySQL复制状况
    masterha_manger启动manager的脚本
    masterha_check_status检测当前MHA运行状态
    masterha_master_monitor检测master是否宕机
    masterha_master_switch控制故障转移(自动或者手动)
    masterha_conf_host添加或删除配置的server信息
    masterha_stop关闭manager
    

2.5.4: 检查node安装后/usr/local/bin生成的脚本

  • node安装后也会在/usr/local/bin下面会生成几个脚本(这些工具通常由MHA_Manager的脚本触发,无需人为操作)主要如下:

    save_binary_logs保存和复制master的二进制日志
    apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
    filter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
    purge_relay_logs清除中继日志(不会阻塞SQL线程)
    

2.5.5: 配置无密码认证

  • 在manager上配置到所有数据库节点的无密码认证

    [root@mha-manager ~]# ssh-keygen -t rsa    //一路按回车键
    [root@mha-manager ~]# ssh-copy-id 192.168.100.150   //输入yes 及150的root密码
    [root@mha-manager ~]# ssh-copy-id 192.168.100.160
    [root@mha-manager ~]# ssh-copy-id 192.168.100.170
    
  • 在Mysql1上配置到数据库节点Mysql2和Mysql3的无密码认证

    [root@Mysql1 ~]# ssh-keygen -t rsa
    [root@MysqI1 ~]# ssh-copy-id 192.168.100.160
    [root@Mysql1 ~]# ssh-copy-id 192.168.100.170
    
  • 在Mysql2上配置到数据库节点MysqI1和Mysql3的无密码认证

    [root@Mysql2 ~]# ssh-keygen -t rsa
    [root@Mysql2 ~]# ssh-copy-id 192.168.100.150
    [root@Mysql2 ~]# ssh-copy-id 192.168.100.170
    
  • 在Mysql3上配置到数据库节点Mysql1和Mysql2的无密码认证

    [root@Mysql3 ~]# ssh-keygen -t rsa
    [root@Mysql3 ~]# ssh-copy-id 192.168.100.150
    [root@Mysql3 ~]# ssh-copy-id 192.168.100.160
    

2.5.6: 配置MHA

  • 在manager节点上复制相关脚本到/usr/local/bin目录

    [root@mha-manager~]# cp -ra /root/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
    //拷贝后会有四个执行文件
    [root@MHA-manager ~]#ll/usr/local/bin/scripts/
    总用量32
    -rwxr-xr-x 1 mysql mysql 36485月312015 master_ip_failover  #自动切换时VIP管理的脚本
    -rwxr-xr-x 1 mysql mysql 98725月2509:07 master_ip_online_change  #在线切换时vip的管理
    -rwxr-xr-x 1 mysql mysql118675月312015 power_manager #故障发生后关闭主机的脚本
    -rwxr-Xr-x 1 mysql mysql 13605月312015 send_report  #因故障切换后发送报警的脚本
    
  • 复制上述的自动切换时VIP管理的脚本到/usr/local/bin目录,这里使用脚本管理VIP

    [root@mha-manager~]# cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
    
  • 修改内容如下:(删除原有内容,直接复制)

    [root@MHA-manager ~]# vim /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 = '192.168.195.200';   #指定虚拟VIP地址,注意这里要和master主机一个网段
    my $brdc = '192.168.195.255';  #指定广播地址
    my $ifdev = 'ens33';           #虚拟地址的网卡名称
    my $key = '1';
    my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
    my $exit_code = 0;
    #my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
    #my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
    ############################################################################
    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";
    exit 0;
    }
    else {&usage();
    exit 1;
    }
    }
    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";
    }
    
  • 创建MHA软件目录并拷贝配置文件

    [root@MHA-manager ~]# cd /usr/local/bin/scripts/
    [root@MHA-manager scripts]# cp master_ip_online_change /usr/local/bin/
    [root@MHA-manager scripts]# cp send_report /usr/local/
    [root@MHA-manager ~]# mkdir /etc/masterha
    [root@MHA-manager ~]# cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha
    [root@MHA-manager ~]# vim /etc/masterha/app1.cnf
    [server default]
    manager_log=/var/log/masterha/app1/manager.log   'manager日志'
    manager_workdir=/var/log/masterha/app1   'manager工作目录'
    master_binlog_dir=/usr/local/mysql/data  'master保存binlog的位置,也是master的数据存放路径
    master_ip_failover_script=/usr/local/bin/master_ip_failover '设置自动failover时候的切换脚本,也就是上边的那个脚本'
    master_ip_online_change_script=/usr/local/bin/master_ip_online_change  '设置手动切换时候的切换脚本'
    user=mha            '设置监控用户root'
    password=manager   '#设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码'
    ping_interval=1    '设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行rail
    remote_workdir=/tmp  '设置远端mysql在发生切换时binlog的保存位置'
    repl_password=123    '设置复制用户的密码,这里对应主从复制授权的账户和密码'
    repl_user=myslave     '设置复制用户的用户'
    secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.100.160 -s 192.168.100.170    '设置从服务器的地址'
    shutdown_script=""   '设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)'
    ssh_user=root       '设置ssh的登录用户名'[server1]    'master节点'
    hostname=192.168.100.150
    port=3306[server2]    'salve1'
    hostname=192.168.100.160
    port=3306
    candidate_master=1    '设置为候选master'
    check_repl_delay=0    '默认情况下如果一个slave落后master 100M的relay logs 的话,mha将不会选择该slave作为一个新的master'[server3]    'slave2'
    hostname=192.168.100.170
    port=3306
    
  • 测试ssh无密码认证,如果正常最后会输出successfully

    [root@mha-manager~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf
    ......
    Fri Aug 28 12:42:39 2020 - [info] All SSH connection tests passed successfully.
    '这一步有问题说明秘钥分发问题'
    
  • 检查健康状况(关键)

    [root@mha-manager ~]# masterha_check_repl -conf=/etc/masterha/app1.cnfFri Aug 28 16:20:51 2020 - [info] Checking replication health on 192.168.100.160..
    Fri Aug 28 16:20:51 2020 - [info]  ok.
    Fri Aug 28 16:20:51 2020 - [info] Checking replication health on 192.168.100.170..
    Fri Aug 28 16:20:51 2020 - [info]  ok.
    Fri Aug 28 16:20:51 2020 - [info] Checking master_ip_failover_script status:
    Fri Aug 28 16:20:51 2020 - [info]   /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.100.150 --orig_master_ip=192.168.100.150 --orig_master_port=3306 IN SCRIPT TEST====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 192.168.100.200===Checking the Status of the script.. OK
    Fri Aug 28 16:20:51 2020 - [info]  OK.
    Fri Aug 28 16:20:51 2020 - [warning] shutdown_script is not defined.
    Fri Aug 28 16:20:51 2020 - [info] Got exit code 0 (Not master dead).MySQL Replication Health is OK.
    
  • 注意:第一次配置需要去master上手动开启虚拟IP

    [root@Mysql1 ~]# /sbin/ifconfig ens33:1 192.168.100.200/24
    

2.5.7: 启动MHA

  • [root@mha-manager ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
    
    --remove_dead_master_conf该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除
    --manger_log日志存放位置
    --ignore_last_failover在缺省情况下,如果MHA 检测到连续发生宕机,且两次宕机间隔不足8小时的话,则不会进行Failover,之所以这样限制是为了避免ping-pong效应。
    

2.5.8: 查看MHA状态

  • [root@mha-manager~]# masterha_check_status --conf=/etc/masterha/app1.cnf
    app1 (pid:70465) is running(0:PING_OK), master:192.168.100.150
    

2.5.9: 查看MHA状日志

  • [root@mha-manager ~]# cat /var/log/masterha/app1/manager.log
    .......
    IN SCRIPT TEST====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 192.168.100.200===
    .........
    

2.5.10: Mysql1的VIP地址192.168.100.200是否存在?

  • [root@mysql1 mha4mysql-node-0.57]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.100.150  netmask 255.255.255.0  broadcast 192.168.100.255inet6 fe80::7264:7578:de4e:190  prefixlen 64  scopeid 0x20<link>inet6 fe80::9433:6cdb:ee1d:7b3d  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:17:9c:75  txqueuelen 1000  (Ethernet)RX packets 101492  bytes 130137031 (124.1 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 43150  bytes 7281255 (6.9 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.100.200  netmask 255.255.255.0  broadcast 192.168.100.255ether 00:0c:29:17:9c:75  txqueuelen 1000  (Ethernet)
    

2.6: 进行高可用验证

  • 在mha服务器上启动监控观察日志记录

    [root@mha-manager ~]# tailf /var/log/masterha/app1/manager.log
    
  • 关闭mysql1中的mysql服务,此时再次查看VIP地址,mysql1中已消失,飘到主备服务器

    [root@mysql1 ~]# pkill -9 mysql
    
    [root@mysql2 mha4mysql-node-0.57]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.100.160  netmask 255.255.255.0  broadcast 192.168.100.255inet6 fe80::1bbb:ba05:a579:42dd  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:9f:ee:79  txqueuelen 1000  (Ethernet)RX packets 100963  bytes 130156228 (124.1 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 40046  bytes 6979445 (6.6 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.100.200  netmask 255.255.255.0  broadcast 192.168.100.255ether 00:0c:29:9f:ee:79  txqueuelen 1000  (Ethernet)
    
  • mha日志查看

    Invalidated master IP address on 192.168.100.150(192.168.100.150:3306)
    The latest slave 192.168.100.160(192.168.100.160:3306) has all relay logs for recovery.
    Selected 192.168.100.160(192.168.100.160:3306) as a new master.
    192.168.100.160(192.168.100.160:3306): OK: Applying all logs succeeded.
    192.168.100.160(192.168.100.160:3306): OK: Activated master IP address.
    192.168.100.170(192.168.100.170:3306): This host has the latest relay log events.
    Generating relay diff files from the latest slave succeeded.
    192.168.100.170(192.168.100.170:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.100.160(192.168.100.160:3306)
    192.168.100.160(192.168.100.160:3306): Resetting slave info succeeded.
    Master failover to 192.168.100.160(192.168.100.160:3306) completed successfully.  'master已经成功切换到备用160上面'
    
  • manager上查看

    [root@mha-manager bin]# masterha_check_status --conf=/etc/masterha/app1.cnf
    app1 (pid:72487) is running(0:PING_OK), master:192.168.100.160
    
  • 以上说明mha功能已经实现当master故障,会把主服务器到主-备服务器上,继续维持主从关系

2.7 MHA报错排查

Sun Aug 20 20:10:59 2020 - [info] Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/data/mysqllog/3306 --output_file=/masterha/app1/save_binary_logs_test --manager_version=0.55 --start_file=mysql-bin.000001
Sun Aug 20 20:10:59 2020 - [info] Connecting to root@192.168.100.150(192.168.100.150)..
Failed to save binary log: Binlog not found from /data/mysqllog/3306! If you got this error at MHA Manager, please set "master_binlog_dir=/path/to/binlog_directory_of_the_master" correctly in the MHA Manager's configuration file and try again.
at /usr/bin/save_binary_logs line 117.
eval {...} called at /usr/bin/save_binary_logs line 66
main::main() called at /usr/bin/save_binary_logs line 62
Sun Aug 20 20:10:59 2020 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln154] Master setting check failed!
Sun Aug 20 20:10:59 2020 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln367] Master configuration failed.
Sun Aug 20 20:10:59 2020 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln386] Error happend on checking configurations. at /usr/bin/masterha_check_repl line 48.
Sun Aug 20 20:10:59 2020 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln482] Error happened on monitoring servers.
Sun Aug 20 20:10:59 2020 - [info] Got exit code 1 (Not master dead).解决方案:
/etc/masterha/aap1.cnf中的datadir路径应该是mysql中bin-log的位置

-查看master二进制日志位置
-

数据库管理与高可用----MySQL高可用搭建相关推荐

  1. mysql三台高可用,MySQL高可用方案之集群(Cluster)

    1.实验环境 我用三台服务器搭建mysql cluster环境,sql节点和数据节点在同一服务器上,管理节点单独一台. cluster node1:192.168.1 1.实验环境 我用三台服务器搭建 ...

  2. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  3. MySQL服务MySQL+MHA高可用服务集群搭建

    MySQL MHA MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 1.所有服务器,关闭系统防火墙和安全机制 2.修改 master(192.1 ...

  4. 搭建MySQL高可用架构MHA

    搭建MySQL高可用架构MHA v1.0 MHA简介 MHA的主要目的是自动化master故障转移和slave自动提升为master,在较短时间(一般为10-30秒)的停机时间,可以避免复制和一致性问 ...

  5. MYSQL高可用环境搭建

    目录 一.MHA介绍... 2 二.MHA搭建... 3 1.环境准备... 3 2.MHA下载与MySQL安装... 3 3.配置三台服务器基本信息... 6 4.选择主从模式... 7 > ...

  6. 使用Docker搭建高可用Mysql数据库集群

    文章目录 前言 正文 选择哪一种搭建集群的方式 PXC Replication 安装docker Docker操作的基本命令 安装PXC集群 负载均衡 双机热备 具体实现细节 安装keepalived ...

  7. MySql高可用搭建 + 读写分离 + 分库分表

    Mysql读写分离与分库分表 一.Mysql读写分离解决的问题 二.mysql处理请求运行流程 三.读写分离结构 四.读写分离产生场景 五.读写分离工具 5.1 MyCat 5.2 HAProxy 5 ...

  8. 搭建pxc集群时需要先安装mysql么_完美起航-高可用MySQL数据库之PXC集群

    高可用MySQL数据库之PXC集群 前言 在上一篇文章介绍了时下流行的几种数据库产品后(公众号发送"NewSQL"查看),有不少小伙伴表示对自动集群的数据库感兴趣,特别是Cockr ...

  9. 阿里高可用mysql搭建方案_阿里云环境迁移记录 - MYSQL高可用搭建

    MYSQL高可用方案主要分为两大类,一类是前置管理,一类是后置管理. 前置管理的思想是利用各种前置管理工具,动态切换或者分发请求到不同的实例并切换master,如keepalived.MHA.pack ...

最新文章

  1. 自动红眼移除算法 附c++完整代码
  2. Jenkins中的邮件设置
  3. Ubuntu下安装Chrome浏览器
  4. 在Ubuntu中安装HBase
  5. javaGUI猜生日游戏
  6. c语言程序加仿真,求助。C语言的程序和仿真
  7. 【Qt】QModbusDevice类
  8. 如何在 SAP Spartacus 自定义 UI 里使用标准 UI 的上下文数据 - let 关键字的用法
  9. mysql5.5安装配置 在阿里云服务器上 本地navicat连接
  10. javafx窗体程序_JavaFX实际应用程序:SkedPal
  11. perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)
  12. centos activemq 集群配置 Networks of Brokers
  13. CSDN博客新手引导手册
  14. 记录阿里技术面试全流程
  15. Android Studio Offline work mode
  16. 用英语介绍一下计算机专业,“计算机专业英文自我介绍范文” 英语自我介绍...
  17. 基于SuperMap Idesktop 进行白膜拉伸的方式
  18. 梧桐新叶让我怀念父亲
  19. 服务器无备份位置可用,云服务器备份区域和可用区
  20. 社会热点和网络营销的关联

热门文章

  1. 用计算机怎么计算p级数,2020考研计算机数学49个基础知识点
  2. mysql怎么替换部分字符串
  3. android版微信打飞机无敌补丁分析及其制作方法
  4. vod服务器系统,vod系统
  5. Gallery3D源码分析
  6. STM32CubeMX学习笔记(41)——ETH接口+LwIP协议栈使用(DHCP)
  7. 关注自己朋友的SCDN博客的方法
  8. 关于点到Restorator打不开软件问题
  9. STM32外部高速晶振不起振的故障分析
  10. Ubuntu下安装Matlab并破解