一、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管理命令(所有节点都需要优化)
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)安装依赖程序(挂载系统盘)
2)安装MHA node
4、安装MHA manager(只有搭建mha的那一台主机需要安装)
1)安装管理节点依赖
2)安装manager
三、配置MHA manager管理端
1、创建目录
2、生成mha主配置文件
[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节点状态用户和密码
2、授权监控
3、在2个从mysql上创建登录主从复制账户
五、MHA管理节点状态管理
1、检查互信状态
2、检查主从复制状态
六、配置生成MHA的VIP地址,VIP地址不能被使用
1、添加生成VIP地址脚本添加执行权限
2、修改脚本配置文件
#!/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主配置文件添加脚本
master_ip_failover_script=/usr/local/bin/master_ip_failover.sh //添加执行VIP地址的脚本
4、在主mysql生成vip地址
七、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服务
2、查看主Mysql状态信息
3、停止主节点
4、查看vip地址迁移
5、查看主mysql状态信息主从复制是否正常