一、Mysql MHA  

1、主从复制作用和缺点

1)主从复制作用  

 保证数据的完整性

2)缺点  

 主节点故障,从节点无法复制数据

 应用程序无法访问Mysql数据库存储数据

 导致数据短时间内丢失

2、MHA的作用特点

1)MHA的作用  

 监控Mysql主节点运行状态  

 主Mysql故障在从节点选举一个新主库,将从库连接到新主Mysql

 保证业务的连续和不间断性数据不会丢失

2)MHA的特点  

 可靠性强

 稳定性强

 故障不需要管理员手动干预自动修复

3、MHA节点的类型  

1)MHA manager

 管理节点

 监控Mysql数据库运行状态

 发现故障修复故障

2)MHA node  

 连接MHA manager管理端  

 需要在主和从Mysql节点安装MHA node

二、配置MHA高可用

1、配置Mysql MHA实现的方式  

1)GTID的MHA  

 不需要优化Mysql二进制日志命令和Mysql管理命令

2)二进制日志主从复制

 必须优化二进制日志命令和Mysql管理命令(所有节点都需要优化)

mysql8.0配置应用MHA_主从复制

2、mysql主从复制与MHA建立互信(所有主机都需要敲一遍)

ssh-keygen -t RSA
ssh-copy-id -i root@192.168.100.10
ssh-copy-id -i root@192.168.100.20
ssh-copy-id -i root@192.168.100.30
ssh-copy-id -i root@192.168.100.40

3、安装配置MHA Node节点(所有主机都需要安装)

1)安装依赖程序(挂载系统盘)

mysql8.0配置应用MHA_sql_02

2)安装MHA node 

mysql8.0配置应用MHA_主从复制_03

4、安装MHA manager(只有搭建mha的那一台主机需要安装)

1)安装管理节点依赖

mysql8.0配置应用MHA_MHA_04

2)安装manager

mysql8.0配置应用MHA_配置文件_05

三、配置MHA manager管理端

1、创建目录

mysql8.0配置应用MHA_sql_06

2、生成mha主配置文件

mysql8.0配置应用MHA_配置文件_07

mysql8.0配置应用MHA_主从复制_08

[server default]
manager_log=/var/log/mha/app1/manager.log				//mha日志文件
manager_workdir=/var/log/mha/app1/						//mha工作目录
master_binlog_dir=/usr/local/mysql/data/  		 		//主mysql数据库日志      
user=mha												//检测数据和日志用户
password=mha											//检测数据库和日志密码 
ping_interval=2 										//心跳2秒发送一次
repl_password=pwd@123									//主从复制账户的密码
repl_user=repl											//主从复制用户名字
ssh_user=root											//服务器登录用户
[server1]
hostname=192.168.100.10									//第一个主Mysql节点
port=3306
[server2]                                                                                               
hostname=192.168.100.20									//第一个从节点
candidate_master=1 										//主节点故障当前节点优先为主节点                                                                             
port=3306
[server3]
hostname=192.168.100.30  								//第二个从接地阿森纳                                                                       
port=3306

四、登录主Mysql服务器创建管理mha用户

1、创建控制Mysql节点状态用户和密码

mysql8.0配置应用MHA_MHA_09

2、授权监控

mysql8.0配置应用MHA_主从复制_10

3、在2个从mysql上创建登录主从复制账户

mysql8.0配置应用MHA_sql_11

五、MHA管理节点状态管理

1、检查互信状态

mysql8.0配置应用MHA_sql_12

2、检查主从复制状态

mysql8.0配置应用MHA_配置文件_13

六、配置生成MHA的VIP地址,VIP地址不能被使用

1、添加生成VIP地址脚本添加执行权限

mysql8.0配置应用MHA_主从复制_14

2、修改脚本配置文件

mysql8.0配置应用MHA_sql_15

#!/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.100.254/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens32:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens32:$key down";
my $ssh_Bcast_arp = "/sbin/ifconfig -I ens32 -c 3 -A 192.168.100.254";

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 \"`;
}
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\n";
}

3、修改MHA主配置文件添加脚本

mysql8.0配置应用MHA_MHA_16

mysql8.0配置应用MHA_配置文件_17

master_ip_failover_script=/usr/local/bin/master_ip_failover.sh		//添加执行VIP地址的脚本

4、在主mysql生成vip地址

mysql8.0配置应用MHA_配置文件_18

七、MHA数据库故障给管理员发送电子邮件

1、移动文件位置

[root@centos04 ~]# chmod +x ./send ./sendEmail ./testpl 
[root@centos04 ~]# mv send sendEmail testpl /usr/local/bin/

2、修改电子邮件配置文件

[root@centos04 ~]# vim /usr/local/bin/testpl
#!/bin/bash
/usr/local/bin/sendEmail -o tls=no -f 企业邮箱 -t 接收邮箱 -s smtp.163.com:25 -xu 企业邮箱 -xp YSOFIGYXKZORMXOX -u "MHA Waring" -m "YOUR MHA MAY BE FAILOVER" &>/tmp/sendmail.log

3、修改MHA配置文件加载故障发送邮件提醒

[root@centos04 ~]# vim /etc/mha/app1.cnf 
[server default]
report_script=/usr/local/bin/testpl				//主从复制主库故障发送邮件提醒管理员

八、测试启动mha停止主节点查看vip地址和主节点是否迁移

1、启动mha服务

mysql8.0配置应用MHA_主从复制_19

2、查看主Mysql状态信息

mysql8.0配置应用MHA_配置文件_20

3、停止主节点

mysql8.0配置应用MHA_MHA_21

4、查看vip地址迁移

mysql8.0配置应用MHA_配置文件_22

5、查看主mysql状态信息主从复制是否正常

mysql8.0配置应用MHA_sql_23

mysql8.0配置应用MHA_sql_24

mysql8.0配置应用MHA_sql_25