MySQL之MHA高可用

本文详细介绍了MySQL MHA(Master High Availability)的概念、特点和工作原理,以及如何搭建MySQL MHA实现高可用。MHA能自动进行故障切换,确保在30秒内完成,最大程度保证数据一致性和不丢失。通过监控MySQL集群,当Master节点出现故障时,MHA会选择最新数据的Slave提升为新Master。此外,文章还详细阐述了搭建MHA环境的步骤,包括环境准备、主从复制、无密码认证配置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

MySQL服务器中,单台服务器无法承载服务量就配置多台MySQL服务器,多台MySQL服务器或者MySQL服务器无冗余的情况下,配置主从复制。MySQL服务器的读和写的压力不均衡可使用MySQL的读写分离,MySQL的读写分离中Master存在单点故障,就得用到MHA

一、MHA概念

1.什么是MHA

MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件

MHA的出现就是解决MySQL单点故障的问题

MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作

MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用

2.MHA的组成

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

2.2MHA Manager(管理节点)

MHA Manager可以单独部署在一台独立的机器上,管理多个Master-Slave集群;也可以部署在一台Slave节点上

MHA Manager会定时探测集群中的master节点。当master出现故障时,它可以自动将最新数据的Slave提升为新的Master,然后将所有其他的Slave重新指向新的Master

整个故障迁移的过程对应用程序完全透明

3.MHA特点

自动故障切换的过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失

使用半同步复制,可以大大降低数据丢失的风险,如果只有一个Slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的Slave服务器上,因此可以保证所有节点的数据一致性

目前MHA支持一主多从架构,最少三台服务,即一主两从
MHA:为了解决的是故障切换、数据尽可能地保存,以及所有节点日志地一致性

4.MHA工作原理(流程)

MHA有3个部分

核心是主从
Manager 管理节点:管理数据库集群信息,定义、触发故障切换

Node 数据节点:主要负责保存日志、比较中继日志,选择主备

MHA会通过Node监控MySQL数据库服务地节点信息,定期检测和返回Master角色地健康状态(健康检查)

MHA通过将VIP定义在Master节点上,并且数据库的访问也从此VIP进入,当Master异常时,MHA会进行"故障切换",就是VIP漂移+二进制日志保存

漂移到主备节点后,会通过脚本命令来控制MySQL服务器角色的变更,例如将主-备服务器变更为主服务器,将其他的从服务器指向新的主服务器,来继续运行

MHA工作原理总结如下:

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

二、搭建MySQL MHA

MHA高可用是基于主从复制的基础上进行安装部署一台新的MHA Manager服务器,高服务器用来监控Master服务器,当Master服务器出现故障时,它可以自动将最新的数据Slave提升为Master(或者可指定直接新的Master)。然后其它的Slave重新指向新的Master

1.准备环境
服务器 IP
MHA Manager 192.168.153.31
Master 192.168.153.40
Slave1 192.168.153.77
Slave2 192.168.153.32

所有服务器关闭防火墙,关闭核心防护

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.搭建主从复制

192.168.153.40为Master服务器,192.168.153.77为Slave1服务器,192.168.153.32为Slave2服务器

修改Master、Slave1、Slave2节点的MySQL主配置文件/etc/my.cnf
Master主服务器(192.168.153.40)

vim /etc/my.cnf
server-id = 1    #server-id与从服务器server-id不能重复
log-bin=master-bin    #添加,主服务器开启二进制文件
log_slave-updates=true   #添加,允许从服务器更新二进制文件

systemctl restart mysqld    #重启mysql服务

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

在这里插入图片描述
在这里插入图片描述
slave:slave1(192.168.153.77)、slave2(192.168.153.32)

vim /etc/my.cnf
server-id = 2 
#server-id = 3  mysql3则为3,三台服务器 server-id 不能一样
添加下面代码
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
 
systemctl restart mysqld
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

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

3、配置MySQL一主两从

所有MySQL服务器进行MySQL授权

允许myslave用户在该网段使用密码123456登录
grant replication slave on *.* to 'myslave'@'192.168.153.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值