手把手教你配置MHA高可用,学不会我把电脑寄给你

MHA与主从复制的架构对比及优缺点 主从复制与MHA对比   主从复制 MHA 软件来源 官方自带 第三方软件(由Perl语音编写) 资源使用 双节点(最少) 三节点(最少) 高可用性 主库故障时需手动切换保证可用性 0~30s内实现自动切换 故障恢复 故障的主库修复后切换比较麻烦 通过在 阅读详情

文章目录


什么是 MHA

MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL 单点的问题。
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

MHA 的组成

  • MHA Node(数据节点)
    MHA Node 运行在每台 MySQL 服务器上。

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

MHA 的特点

  • 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
  • 使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性
  • 目前MHA支持一主多从架构,最少三台服务,即一主两从

搭建 MySQL MHA

准备

MHA manager 节点服务器:CentOS7.4(64 位) manager/192.168.179.40 ,安装MHA node 和 manager 组件

Master 节点服务器:CentOS7.4(64 位) mysql1/192.168.179.50 ,安装mysql5.7、MHA node 组件

Slave1 节点服务器:CentOS7.4(64 位) mysql2/192.168.179.60 ,安装mysql5.7、MHA node 组件

Slave2 节点服务器:CentOS7.4(64 位) mysql3/192.168.179.80 ,安装mysql5.7、MHA node 组件

1.Master、Slave1、Slave2 节点上安装 mysql5.7

我的机子是已经装好MySQL的状态,就不做演示了,如果有不了解怎么装MySQL的兄弟可以看下博主之前的博客有详细的解说

2.修改 Master、Slave1、Slave2 节点的主机名

Master 节点服务器:CentOS7.4(64 位) 192.168.179.50

关闭防火墙及内核防护
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
查看MySQL状态
[root@localhost ~]# systemctl status mysqld.service
修改主机名
[root@localhost ~]# hostnamectl set-hostname mysql1
[root@localhost ~]# su
Slave1 节点服务器:CentOS7.4(64 位) 192.168.179.60

关闭防火墙及内核防护
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
查看MySQL状态
[root@localhost ~]# systemctl status mysqld.service
修改主机名
[root@localhost ~]# hostnamectl set-hostname mysql2
[root@localhost ~]# su
Slave2 节点服务器:CentOS7.4(64 位) 192.168.179.80


关闭防火墙及内核防护
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
查看MySQL状态
[root@localhost ~]# systemctl status mysqld.service
修改主机名
[root@localhost ~]# hostnamectl set-hostname mysql3
[root@localhost ~]# su

图例:
在这里插入图片描述

3.修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf并创建软连接

[root@mysql1 ~]# vim /etc/my.cnf
        ...
        server-id = 11
        log_bin = master-bin
        log-slave-updates = true
	    ...
[root@mysql1 ~]# systemctl restart mysqld.service
创建软连接
[root@mysql1 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@mysql1 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
[root@mysql2 ~]# vim /etc/my.cnf
         ...
	     server-id = 22
	     log_bin = master-bin
	     relay-log = relay-log-bin
	     relay-log-index = slave-relay-bin.index
	     ...
[root@mysql2 ~]# systemctl restart mysqld.service
创建软连接
[root@mysql2 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@mysql2 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

[root@mysql3 ~]# vim /etc/my.cnf
        ...
   	    server-id = 33
	    log_bin = master-bin
	    relay-log = relay-log-bin
	    relay-log-index = slave-relay-bin.index
	    ...
[root@mysql3 ~]# systemctl restart mysqld.service
创建软连接
[root@mysql3 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@mysql3 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

图示:
主数据库
在这里插入图片描述

从数据库
在这里插入图片描述

4.配置 mysql 一主两从

(1)所有数据库节点进行MySQL授权

[root@mysql1 ~]# mysql -uroot -p123456
mysql> grant replication slave on *.* to 'myslave'@'192.168.179.%' identified by '123';	
mysql> grant all on *.* to 'mha'@'192.168.179.%' identified by 'wolf';	

mysql> grant all on *.* to 'mha'@'mysql1' identified by 'wolf';	
mysql> grant all on *.* to 'mha'@'mysql2' identified by 'wolf';
mysql> grant all on *.* to 'mha'@'mysql3' identified by 'wolf';
mysql> flush privileges;

图示:
在这里插入图片描述
从数据库
在这里插入图片描述

(2)在 Master 节点查看二进制文件和同步点

mysql> show master status;
	 +-------------------+----------+--------------+------------------+-------------------+
	 | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
	 +-------------------+----------+--------------+------------------+-------------------+
	 | master-bin.000001 |     2045 |              |                  |                   |
	 +-------------------+----------+--------------+------------------+-------------------+
	 1 row in set (0.00 sec)

在这里插入图片描述

(3)在 Slave1、Slave2 节点执行同步操作

mysql> change master to master_host='192.168.179.50',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=2045;
mysql> start slave;  
mysql> show slave status\G;          #查看数据同步结果
	Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

图示:
在这里插入图片描述

(4)开启只读模式

mysql> set global read_only=1;

在这里插入图片描述

(5)插入数据测试数据库同步

在 Master 主库插入条数据,测试是否同步

create database test_db;
use test_db;
create table test(id int);
insert into test(id) values (1);

图示:
主数据库服务器:

在这里插入图片描述
从数据库服务器:
在这里插入图片描述

5.安装 MHA 软件

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

MHA manager 节点服务器

[root@localhost yum.repos.d]# yum install epel-release --nogpgcheck -y
   
[root@localhost yum.repos.d]# yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

主数据库服务器

[root@mysql1 backup]# yum install epel-release --nogpgcheck -y
   
[root@mysql1 backup]# yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

从数据库服务器

[root@mysql2 backup]# yum install epel-release --nogpgcheck -y
   
[root@mysql2 backup]# yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
[root@mysql3 backup]# yum install epel-release --nogpgcheck -y
   
[root@mysql3 backup]# yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

图示:
在这里插入图片描述
在这里插入图片描述

(2)安装 MHA 软件包,先在所有服务器上必须先安装 node 组件

对于每个操作系统版本不一样,这里 CentOS7.4 必须选择 0.57 版本。
在所有服务器上必须先安装 node 组件,最后在 MHA-manager 节点上安装 manager 组件,因为 manager 依赖 node 组件。

MHA manager 节点服务器

[root@localhost yum.repos.d]# cd /opt/
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar zxvf mha4mysql-node-0.57.tar.gz
[root@localhost opt]# cd mha4mysql-node-0.57/
[root@localhost mha4mysql-node-0.57]# perl Makefile.PL
[root@localhost mha4mysql-node-0.57]# make && make instal

主数据库服务器

[root@mysql1 backup]# cd /opt/
[root@mysql1 opt]# rz -E
rz waiting to receive.
[root@mysql1 opt]# tar zxvf mha4mysql-node-0.57.tar.gz
[root@mysql1 opt]# cd mha4mysql-node-0.57/
[root@mysql1 mha4mysql-node-0.57]# perl Makefile.PL
[root@mysql1 mha4mysql-node-0.57]# make && make install

从数据库服务器

[root@mysql2 backup]# cd /opt/
[root@mysql2 opt]# rz -E
rz waiting to receive.
[root@mysql2 opt]# tar zxvf mha4mysql-node-0.57.tar.gz
[root@mysql2 opt]# cd mha4mysql-node-0.57/
[root@mysql2 mha4mysql-node-0.57]# perl Makefile.PL
[root@mysql2 mha4mysql-node-0.57]# make && make install
[root@mysql3 backup]# cd /opt/
[root@mysql3 opt]# rz -E
rz waiting to receive.
[root@mysql3 opt]# tar zxvf mha4mysql-node-0.57.tar.gz
[root@mysql3 opt]# cd mha4mysql-node-0.57/
[root@mysql3 mha4mysql-node-0.57]# perl Makefile.PL
[root@mysql3 mha4mysql-node-0.57]# make && make install

在这里插入图片描述
在这里插入图片描述

(3)在 MHA manager 节点上安装 manager 组件

[root@localhost mha4mysql-node-0.57]# cd /opt/
[root@localhost opt]# tar zxvf mha4mysql-manager-0.57.tar.gz
[root@localhost opt]# cd mha4mysql-manager-0.57/
[root@localhost mha4mysql-manager-0.57]# perl Makefile.PL
[root@localhost mha4mysql-manager-0.57]# 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

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

主要如下:

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

在这里插入图片描述
在这里插入图片描述

6.在所有服务器上配置无密码认证

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

[root@localhost bin]# ssh-keygen -t rsa              #一路按回车
[root@localhost bin]# ssh-copy-id 192.168.179.50
[root@localhost bin]# ssh-copy-id 192.168.179.60
[root@localhost bin]# ssh-copy-id 192.168.179.80

图示:
在这里插入图片描述

在这里插入图片描述

(2)在 mysql1 上配置到所有数据库节点的无密码认证

[root@mysql1 bin]# ssh-keygen -t rsa
[root@mysql1 bin]# ssh-copy-id 192.168.179.60
[root@mysql1 bin]# ssh-copy-id 192.168.179.80

重启服务
[root@mysql1 data]# mysql -uroot -p123456

在这里插入图片描述

(3)在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证

[root@mysql2 bin]# ssh-keygen -t rsa
[root@mysql2 bin]# ssh-copy-id 192.168.179.50
[root@mysql2 bin]# ssh-copy-id 192.168.179.80

(4)在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证

[root@mysql3 bin]# ssh-keygen -t rsa
[root@mysql3 bin]# ssh-copy-id 192.168.179.50
[root@mysql3 bin]# ssh-copy-id 192.168.179.60

7. manager 节点上配置 MHA

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

[root@localhost bin]# cd /opt/mha4mysql-manager-0.57/samples/
   [root@localhost samples]# cp -rp scripts/ /usr/local/bin/
拷贝后会有四个执行文件
master_ip_failover  		#自动切换时 VIP 管理的脚本
master_ip_online_change 	#在线切换时 vip 的管理
power_manager 				#故障发生后关闭主机的脚本
send_report 				#因故障切换后发送报警的脚本

(2)复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换

[root@localhost samples]# cd /usr/local/bin/scripts/
[root@localhost scripts]# cp master_ip_failover /usr/local/bin/
[root@localhost scripts]# cd ..
[root@localhost bin]# ll master_ip_failover 
-rwxr-xr-x 1 root root 3648 2月  19 18:58 master_ip_failover

(3)修改内容如下:

[root@localhost bin]# vim 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.179.200';      #指定vip的地址
my $brdc = '192.168.179.255';     #指定vip的广播地址
my $ifdev = 'ens33';              #指定vip绑定的网卡
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;                #指定退出状态码为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";
}

在这里插入图片描述

(4)创建 MHA 软件目录并拷贝配置文件,这里使用app1.cnf配置文件来管理 mysql 节点服务器

[root@localhost bin]# mkdir /etc/masterha
[root@localhost bin]# cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha
[root@localhost bin]# cd /etc/masterha
[root@localhost masterha]# vim app1.cnf     #删除原有内容,直接复制并修改节点服务器的IP地址
[server default]
manager_log=/var/log/masterha/app1/manager.log   #manager日志
manager_workdir=/var/log/masterha/app1.log       #manager工作目录
master_binlog_dir=/usr/local/mysql/data/           #master保存binlog的位置,这里的路径要与master里配置的binlog的路径一致,以便MHA能找到
master_ip_failover_script=/usr/local/bin/master_ip_failover    #设置自动failover时候的切换脚本,也就是上面的那个脚本
master_ip_online_change_script=/usr/local/bin/master_ip_online_change     #设置手动切换时候的切换脚本
password=manager              #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
ping_interval=1               #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
remote_workdir=/tmp			  #设置远端mysql在发生切换时binlog的保存位置
repl_password=123			  #设置复制用户的密码
repl_user=myslave			  #设置复制用户的用户
#report_script=/usr/local/send_report     #设置发生切换后发送的报警的脚本(这里因为没有写这个脚本所有将其注释掉)
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.11 -s 192.168.80.12	#指定检查的从服务器IP地址
shutdown_script=""            #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用)
ssh_user=root			      #设置ssh的登录用户名
user=mha				      #设置监控用户root

[server1]
hostname=192.168.80.10
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.80.11
port=3306
#设置为候选master,设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中最新的slave

[server3]
hostname=192.168.80.12
port=3306

在这里插入图片描述

小知识:

默认情况下如果一个slave落后master 超过100M的relay logs的话,MHA将不会选择该slave作为一个新的master, 因为对于这个slave的恢复需要花费很长时间;通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

8.第一次配置需要在 Master 节点上手动开启虚拟IP

[root@mysql1 ~]# ifconfig ens33:1 192.168.80.200/24

在这里插入图片描述

9.在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully。

masterha_check_ssh -conf=/etc/masterha/app1.cnf

Tue Nov 26 23:09:45 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Nov 26 23:09:45 2020 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Tue Nov 26 23:09:45 2020 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Tue Nov 26 23:09:45 2020 - [info] Starting SSH connection tests..
Tue Nov 26 23:09:46 2020 - [debug] 
Tue Nov 26 23:09:45 2020 - [debug]  Connecting via SSH from root@192.168.80.11(192.168.80.11:22) to root@192.168.80.12(192.168.80.12:22)..
Tue Nov 26 23:09:46 2020 - [debug]   ok.
Tue Nov 26 23:09:47 2020 - [debug] 
Tue Nov 26 23:09:46 2020 - [debug]  Connecting via SSH from root@192.168.80.12(192.168.80.12:22) to root@192.168.80.11(192.168.80.11:22)..
Tue Nov 26 23:09:47 2020 - [debug]   ok.
Tue Nov 26 23:09:47 2020 - [info] All SSH connection tests passed successfully.

10.在 manager 节点上测试 mysql 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常。

masterha_check_repl -conf=/etc/masterha/app1.cnf

Tue Nov 26 23:10:29 2020 - [info] Slaves settings check done.
Tue Nov 26 23:10:29 2020 - [info] 
192.168.80.11(192.168.80.11:3306) (current master)
 +--192.168.80.12(192.168.80.12:3306)

Tue Nov 26 23:10:29 2020 - [info] Checking replication health on 192.168.80.12..
Tue Nov 26 23:10:29 2020 - [info]  ok.
Tue Nov 26 23:10:29 2020 - [info] Checking master_ip_failover_script status:
Tue Nov 26 23:10:29 2020 - [info]   /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.80.11 --orig_master_ip=192.168.80.11 --orig_master_port=3306 


IN SCRIPT TEST====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 192.168.80.200===

Checking the Status of the script.. OK 
Tue Nov 26 23:10:29 2020 - [info]  OK.
Tue Nov 26 23:10:29 2020 - [warning] shutdown_script is not defined.
Tue Nov 26 23:10:29 2020 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

11.在 manager 节点上启动 MHA

[root@localhost masterha]# 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 效应。该参数代表忽略上次 MHA 触发切换产生的文件,默认情况下,MHA 发生切换后会在日志记目录,也就是上面设置的日志app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为--ignore_last_failover。

12.查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点

[root@localhost masterha]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:10078) is running(0:PING_OK), master:192.168.179.50

13.查看 MHA 日志,也以看到当前的 master 是 192.168.179.50

[root@localhost masterha]# cat /var/log/masterha/app1/manager.log | grep "current master"
Fri Feb 19 21:00:51 2021 - [info] Checking SSH publickey authentication settings on the current master..
192.168.179.50(192.168.179.50:3306) (current master)

图示:
在这里插入图片描述

14.查看 Mysql1 的 VIP 地址 192.168.80.200 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失。

[root@mysql1 ~]# ifconfig

在这里插入图片描述

关闭 manager 服务,

可以使用这个命令:

masterha_stop --conf=/etc/masterha/app1.cnf

或者可以直接采用 kill 进程 ID 的方式关闭。

故障模拟

在 manager 节点上监控观察日志记录

[root@localhost bin]# tail -f /var/log/masterha/app1/manager.log

在这里插入图片描述

在 Master 节点 Mysql1 上停止mysql服务

systemctl stop mysqld
或
pkill -9 mysql

在这里插入图片描述

正常自动切换一次后,MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。
在这里插入图片描述

故障切换备选主库的算法:

  1. 一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
  2. 数据一致的情况下,按照配置文件顺序,选择备选主库。
  3. 设定有权重(candidate_master=1),按照权重强制指定备选主。
    (1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
    (2)如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主。

故障模拟后manager节点服务器上能够观测到:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

故障修复

1.修复mysql

[root@mysql1 data]# systemctl restart mysqld

在这里插入图片描述

2.修复主从

在现主库服务器 Mysql2 查看二进制文件和同步点

mysql> show master status;

在这里插入图片描述

在原主库服务器 mysql1 执行同步操作

mysql> change master to master_host='192.168.179.60',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.179.60
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql1-relay-bin.000002
                Relay_Log_Pos: 321
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

在这里插入图片描述

3.在 manager 节点上修改配置文件app1.cnf(再把这个记录添加进去,因为它检测掉失效时候会自动消失)

[root@localhost bin]# vim /etc/masterha/app1.cnf
...
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.179.50 -s 192.168.179.80
...
[server1]
hostname=192.168.179.60
port=3306

在这里插入图片描述

4.再次测试ssh和主从连接

[root@localhost bin]# masterha_check_ssh -conf=/etc/masterha/app1.cnf
[root@localhost bin]# masterha_check_repl -conf=/etc/masterha/app1.cnf

5.启动MHA服务

[root@localhost bin]# 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 &
[1] 85261

在这里插入图片描述

6.查看当前master数据库

[root@localhost bin]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:85261) is running(0:PING_OK), master:192.168.179.60

在这里插入图片描述

基于Zookeeper+MHA的mysql高可用架构设计.zip 立即下载

相关推荐

基于Zookeeper+MHA的mysql高可用架构设计

基于Zookeeper+MHA的mysql高可用架构设计,基于Zookeeper+MHA的mysql高可用架构设计。

MHA高可用架构部署以及配置(详细)

MHA高可用架构部署

m0_62948770的博客 1万+

企业AI Agent的审计与合规

本文将带你从**“0基础理解企业AI Agent审计与合规”到核心概念梳理:用大白话+学术定义拆解什么是“企业AI Agent”、“可审计性(Auditability)”、“可解释性(Explainability,XAI)≠可审计性”、“合规性(Compliance)”、“黑盒拆解的三层维度”等硬核但必须掌握的概念;风险与合规背景:从**内部风险(数据泄露、误操作、模型偏差)和。

Java大师兄的博客 301

mysql实现高可用架构之MHA

一、简介   MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节...

weixin_30697239的博客 257

基于DFT的scanshift sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 889

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 527

springboot自己实现mysql主从数据切换机制

springboot自己实现mysql主从数据切换机制 在很多公司都是实现了数据的读写分离,所谓的读写分离,就是写的时候从主库 ,然后从库就会从主库中复制过去,这样就会形成了数据的读写分离,然而在很多场景是适用的,那么我们怎么做呢,可以利用aop 加注解的方式来实现,aop切面管理所有的service,如果上面有了自定义注解,那么就会从主库来读...

maxchenBug的博客 3555

python 抖音采集_python爬取抖音视频的实例详解

import requestsimport jsonimport reimport osfrom pprint import pprint as ppimport queueclass DouYin:header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*...

weixin_35795675的博客 1864

MySQL MHA高可用方案

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

weixin_34391445的博客 389

图解“交易·支付·清结算·账务”全局

这个过程大致是这样的,用户先到平台选择喜欢的“餐品”,然后“下单”,生成交易“账单”,用户选择支付方式进行“支付”,支付成功后平台要履行承诺把餐送到,“履约”完成以后平台就开始进行各方利益的“清分”,计算清楚应给谁多少钱,并“记账”,最后将款项“结算”给商家,这个过程如图7所示。交易系统请求订单系统创建订单,因为不清楚平台和商家之间的清结算协议,所以暂且认为所有优惠由平台提供给用户,后续平台再基于协议跟商家之间做优惠的分摊,将上述商品、优惠、计价等信息集成到一起,就得到了完成的订单信息了,如表4所示。

wjianwei666的专栏 1万+

工业预测模型避坑指南:PHM2012轴承数据实战中,LSTM、CNN、Transformer到底怎么选?

本文深入探讨了工业预测模型在PHM2012轴承数据下的选型策略,对比了LSTM、CNN和Transformer等主流模型在轴承寿命预测任务中的表现。通过真实实验数据,提供了可复现的选型决策框架,帮助工程师根据数据规模、硬件条件和精度要求选择最佳模型。文章还揭示了工程落地中的隐藏陷阱,如数据不均衡和工况迁移挑战,并提出了解决方案。

weixin_33694172的博客 493

Mysql8 MHA高可用搭建之MHA安装配置及测试

三、mysql8基于MHA的高可用集群 0、配置ssh密钥登入各服务器互信: 1、安装MHA软件 2、安装mha监控manager,只要在77机器上安装: 3、在manager管理机器上配置管理节点: 4、编写配置文件中提到的/data1/mysql_mha/master_ip_failover脚本: 5、给该脚本添加可执行权限: 6、在其他所有节点上创建mha的工作目录: 7、在master上创建mha这个用户来访问数据库节点: 8、进行检测工作,检测ssh免密和主从,在manager上执行: 9、检测没

m0_67900727的博客 3283

「HTML和CSS入门指南」hr 标签详解

标签是 HTML5 中用于插入水平分割线的标签,常用于在页面中添加分隔线或者段落之间的分割线。通过灵活运用 标签和属性,我们可以帮助用户更好地理解页面内容,同时也可以美化和装饰页面。在实际应用中需要注意避免过度使用 标签,以使页面看起来简洁明了。

a451319296的博客 7663

MHA-快速开始

本文适用于初次使用MHA的用户,引导快速部署MHA 部署架构 Master 192.168.7.133 Slave1 192.168.7.237 Slave2/manager 192.168.7.236 系统版本:centos6.8 mysql版本:5.6 环境准备: 配置主从同步,创建用户 GRANT ALL ON *.* TO admin@'%...

bghgh的博客 565

Agent应用实践之二十九 - 设计模式:人机协同

本章讲解了一种比较常见的设计模式:人机协同。通过一些场景举例,同时使用AgentScope本身自带的能力实现的人机协同模式,最后通过源码分析了AgentScope中如何实现。通过了解人机协同模式对于实际工程使用也是非常有用的。

代码让AI扣 306

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

实现MySQL高可用架构之MHA

MHA是一款开源的mysql的高可用程序,它为mysql主从复制架构提供了automating master failover功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点。在此期间,MHA会通过于其他节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点的在线切换功能,能够在30秒内实现故障切换,并在故障切换中,最大可能的

厉害了,我的linux 546

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基于SpringBoot的MYSQL数据库读写分离(一)——基础环境搭建

基于SpringBoot无XML文件的数据库读写分离(一)——基础环境搭建 一、目的 首先需要明确的是使用数据库读写分离的目的,它的主要应用场景是为了解决数据库“读”的瓶颈问题,在对数据库进行一定程度的优化后,任然不能满足“读”数据的业务需求,这样我们就需要引入数据库读写分离了。 二、技术介绍 一般的数据库读写分离分为两种。一种是通过中间件如Mycat,还有一种就是在应用程序中选择要操作哪个数据...

生死无尘的博客 1941

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

利用mha实现mysql的主从自动切换

ssh免密连接: [root@localhost etc]# ssh-keygen [root@localhost etc]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.127.37 #免密登录对方的ssh 这的ip是对方的ip [root@localhost etc]# vim /etc/ssh/ssh_config #关闭yes的...

云原生运维圈 776

Spring Boot 动态连接多数据源,主从数据库

微服务动态配置多数据源,主从数据库

pliulijia的专栏 1万+

安装MHA踩过的坑

MHA 0.58+Mysql5.7+redhat7.4 已测试通过。 之前在redhat6.10上安装,在家里电脑安装OK,一样的包,拿到公司安装,失败了。很郁闷。随后改成redhat7.4安装,安装成功,走了不少弯路。把坑写出来。 一些包的下载地方 ,在使用redhat6.10的时候,下载过,安装成功了,redhat7.4没有从这里下载直接光盘yum了。 http://rpm.pbone....

文档搬运工 1万+

MHA部署配置详解

此文档,没有逻辑线路,估计看时比较吃力。不知那儿跟哪儿。 在这里说明一下,此文档是在原 网络转载上 新增了一些内容。其他的基本保持不变。阅读本文档,1, 建议从头到尾 阅读, 前面为 部署, 中间为 对应问题处理, 后段 为 mha 维护。 2, 增加了 双主模式,半同步复制。 3, 新增sudo mysql ,

上帝之手&传奇 - MartinLee 4830

使用 MHA 实现 MySQL 主从复制高可用

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

愿许浪尽天涯的博客 5799

MHA高可用搭建简述(基于日志点)

本文在主从的基础搭建,配置好本地yum源, 本文所依据配置结构 172.16.101.1 mha-server//现主机 172.16.101.3 mha-bak//备用主机 172.16.101.2 mha-slave//从机&监控机 安装 MHA 及基本环境配置 1、在所有的节点上安装 MHA node 所需的 perl 模块(DBD-mysql) yum install p

Poirot的博客 603

SpringBoot 2.3 新特性之优雅停机

111111111111111111111111111111111111111111111111111111

dongbeiou的专栏 429

项目经验:MHA集群的搭建

项目经验第一个项目是mha集群的搭建 mha 集群可以实现MySQL高可用,确保在故障切换过程中最大程度 保证数据的一致性.搭建这个集群我用了五条机器,四台数据库服务器, 一台pc计算机, 一台数据库服务器做为mha manger 三台数据库作为MHA node ,为三台 数据节点服务器配置一主多从结构,创建访问用户.管理服务器安装MHA软件包,更改配置文件,创建故障切换脚本,部署vip地址,配置...

weixin_44793145的博客 827
上一篇: MysQL超变身!MysQL日志管理、备份与恢复
下一篇: 想学Docker?我教你啊~
Alterego_
博客等级 码龄6年 14粉丝 45原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值