MySQL数据库高可用(MHA)详细方案与部署教程

一:MHA简介

核心功能

二:MHA工作原理

三:MHA组件

四:MHA 架构与工具

MHA架构

Manager关键工具

Node工具

五:工作原理与流程

1: 故障检测

2:  故障切换(Failover)

3 : 切换模式

六:与其他高可用方案对比

七:实际应用场景

八: 总结


 

一:MHA简介

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在较大程度上保证主从数据库数据的一致性,以达到真正意义上的高可用。  

核心功能

  • 自动故障检测与切换:主库故障时,自动选举最优从库(Slave)晋升为新主库。

  • 数据一致性保障:通过应用未同步的二进制日志(Binlog)补全数据差异。

  • 手动切换支持:支持人工触发主从切换(如维护场景)。

  • 多节点管理:支持管理多个主从复制集群。

二:MHA工作原理

  1. 当master出现故障时,通过对比slave之间I/O线程读取master上binlog的位置,选取最接近的slave做为最新的slave(latest slave)。

  2. 其它的slave通过与latest slave对比生成差异中继日志,并应用。

  3. 在latest slave上应用从master保存的binlog,同时将latest slave提升为master。

  4. 最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制.

三:MHA组件

  • MHA Manager(管理节点)

    MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。比如masterha_manager工具实现自动监控MySQL Master和实现master故障切换,其它工具手动实现master故障切换、在线mater转移、连接检查等等。一个Manager可以管理多 个master-slave集群

  • MHA Node(数据节点)

    MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。

四:MHA 架构与工具

MHA架构

  • Manager节点:核心控制节点,负责监控主库状态、协调故障切换。

  • Master节点:当前主库,负责处理写请求。

  • Slave节点:从库,复制主库数据,故障切换时可能晋升为新主库。

  • VIP(虚拟IP):可选组件,用于对外提供透明的访问入口。

Manager关键工具

工具说明
masterha_check_ssh检查节点间SSH免密登录配置
masterha_check_repl验证主从复制配置是否正确
masterha_manager启动MHA,主监控进程,持续检查主库健康状态
masterha_check_status检测当前MHA运行状态
masterha_master_monitor监测master是否宕机
masterha_master_switch控制故障转移(自动或手动)
masterha_conf_host添加或删除配置的server信息

Node工具

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

五:工作原理与流程

1: 故障检测

  • Manager节点 定期通过 ping 或执行SQL命令(如 SELECT 1)检测主库存活状态。

  • 若主库连续无响应,触发 故障判定

2:  故障切换(Failover)

  1. 选举新主库

    • 选择数据最接近原主库的从库(通过对比 SHOW SLAVE STATUS 中的 Exec_Master_Log_Pos)。

    • 优先选择已开启 log_slave_updates 的从库(确保其Binlog完整)。

  2. 数据补全

    • 从原主库服务器(若可访问)或存活的从库获取未同步的Binlog。

    • 将缺失的Binlog事件应用到新主库,确保数据一致性。

  3. 切换拓扑

    • 将其他从库指向新主库,重建复制关系。

    • 更新应用连接的VIP或配置,指向新主库。

3 : 切换模式

  • 自动切换(Automatic Failover):主库不可用时自动触发。

  • 手动切换(Manual Switchover):人工干预,常用于维护场景。

六:与其他高可用方案对比

方案MHAGalera ClusterInnoDB Cluster
架构主从复制+自动切换多主同步复制基于Group Replication
数据一致性最终一致性强一致性强一致性
复杂度
适用场景读写分离,主库故障切换多活写入,低延迟云原生集成,自动化管理

七:实际应用场景

  1. 电商大促:主库突发故障时,快速切换保障订单交易。

  2. 金融系统:通过Binlog补全确保账户余额一致性。

  3. 物联网日志存储:读写分离架构下主库宕机不影响数据写入。

八: 总结

MHA 是MySQL主从架构下简单高效的高可用解决方案,尤其适合对数据一致性要求较高且运维资源有限的场景。尽管其功能不如Galera或InnoDB Cluster全面,但在传统主从复制架构中仍具有不可替代的价值。实际使用中需结合监控工具(如Prometheus)和告警系统,形成完整的高可用保障体系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为设备链路聚合实验:网络工程实战指南

链路聚合就像为网络搭建 “并行高速路”,既能扩容带宽,又能保障链路冗余,超实用! 一、实验拓扑速览 图中两台交换机 LSW1 和 LSW2,PC1、PC2 归属 VLAN 10,PC3 归属 VLAN 30。LSW1 与 LSW2 通过 GE0/0/1、…

数组和集合

数组和集合的区别: 1、数组是固定长度的数据结构,一旦创建长度就无法改变,集合是动态长度数据结构,可根据需求动态增加或减少元素。 2、数组包含基本数据类型和对象,而集合只能包含对象。 3、数组可以直接访问元素&…

WPF MVVM进阶系列教程(一、对话框)

🍠 WPF MVVM进阶系列教程 一、对话框 在前面的文章中,我们介绍了MVVM开发的一些基础知识。 对于日常开发来说,基本已经足够应付大部分场景。 从这里开始,介绍的都是在MVVM模式开发中,提升程序可维护性、灵活性、健壮…

【AI News | 20250507】每日AI进展

AI Repos 1、CFWorkerACME SSL证书助手是一个免费开源的平台,基于Cloudflare Worker运行,旨在自动化SSL证书的申请和下发,尤其适用于多服务器或内网环境。它通过自动化的CNAME和DNS操作完成域名验证,支持Let’s Encrypt、ZeroSSL…

5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)

最近很多朋友都在问:怎么本地部署 DeepSeek 搭建个人知识库。 老实说,如果你不是为了研究技术,或者确实需要保护涉密数据,我真不建议去折腾本地部署。 为什么呢? 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力提炼到 Qwen 和 Llama 的蒸馏版本上。 虽说性能是提升…

极狐GitLab 分支管理功能介绍

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 分支 (BASIC ALL) 分支是项目工作树的一个版本。分支是项目开发的基础。当你创建一个新的项目时,极狐GitLab 会为…

基于ASP.NET+MySQL实现待办任务清单系统

基于ASP.NET的ToDoList的设计与实现 一、前言 1.1 实验目的 使学生综合使用所学过的ASP.NET网络编程知识,掌握网络环境程序设计的基本概念;结合实际的操作和设计,巩固课堂学习内容,掌握网络环境编程的特点、原理和技术&#xf…

普通 html 项目引入 tailwindcss

项目根目录安装依赖 npm install -D tailwindcss3 postcss autoprefixer 初始化生成tailwind.config.js npx tailwindcss init 修改tailwind.config.js /** type {import(tailwindcss).Config} */ module.exports {content: ["./index.html"], //根据自己的项目…

汽车免拆诊断案例 | 2015款奔驰C200L车发动机起动延迟

故障现象  一辆2015款奔驰C200L车,搭载274发动机,累计行驶里程约为15.6万km。该车发动机起动延迟,且发动机故障灯异常点亮。 故障诊断  用故障检测仪检测,发动机控制单元中存储有故障代码“P001685 进气凸轮轴(气缸…

[蓝桥杯 2025 省 B] 水质检测(暴力 )

暴力暴力 菜鸟第一次写题解,多多包涵!!! 这个题目的数据量很小,所以没必要去使用bfs,直接分情况讨论即可 一共两排数据,我们使用贪心的思想,只需要实现从左往右的过程中每个检测器相互连接即…

网络接口返回类ResponseEntity

网络接口返回类ResponseEntity 简介方法获取工厂方法ResponseEntity.ok()返回BodyBuilder返回文字信息返回类对象(Spring自动转换为json格式)返回空内容‌ ResponseEntity.notFound()返回HeadersBuilder返回文字信息 status(HttpStatus)返回BodyBuildern…

Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡

Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡 一、Redis的本质与核心价值 1.1 Redis的技术定位 Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,由Salvatore Sanfilippo于2009年创建。它不同于传…

macOS上管理多个Node.js版本

管理工具 fnm 和 nvm nvm:作为最广泛使用的 Node.js 版本管理器,使用 Bash 编写,适用于类 UNIX 环境(如 macOS 和 Linux),也可以通过兼容的 shell(如 WSL)在 Windows 上使用。fnm:(Fast Node Manager)一种较新的、快速…

uDistil-Whisper:低数据场景下基于无标签数据过滤的知识蒸馏方法

uDistil-Whisper: Label-Free Data Filtering for Knowledge Distillation in Low-Data Regimes 会议:2025年NAACL 机构:卡内基梅降大学 Abstract 近期研究通过伪标签(pseudo-labels)将Whisper的知识蒸馏到小模型中&#xff0…

【MySQL】-- 数据库约束

文章目录 1. 什么是数据库约束2. 约束类型3. NOT NULL 非空约束4. DEFALUT 默认值约束5. UNIQUE 唯一约束6. PRIMARY KEY 主键约束6.1 自增主键6.1 一个自增主键包含多个列 7. FOREIGN KEY 外键约束8. CHECK 约束 1. 什么是数据库约束 数据库约束是指对数据库表中的数据所施加…

鸿蒙NEXT开发动画案例2

1.创建空白项目 2.Page文件夹下面新建Spin.ets文件,代码如下: // 接口定义(必须放在使用前) /*** 关键帧动画整体配置参数*/ interface KeyframeAnimationConfig {iterations: number;delay: number; }/*** 单个关键帧动画项*/…

团队协作的润滑剂——GitHub与协作流程

各位代码界的社交恐惧症患者们,今天我们要聊的是如何假装自己很会团队协作——使用GitHub!这就像程序员版的"相亲平台",只不过在这里,你展示的不是自拍和收入,而是代码和commit记录(后者往往更令…

「Mac畅玩AIGC与多模态13」开发篇09 - 基于多插件协同开发智能体应用(天气+名言查询助手)

一、概述 本篇介绍如何在 macOS 环境下,同时接入多个自定义 OpenAPI 插件,实现智能体根据用户请求自动分析,调用天气查询或名言查询服务,完成多功能协同应用开发。 二、环境准备 1. 确认本地开发环境 macOS 系统Dify 平台已部…

react-12父子组件间的数据传递(子传父)(父传子)- props实现

1.子组件调用父组件的函数并传递数据(子传父) 1.1父组件 import React, { Component } from react; import ChildComponent from ./ChildComponent;class ParentComponent extends Component {constructor(props) {super(props);this.state {items: […

Spring Boot 单元测试使用教程(仅供参考)

单元测试是软件开发中至关重要的一环&#xff0c;Spring Boot 提供了强大的测试支持。以下是 Spring Boot 单元测试的详细教程。 1. 准备工作 1.1 添加测试依赖 在 pom.xml 中添加测试相关依赖&#xff1a; <dependency><groupId>org.springframework.boot</…