0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MySQL MHA基本介绍

jf_78858299 来源:基础技术研究 作者:王晓华 2023-03-29 13:12 次阅读

******** 摘要********

MySQL是目前主流的关系型数据库管理系统,目前在全球被广泛地应用。由于其开源、体积小、速度快、成本低、安全性高,因此许多网站选择MySQL作为数据库进行存储数据。

****以前在运维数据库过程中经常会遇到这样的困扰:没有工具快速切换集群主库,如果切换主库,需要DBA手动修改从库指向,修改元信息等。所以今天给大家介绍一款工具MHA,可以实现需求快速上线,不影响当前架构,整个切换全部自动化处理,方便DBA使用,例如检查,操作,展示等。

在 MySQL(5.5 及以下)传统复制的时代,MHA(Master High Availability)在 MySQL 高可用应用中非常成熟。在 MySQL(5.6)及 GTID 时代开启以后,MHA 没有随之进行进一步的更新,但是很多互联网公司依然在沿用这个技术。因此本文给出了MHA的简单介绍。

2

MHA简介

【 什么是MHA

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

目前MHA主要支持一主多从的架构,在搭建MHA时至少要有一个Master主库和两个Slave从库,MHA架构支持任何存储引擎。

****该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

【 MHA优势

  • 不影响服务器性能,易安装,不改变现有部署
  • 故障切换(实现自动故障检测和故障转移,通常在30秒以内)
  • 数据一致性保证
  • 不需要对当前mysql环境做重大修改
  • 不需要添加额外的服务器(仅一台manager就可管理上百个replication)
  • ****性能优秀,可工作在半同步复制和异步复制,当监控mysql状态时,仅需要每隔N秒向master发送ping包(默认3秒),所以对性能无影响。你可以理解为MHA的性能和简单的主从复制框架性能一样
  • ****只要replication支持的存储引擎mha都支持

【 MHA组成

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

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

  • masterha_check_ssh 检查MHA的SSH配置状况
  • masterha_check_repl 检查MySQL复制状况
  • masterha_manger 启动MHA
  • masterha_check_status 检测当前MHA运行状态
  • masterha_master_monitor 检测master是否宕机
  • masterha_master_switch 控制故障转移(自动或者手动)
  • masterha_conf_host 添加或删除配置的server信息

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

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

【 MHA版本选择 】

从MHA的0.56版本开始,也支持基于GTID的故障切换。MHA会自动检测mysqld是否在GTID运行,如果GTID开启,MHA就实现带GTID的故障切换,如果没有启用,MHA就使用基于relay log的故障切换。

3MHA实现

【 工作流程

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

【 MHA架构

中控机管理工具,用于管理mha部署、主从切换等;****

****mha管理工具,支持部署、更新配置文件、目录等开关。manager收集切换日志、集群互信、检查ssh、repl状态、配置文件一致性等。

图片

【 核心脚本工作原理介绍 】

1) masterha_manager

mha启动脚本为masterha_manager,可选参数为remove_dead_master_conf、manger_log、ignore_last_failover。

masterha_manager主要流程为:

1.调用MasterMonitor,监控MySQL master状态;

2.发现master状态异常后,调用MasterFailover进行切换;

3.manager通过monitor监测master状态,一旦获得返回值,则表明monitor状态异常。通过判断exit_code确定是否应切换。

4.检测通过后,调用MasterFailover进执行切换操作。

具体流程如下:

图片

2) MasterMonitor

MasterHA_Manager调用MasterMonitor的main方法对MySQL进行监控。

具体流程图如下:

图片

核心方法是一个死循环,不断调用wait_until_master_is_dead方法监测主库状态。wait_until_master_is_dead方法的返回值中,exit_code有的值有四种,分别是0、1、20、retry。其中只有当exit_code=MHA::ManagerConst::MASTER_DEAD_RC,也就是20时,后续才会调用failover方法。

wait_until_master_is_dead方法中,核心方法是调用wait_until_master_is_unreachable方法并处理其返回值。逻辑关系如下:

图片

拿到wait_until_master_is_unreachable的返回值后,会再次根据配置文件探活,确认主库连接失败后,根据配置文件检测slave状态和数量,有合适新主库后,exit_code返回20,否则返回0或者1。

wait_until_master_is_unreachable方法的返回值有三个,分别是ret、dead_master和ssh_reachable。该方法的逻辑如下:

图片

wait_until_master_is_unreachable调用MHA::ServerManager对主库进行实时检测,包括deadservers、aliveservers、aliveslaves等。如果启用GTID,则检查binlog server,否则进行ssh和slave版本检测。

后续使用MHA::HealthCheck对主库进行ping检查。检查确认主库的确不可达后,返回func_rc, current_master, ssh_reachable。

4

总结

MHA 由日本 DeNA 公司 youshimaton 开发,他认为在 GTID 环境下MHA 存在的价值不大,MHA 最近一次发版是 2018 年。现如今使用 MySQL 已离不开 GTID ,无论是从功能、性能角度,还是从维护角度,GTID 能具备更优异的表现。但是无论是什么技术,他的核心原理都是可以自动将最新数据的Slave提升为新的 Master,然后将所有其他的Slave重新指向新的Master。整个故障转移过程对应用程序是完全透明的,因此MHA的时代是值得被大家了解和记忆的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3754

    浏览量

    64250
  • MySQL
    +关注

    关注

    1

    文章

    799

    浏览量

    26406
  • 存储数据
    +关注

    关注

    0

    文章

    85

    浏览量

    14086
收藏 人收藏

    评论

    相关推荐

    MySQL编码机制原理

    前言 一位读者在本地部署 MySQL 测试环境时碰到一个问题,我觉得挺有代表性的,所以写篇文章介绍一下,看完相信你会对 MySQL 的编码机制有最本质的了解,本文的目录结构如下 读者问题简介
    的头像 发表于 11-09 11:01 108次阅读

    MySQL知识点汇总

    大家好,这部分被称为DQL部分,是每个学习MySQL必须要学会的部分,下面就让我来介绍MySQL中的其他部分。
    的头像 发表于 08-05 15:27 356次阅读
    <b class='flag-5'>MySQL</b>知识点汇总

    MySQL的整体逻辑架构

    支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一。如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心
    的头像 发表于 04-30 11:14 414次阅读
    <b class='flag-5'>MySQL</b>的整体逻辑架构

    MySQL密码忘记了怎么办?MySQL密码快速重置方法步骤命令示例!

    MySQL密码忘记了怎么办?MySQL密码快速重置方法步骤命令示例! MySQL是一种常用的关系型数据库管理系统,如果你忘记了MySQL的密码,不必担心,可以通过一些简单的步骤来快速重
    的头像 发表于 01-12 16:06 706次阅读

    mysql密码忘了怎么重置

    mysql密码忘了怎么重置  MySQL是一种开源的关系型数据库管理系统,密码用于保护数据库的安全性和保密性。如果你忘记了MySQL的密码,可以通过以下几种方法进行重置。 方法一:使用MySQ
    的头像 发表于 12-27 16:51 6097次阅读

    MySQL的执行过程 SQL语句性能优化常用策略

    回顾 MySQL 的执行过程,帮助介绍如何进行 sql 优化。
    的头像 发表于 12-12 10:26 610次阅读
    <b class='flag-5'>MySQL</b>的执行过程 SQL语句性能优化常用策略

    mysql配置失败怎么办

    MySQL是一款广泛使用的关系型数据库管理系统,但在配置过程中可能会出现各种问题,导致配置失败。本文将详细介绍MySQL配置失败的常见原因和对应的解决方案,以帮助读者快速排查和解决问题。 一、检查
    的头像 发表于 12-06 11:03 3338次阅读

    mysql数据库基础命令

    MySQL是一个流行的关系型数据库管理系统,经常用于存储、管理和操作数据。在本文中,我们将详细介绍MySQL的基础命令,并提供与每个命令相关的详细解释。 登录MySQL 要登录
    的头像 发表于 12-06 10:56 535次阅读

    php的mysql无法启动

    MySQL是一种常用的关系型数据库管理系统,而PHP是一种广泛应用于服务器端的脚本语言。在使用PHP开发网站或应用时,经常会碰到MySQL无法启动的问题。本文将详细介绍解决MySQL
    的头像 发表于 12-04 15:59 1380次阅读

    MySQL常用语句

    MySQL是一个关系型数据库管理系统,广泛应用于Web应用程序的开发以及数据管理领域。在使用MySQL时,有一些常用的语句可以帮助我们进行数据的操作和管理。接下来,我将详细介绍MySQL
    的头像 发表于 11-21 11:11 485次阅读

    mysql和sql server区别

    MySQL和SQL Server是两种常见的关系型数据库管理系统(RDBMS),用于存储和管理数据库。虽然它们都支持SQL语言,但在其他方面存在一些显著的区别。以下是MySQL和SQL Server
    的头像 发表于 11-21 11:07 1458次阅读

    MySQL导出的步骤

    MySQL是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。在实际应用中,我们经常需要将MySQL数据库中的数据导出到其他地方,如备份数据、数据迁移、数据分析等。下面是使用MySQL
    的头像 发表于 11-21 10:58 745次阅读

    介绍4种常用的MySQL同步ES方案

    在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。
    的头像 发表于 11-20 10:45 656次阅读
    <b class='flag-5'>介绍</b>4种常用的<b class='flag-5'>MySQL</b>同步ES方案

    mysql是一个什么类型的数据库

    强、易于使用和管理。在本文中,我们将详尽、详实、细致地介绍MySQL的功能、优势、架构、语法等方面。 一、MySQL的功能: 数据库管理:MySQL具备创建和管理数据库的能力。它可以创
    的头像 发表于 11-16 14:43 1656次阅读

    mysql主从复制 混合类型的复制

    使用行级复制和语句级复制。本文将详细介绍MySQL主从复制的概念、原理、配置步骤以及优缺点,并重点讨论混合类型复制的实现和应用。希望通过本文的阐述,能使读者对MySQL主从复制混合类型复制有更全面的了解。 1.
    的头像 发表于 11-16 14:20 522次阅读