学习MHA架构一篇就够了(博主之疯狂踩坑)!

本文详细介绍了MHA(Master High Availability)的原理、工作流程及应用场景,包括其在MySQL高可用性环境下的优势。博主通过实际项目,演示了如何配置一主两从的MHA架构,以及在故障模拟中如何进行故障切换,帮助读者掌握MHA的部署和维护。
摘要由CSDN通过智能技术生成

博主疯狂踩坑完成了搭建一个MHA架构,一套优秀的MySQL故障切换和主从提升的高可用软件,解决mysql主服务器单点故障的方法。

前言

MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本人 youshimaton 开发,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。在 MySQL 故障切换过程中,MHA 能做到 0~30 秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA 能最大程度上保证数据库的一致性,以达到真正意义上的高可用。MHA 由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager可以独立部署在一台独立的机器上管理多个Master-Slave集群,也可以部署在一台Slave上。当 Master 出现故障是,它可以自动将最新数据的Slave 提升为新的 Master,然后将所有其他的 Slave 重新指向新的 Master。整个故障转移过程对应用程序是完全透明的。

适用场景:

目前 MHA 主要支持一主多从的架构,要搭建 MHA,要求一个复制集群必须最少有 3 台数据库服务器,一主二从,即一台充当 Master,一台充当备用 Master,另一台充当从库。出于成本考虑,淘宝在此基础上进行了改造,目前淘宝开发的 TMHA 已经支持一主一从。

MHA概述

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

MHA工作原理:

1.从宕机崩溃的 Master 保存二进制日志事件(binlog event);
2. 识别含有最新更新的 Slave;
3. 应用差异的中继日志(relay log)到其他 Slave;
4. 应用从 Master 保存的二进制日志事件;
5. 提升一个 Slave 为新的 Master;
6. 使其他的 Slave 连接新的 Master 进行复制;

MHA组件介绍

MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。

Manager工具包主要包括以下几个工具:

(1)masterha_check_ssh #检查MHA的SSH配置状况;

(2)masterha_check_repl #检查MySQL复制状况;

(3)masterha_manger #启动MHA;

(4)masterha_check_status #检测当前MHA运行状态;

(5)masterha_master_monitor #检测master是否宕机;

(6)masterha_master_switch #控制故障转移(自动或者手动);

(7)masterha_conf_host #添加或删除配置的server信息;

Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

(1)save_binary_logs #保存和复制master的二进制日志;

(2)apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的slave;

(3)purge_relay_logs #清除中继日志(不会阻塞SQL线程);

三、MHA的项目

3.1:项目需求

本案例要求通过MHA监控MySQL数据库在故障时进行自动切换,不影响业务。
在这里插入图片描述

3.2:案例实现思路

1、 安装MySQL数据库
2、 配置MySQl一主两从
3、 安装MHA软件
4、 配置无密码认证
5、 配置MySQL MHA 高可用
6、 模拟 master 故障切换

3.3:项目环境

管理 ip
master 192.168.158.10
slave1 192.168.158.20
slave2 192.168.158.30
manager 192.168.158.40

操作系统:CentOS7-4 版本, MHA版本是0.57版本, Mysql数据库安装的是5.6版本
先在三台服务器上安装 MYSQL 数据库。这里我就不再展示了,具体的搭建过程见之前的博客
三、具体搭建过程
在这里插入图片描述
通过修改主机名或者xshell中的名称区分服务器,一面混淆

3.4:实现MySQL的一主两从

mysql5.6安装步骤

  • 主服务器
vim /etc/my.cnf
#添加
server-id = 1               //指定id号,服务器的唯一标识,不能相同
log-bin=master-bin           //主服务器日志文件
log-slave-updates=true       //从服务器更新二进制日志
  • 从服务器1
vim /etc/my.cnf
server-id = 2               #不能相同    
relay-log=relay-log-bin     //从主服务器上同步日志文件记录到本地  
relay-log-index=slave-relay-bin.index   //定义relay-log的位置和名称
  • 从服务器2
vim /etc/my.cnf
server-id = 3               #不能相同    
relay-log=relay-log-bin     //从主服务器上同步日志文件记录到本地  
relay-log-index=slave-relay-bin.index   //定义relay-log的位置和名称

注意:如果你的 mysql 手工编译安装的是 5.7 版本,从服务器一定要在client段把 utf-8 这行注释掉,否则在最后检查MHA健康状况时报错。

[root@server1 ~]# mysql -u root -p
 mysql> grant replication slave on *.* to 'myslave'@'192.168.158.%' identified by '123456';
 mysql> grant all privileges on *.* to 'mha'@'192.168.158.%' identified by 'manager';
 mysql> flush privileges;
  • 数据库重启服务
systemctl restart mysqld
  • Mysql1、Mysql2、Mysql3 分别做两个软链接,软链接是为 HMA 服务的。

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

  • 数据库的授权。在所有的数据库节点上授权两个用户,一个是从库同步使用,另外一个是 manager 使用监控,即在master、slave1、slave2 上搭建。
mysql -u root -p
mysql> grant replication slave on *.* to 'myslave'@'192.168.158.%' identified by '123';
mysql> grant all privileges on *.* to 'mha'@'192.168.158.%' identified by 'manager';
flush privileges;      //刷新数据库的权限相关表
select host,user,password from mysql.user;  #查看授权表

在这里插入图片描述

  • 在master主机上查看二进制文件和同步点
mysql> show master status;
  • 在slave1和slave2分别执行同步
mysql> change master to
master_host='192.168.158.10',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=675;   #'master-bin.000001',master_log_pos=675;这是master主机上查看二进制文件和同步点
mysql> start slave;
  • 查看 IO 和 SQL 线程都是 yes 代表同步是否正常。
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

必须设置两个从库为只读模式:

 mysql> set global read_only=1;
  • 在master主库插入两条数据,测试是否同步。
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)
mysql> use test_db;
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.13 sec)
mysql> insert into test(id) values (1);
Query OK, 1 row affected (0.03 sec)
  • 在两个从库分别查询如下所示说明主从同步正常。
mysql> select * from test_db.test; +------+
| id | +------+
| 1 | +------+
1 row in set (0.00 sec)
#同步正常

3.5:安装 MHA 软件

  • 所有服务器上都安装 MHA 依赖的环境,首先安装 epel 源。将CentOS7-Base-163.repo和epel.repo移动到/etc/yum.repo/下
[root@MHA-
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值